mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-02-05 02:25:08 -05:00
Compare commits
3 Commits
bbolt-view
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fab687d96d | ||
|
|
cf94ccbf72 | ||
|
|
75895c1e0b |
@@ -2,24 +2,38 @@ version: v1.7.0-alpha.1
|
|||||||
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
|
||||||
@@ -175,7 +181,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 +232,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 +254,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 +286,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 +381,36 @@ 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_balance_after_withdrawals#capella
|
|
||||||
- get_builder_from_deposit#gloas
|
- 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_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
|
||||||
- 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
|
|
||||||
- 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
|
||||||
|
|||||||
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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,27 +17,50 @@ 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="6dc696bb">
|
||||||
// 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 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 {
|
||||||
|
|||||||
@@ -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="cf1e65b5">
|
||||||
// return len(indices) > 0 and indices == sorted(indices) and
|
// def is_valid_indexed_payload_attestation(
|
||||||
// bls.FastAggregateVerify(
|
// state: BeaconState, indexed_payload_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 ``indexed_payload_attestation`` is non-empty, has sorted indices, and has
|
||||||
// )
|
// a valid aggregate signature.
|
||||||
|
// """
|
||||||
|
// # Verify indices are non-empty and sorted
|
||||||
|
// indices = indexed_payload_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, None)
|
||||||
|
// signing_root = compute_signing_root(indexed_payload_attestation.data, domain)
|
||||||
|
// return bls.FastAggregateVerify(pubkeys, signing_root, indexed_payload_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 {
|
||||||
|
|||||||
@@ -29,13 +29,10 @@ func (s *Store) LastArchivedRoot(ctx context.Context) [32]byte {
|
|||||||
_, span := trace.StartSpan(ctx, "BeaconDB.LastArchivedRoot")
|
_, span := trace.StartSpan(ctx, "BeaconDB.LastArchivedRoot")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
|
|
||||||
blockRoot := make([]byte, 0, 32)
|
var blockRoot []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)
|
||||||
_, br := bkt.Cursor().Last()
|
_, blockRoot = bkt.Cursor().Last()
|
||||||
if len(br) > 0 {
|
|
||||||
copy(blockRoot, br)
|
|
||||||
}
|
|
||||||
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.
|
||||||
@@ -50,13 +47,10 @@ func (s *Store) ArchivedPointRoot(ctx context.Context, slot primitives.Slot) [32
|
|||||||
_, span := trace.StartSpan(ctx, "BeaconDB.ArchivedPointRoot")
|
_, span := trace.StartSpan(ctx, "BeaconDB.ArchivedPointRoot")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
|
|
||||||
blockRoot := make([]byte, 0, 32)
|
var blockRoot []byte
|
||||||
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)
|
||||||
br := bucket.Get(bytesutil.SlotToBytesBigEndian(slot))
|
blockRoot = bucket.Get(bytesutil.SlotToBytesBigEndian(slot))
|
||||||
if len(br) > 0 {
|
|
||||||
copy(blockRoot, br)
|
|
||||||
}
|
|
||||||
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.
|
||||||
|
|||||||
@@ -809,17 +809,14 @@ func (s *Store) HighestRootsBelowSlot(ctx context.Context, slot primitives.Slot)
|
|||||||
func (s *Store) FeeRecipientByValidatorID(ctx context.Context, id primitives.ValidatorIndex) (common.Address, error) {
|
func (s *Store) FeeRecipientByValidatorID(ctx context.Context, id primitives.ValidatorIndex) (common.Address, error) {
|
||||||
ctx, span := trace.StartSpan(ctx, "BeaconDB.FeeRecipientByValidatorID")
|
ctx, span := trace.StartSpan(ctx, "BeaconDB.FeeRecipientByValidatorID")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
addr := make([]byte, 0, 20)
|
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)
|
||||||
stored := bkt.Get(bytesutil.Uint64ToBytesBigEndian(uint64(id)))
|
addr = bkt.Get(bytesutil.Uint64ToBytesBigEndian(uint64(id)))
|
||||||
if len(stored) > 0 {
|
|
||||||
copy(addr, 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.
|
||||||
if len(addr) == 0 {
|
if addr == nil {
|
||||||
bkt = tx.Bucket(registrationBucket)
|
bkt = tx.Bucket(registrationBucket)
|
||||||
enc := bkt.Get(bytesutil.Uint64ToBytesBigEndian(uint64(id)))
|
enc := bkt.Get(bytesutil.Uint64ToBytesBigEndian(uint64(id)))
|
||||||
if enc == nil {
|
if enc == nil {
|
||||||
@@ -829,7 +826,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
|
||||||
}
|
}
|
||||||
copy(addr, reg.FeeRecipient)
|
addr = reg.FeeRecipient
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -14,13 +14,10 @@ import (
|
|||||||
func (s *Store) DepositContractAddress(ctx context.Context) ([]byte, error) {
|
func (s *Store) DepositContractAddress(ctx context.Context) ([]byte, error) {
|
||||||
_, span := trace.StartSpan(ctx, "BeaconDB.DepositContractAddress")
|
_, span := trace.StartSpan(ctx, "BeaconDB.DepositContractAddress")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
addr := make([]byte, 0, 20)
|
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)
|
||||||
stored := chainInfo.Get(depositContractAddressKey)
|
addr = chainInfo.Get(depositContractAddressKey)
|
||||||
if len(stored) > 0 {
|
|
||||||
copy(addr, 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,8 +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 {
|
||||||
keyCopy := bytes.Clone(pubKey)
|
keys = append(keys, pubKey)
|
||||||
keys = append(keys, keyCopy)
|
|
||||||
return nil
|
return nil
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ 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"
|
||||||
@@ -188,23 +187,20 @@ 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...)
|
||||||
rawStateDiff := bucket.Get(buf)
|
stateDiff = bucket.Get(buf)
|
||||||
if len(rawStateDiff) == 0 {
|
if stateDiff == nil {
|
||||||
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...)
|
||||||
rawValidatorDiff := bucket.Get(buf)
|
validatorDiff = bucket.Get(buf)
|
||||||
if len(rawValidatorDiff) == 0 {
|
if validatorDiff == nil {
|
||||||
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...)
|
||||||
rawBalancesDiff := bucket.Get(buf)
|
balancesDiff = bucket.Get(buf)
|
||||||
if len(rawBalancesDiff) == 0 {
|
if balancesDiff == nil {
|
||||||
return errors.New("balances diff not found")
|
return errors.New("balances diff not found")
|
||||||
}
|
}
|
||||||
balancesDiff = slices.Clone(rawBalancesDiff)
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -228,11 +224,10 @@ func (s *Store) getFullSnapshot(slot uint64) (state.BeaconState, error) {
|
|||||||
if bucket == nil {
|
if bucket == nil {
|
||||||
return bolt.ErrBucketNotFound
|
return bolt.ErrBucketNotFound
|
||||||
}
|
}
|
||||||
rawEnc := bucket.Get(key)
|
enc = bucket.Get(key)
|
||||||
if rawEnc == nil {
|
if enc == nil {
|
||||||
return errors.New("state not found")
|
return errors.New("state not found")
|
||||||
}
|
}
|
||||||
enc = slices.Clone(rawEnc)
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ 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"
|
||||||
@@ -48,11 +47,7 @@ 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 {
|
||||||
rawEnc := tx.Bucket(stateSummaryBucket).Get(blockRoot[:])
|
enc = 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
|
||||||
|
|||||||
@@ -134,10 +134,20 @@ type BeaconNode struct {
|
|||||||
|
|
||||||
// New creates a new node instance, sets up configuration options, and registers
|
// New creates a new node instance, sets up configuration options, and registers
|
||||||
// every required service to the node.
|
// every required service to the node.
|
||||||
func New(cliCtx *cli.Context, cancel context.CancelFunc, opts ...Option) (*BeaconNode, error) {
|
func New(cliCtx *cli.Context, cancel context.CancelFunc, optFuncs []func(*cli.Context) ([]Option, error), opts ...Option) (*BeaconNode, error) {
|
||||||
if err := configureBeacon(cliCtx); err != nil {
|
if err := configureBeacon(cliCtx); err != nil {
|
||||||
return nil, errors.Wrap(err, "could not set beacon configuration options")
|
return nil, errors.Wrap(err, "could not set beacon configuration options")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, of := range optFuncs {
|
||||||
|
ofo, err := of(cliCtx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if ofo != nil {
|
||||||
|
opts = append(opts, ofo...)
|
||||||
|
}
|
||||||
|
}
|
||||||
ctx := cliCtx.Context
|
ctx := cliCtx.Context
|
||||||
|
|
||||||
beacon := &BeaconNode{
|
beacon := &BeaconNode{
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ func TestNodeClose_OK(t *testing.T) {
|
|||||||
WithDataColumnStorage(filesystem.NewEphemeralDataColumnStorage(t)),
|
WithDataColumnStorage(filesystem.NewEphemeralDataColumnStorage(t)),
|
||||||
}
|
}
|
||||||
|
|
||||||
node, err := New(ctx, cancel, options...)
|
node, err := New(ctx, cancel, nil, options...)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
node.Close()
|
node.Close()
|
||||||
@@ -87,7 +87,7 @@ func TestNodeStart_Ok(t *testing.T) {
|
|||||||
WithDataColumnStorage(filesystem.NewEphemeralDataColumnStorage(t)),
|
WithDataColumnStorage(filesystem.NewEphemeralDataColumnStorage(t)),
|
||||||
}
|
}
|
||||||
|
|
||||||
node, err := New(ctx, cancel, options...)
|
node, err := New(ctx, cancel, nil, options...)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, node.lcStore)
|
require.NotNil(t, node.lcStore)
|
||||||
node.services = &runtime.ServiceRegistry{}
|
node.services = &runtime.ServiceRegistry{}
|
||||||
@@ -116,7 +116,7 @@ func TestNodeStart_SyncChecker(t *testing.T) {
|
|||||||
WithDataColumnStorage(filesystem.NewEphemeralDataColumnStorage(t)),
|
WithDataColumnStorage(filesystem.NewEphemeralDataColumnStorage(t)),
|
||||||
}
|
}
|
||||||
|
|
||||||
node, err := New(ctx, cancel, options...)
|
node, err := New(ctx, cancel, nil, options...)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
go func() {
|
go func() {
|
||||||
node.Start()
|
node.Start()
|
||||||
@@ -151,7 +151,7 @@ func TestClearDB(t *testing.T) {
|
|||||||
WithDataColumnStorage(filesystem.NewEphemeralDataColumnStorage(t)),
|
WithDataColumnStorage(filesystem.NewEphemeralDataColumnStorage(t)),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = New(context, cancel, options...)
|
_, err = New(context, cancel, nil, options...)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.LogsContain(t, hook, "Removing database")
|
require.LogsContain(t, hook, "Removing database")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
3
changelog/aarshkshah1992_set-beacon-node-options.md
Normal file
3
changelog/aarshkshah1992_set-beacon-node-options.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
### Added
|
||||||
|
|
||||||
|
- Set beacon node options after reading the config file.
|
||||||
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.
|
||||||
@@ -367,17 +367,8 @@ func startNode(ctx *cli.Context, cancel context.CancelFunc) error {
|
|||||||
backfill.BeaconNodeOptions,
|
backfill.BeaconNodeOptions,
|
||||||
das.BeaconNodeOptions,
|
das.BeaconNodeOptions,
|
||||||
}
|
}
|
||||||
for _, of := range optFuncs {
|
|
||||||
ofo, err := of(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if ofo != nil {
|
|
||||||
opts = append(opts, ofo...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
beacon, err := node.New(ctx, cancel, opts...)
|
beacon, err := node.New(ctx, cancel, optFuncs, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("unable to start beacon node: %w", err)
|
return fmt.Errorf("unable to start beacon node: %w", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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="d378428f">
|
||||||
|
MIN_BUILDER_WITHDRAWABILITY_DELAY: uint64 = 4096
|
||||||
|
</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,26 @@
|
|||||||
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="8028928b">
|
||||||
|
class DataColumnSidecar(Container):
|
||||||
|
index: ColumnIndex
|
||||||
|
column: List[Cell, MAX_BLOB_COMMITMENTS_PER_BLOCK]
|
||||||
|
kzg_commitments: List[KZGCommitment, MAX_BLOB_COMMITMENTS_PER_BLOCK]
|
||||||
|
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 +765,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 +776,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 +789,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 +801,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 +815,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 +913,38 @@
|
|||||||
excess_blob_gas: uint64
|
excess_blob_gas: uint64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
|
- name: ExecutionPayloadBid#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="ExecutionPayloadBid" fork="gloas" hash="aa71ba16">
|
||||||
|
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_root: Root
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: ExecutionPayloadEnvelope#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="ExecutionPayloadEnvelope" fork="gloas" hash="cd522f7f">
|
||||||
|
class ExecutionPayloadEnvelope(Container):
|
||||||
|
payload: ExecutionPayload
|
||||||
|
execution_requests: ExecutionRequests
|
||||||
|
builder_index: BuilderIndex
|
||||||
|
beacon_block_root: Root
|
||||||
|
slot: Slot
|
||||||
|
blob_kzg_commitments: List[KZGCommitment, MAX_BLOB_COMMITMENTS_PER_BLOCK]
|
||||||
|
state_root: Root
|
||||||
|
</spec>
|
||||||
|
|
||||||
- name: ExecutionPayloadHeader#bellatrix
|
- name: ExecutionPayloadHeader#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: proto/engine/v1/execution_engine.proto
|
- file: proto/engine/v1/execution_engine.proto
|
||||||
@@ -839,7 +1021,7 @@
|
|||||||
excess_blob_gas: uint64
|
excess_blob_gas: uint64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ExecutionRequests
|
- name: ExecutionRequests#electra
|
||||||
sources:
|
sources:
|
||||||
- file: proto/engine/v1/electra.proto
|
- file: proto/engine/v1/electra.proto
|
||||||
search: message ExecutionRequests {
|
search: message ExecutionRequests {
|
||||||
@@ -854,7 +1036,7 @@
|
|||||||
consolidations: List[ConsolidationRequest, MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD]
|
consolidations: List[ConsolidationRequest, MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD]
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: Fork
|
- name: Fork#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
||||||
search: message Fork {
|
search: message Fork {
|
||||||
@@ -866,7 +1048,16 @@
|
|||||||
epoch: Epoch
|
epoch: Epoch
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ForkData
|
- name: ForkChoiceNode#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="ForkChoiceNode" fork="gloas" hash="755a4b34">
|
||||||
|
class ForkChoiceNode(Container):
|
||||||
|
root: Root
|
||||||
|
payload_status: PayloadStatus # One of PAYLOAD_STATUS_* values
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: ForkData#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_state.proto
|
- file: proto/prysm/v1alpha1/beacon_state.proto
|
||||||
search: message ForkData {
|
search: message ForkData {
|
||||||
@@ -877,7 +1068,7 @@
|
|||||||
genesis_validators_root: Root
|
genesis_validators_root: Root
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: HistoricalBatch
|
- name: HistoricalBatch#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_state.proto
|
- file: proto/prysm/v1alpha1/beacon_state.proto
|
||||||
search: message HistoricalBatch {
|
search: message HistoricalBatch {
|
||||||
@@ -888,7 +1079,7 @@
|
|||||||
state_roots: Vector[Root, SLOTS_PER_HISTORICAL_ROOT]
|
state_roots: Vector[Root, SLOTS_PER_HISTORICAL_ROOT]
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: HistoricalSummary
|
- name: HistoricalSummary#capella
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
||||||
search: message HistoricalSummary {
|
search: message HistoricalSummary {
|
||||||
@@ -924,7 +1115,17 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: LightClientBootstrap
|
- name: IndexedPayloadAttestation#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="IndexedPayloadAttestation" fork="gloas" hash="fa4832c8">
|
||||||
|
class IndexedPayloadAttestation(Container):
|
||||||
|
attesting_indices: List[ValidatorIndex, PTC_SIZE]
|
||||||
|
data: PayloadAttestationData
|
||||||
|
signature: BLSSignature
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: LightClientBootstrap#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/light_client.proto
|
- file: proto/prysm/v1alpha1/light_client.proto
|
||||||
search: message LightClientBootstrapAltair {
|
search: message LightClientBootstrapAltair {
|
||||||
@@ -938,7 +1139,18 @@
|
|||||||
current_sync_committee_branch: CurrentSyncCommitteeBranch
|
current_sync_committee_branch: CurrentSyncCommitteeBranch
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: LightClientFinalityUpdate
|
- name: LightClientBootstrap#capella
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="LightClientBootstrap" fork="capella" hash="85f4f5fe">
|
||||||
|
class LightClientBootstrap(Container):
|
||||||
|
# [Modified in Capella]
|
||||||
|
header: LightClientHeader
|
||||||
|
current_sync_committee: SyncCommittee
|
||||||
|
current_sync_committee_branch: CurrentSyncCommitteeBranch
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: LightClientFinalityUpdate#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/light_client.proto
|
- file: proto/prysm/v1alpha1/light_client.proto
|
||||||
search: message LightClientFinalityUpdateAltair {
|
search: message LightClientFinalityUpdateAltair {
|
||||||
@@ -956,6 +1168,20 @@
|
|||||||
signature_slot: Slot
|
signature_slot: Slot
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
|
- name: LightClientFinalityUpdate#capella
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="LightClientFinalityUpdate" fork="capella" hash="9d2b55dd">
|
||||||
|
class LightClientFinalityUpdate(Container):
|
||||||
|
# [Modified in Capella]
|
||||||
|
attested_header: LightClientHeader
|
||||||
|
# [Modified in Capella]
|
||||||
|
finalized_header: LightClientHeader
|
||||||
|
finality_branch: FinalityBranch
|
||||||
|
sync_aggregate: SyncAggregate
|
||||||
|
signature_slot: Slot
|
||||||
|
</spec>
|
||||||
|
|
||||||
- name: LightClientHeader#altair
|
- name: LightClientHeader#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/light_client.proto
|
- file: proto/prysm/v1alpha1/light_client.proto
|
||||||
@@ -980,7 +1206,7 @@
|
|||||||
execution_branch: ExecutionBranch
|
execution_branch: ExecutionBranch
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: LightClientOptimisticUpdate
|
- name: LightClientOptimisticUpdate#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/light_client.proto
|
- file: proto/prysm/v1alpha1/light_client.proto
|
||||||
search: message LightClientOptimisticUpdateAltair {
|
search: message LightClientOptimisticUpdateAltair {
|
||||||
@@ -995,7 +1221,18 @@
|
|||||||
signature_slot: Slot
|
signature_slot: Slot
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: LightClientUpdate
|
- name: LightClientOptimisticUpdate#capella
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="LightClientOptimisticUpdate" fork="capella" hash="bdce7b1d">
|
||||||
|
class LightClientOptimisticUpdate(Container):
|
||||||
|
# [Modified in Capella]
|
||||||
|
attested_header: LightClientHeader
|
||||||
|
sync_aggregate: SyncAggregate
|
||||||
|
signature_slot: Slot
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: LightClientUpdate#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/light_client.proto
|
- file: proto/prysm/v1alpha1/light_client.proto
|
||||||
search: message LightClientUpdateAltair {
|
search: message LightClientUpdateAltair {
|
||||||
@@ -1016,7 +1253,65 @@
|
|||||||
signature_slot: Slot
|
signature_slot: Slot
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PendingAttestation
|
- name: LightClientUpdate#capella
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="LightClientUpdate" fork="capella" hash="8d215165">
|
||||||
|
class LightClientUpdate(Container):
|
||||||
|
# [Modified in Capella]
|
||||||
|
attested_header: LightClientHeader
|
||||||
|
next_sync_committee: SyncCommittee
|
||||||
|
next_sync_committee_branch: NextSyncCommitteeBranch
|
||||||
|
# [Modified in Capella]
|
||||||
|
finalized_header: LightClientHeader
|
||||||
|
finality_branch: FinalityBranch
|
||||||
|
sync_aggregate: SyncAggregate
|
||||||
|
signature_slot: Slot
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: MatrixEntry#fulu
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="MatrixEntry" fork="fulu" hash="0da9cc8e">
|
||||||
|
class MatrixEntry(Container):
|
||||||
|
cell: Cell
|
||||||
|
kzg_proof: KZGProof
|
||||||
|
column_index: ColumnIndex
|
||||||
|
row_index: RowIndex
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: PayloadAttestation#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="PayloadAttestation" fork="gloas" hash="c769473d">
|
||||||
|
class PayloadAttestation(Container):
|
||||||
|
aggregation_bits: Bitvector[PTC_SIZE]
|
||||||
|
data: PayloadAttestationData
|
||||||
|
signature: BLSSignature
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: PayloadAttestationData#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="PayloadAttestationData" fork="gloas" hash="9f1b7f92">
|
||||||
|
class PayloadAttestationData(Container):
|
||||||
|
beacon_block_root: Root
|
||||||
|
slot: Slot
|
||||||
|
payload_present: boolean
|
||||||
|
blob_data_available: boolean
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: PayloadAttestationMessage#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="PayloadAttestationMessage" fork="gloas" hash="3707678d">
|
||||||
|
class PayloadAttestationMessage(Container):
|
||||||
|
validator_index: ValidatorIndex
|
||||||
|
data: PayloadAttestationData
|
||||||
|
signature: BLSSignature
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: PendingAttestation#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_state.proto
|
- file: proto/prysm/v1alpha1/beacon_state.proto
|
||||||
search: message PendingAttestation {
|
search: message PendingAttestation {
|
||||||
@@ -1029,7 +1324,7 @@
|
|||||||
proposer_index: ValidatorIndex
|
proposer_index: ValidatorIndex
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PendingConsolidation
|
- name: PendingConsolidation#electra
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/eip_7251.proto
|
- file: proto/prysm/v1alpha1/eip_7251.proto
|
||||||
search: message PendingConsolidation {
|
search: message PendingConsolidation {
|
||||||
@@ -1040,7 +1335,7 @@
|
|||||||
target_index: ValidatorIndex
|
target_index: ValidatorIndex
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PendingDeposit
|
- name: PendingDeposit#electra
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/eip_7251.proto
|
- file: proto/prysm/v1alpha1/eip_7251.proto
|
||||||
search: message PendingDeposit {
|
search: message PendingDeposit {
|
||||||
@@ -1054,7 +1349,7 @@
|
|||||||
slot: Slot
|
slot: Slot
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PendingPartialWithdrawal
|
- name: PendingPartialWithdrawal#electra
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/eip_7251.proto
|
- file: proto/prysm/v1alpha1/eip_7251.proto
|
||||||
search: message PendingPartialWithdrawal {
|
search: message PendingPartialWithdrawal {
|
||||||
@@ -1066,7 +1361,7 @@
|
|||||||
withdrawable_epoch: Epoch
|
withdrawable_epoch: Epoch
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PowBlock
|
- name: PowBlock#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_state.proto
|
- file: proto/prysm/v1alpha1/beacon_state.proto
|
||||||
search: message PowBlock {
|
search: message PowBlock {
|
||||||
@@ -1078,7 +1373,18 @@
|
|||||||
total_difficulty: uint256
|
total_difficulty: uint256
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ProposerSlashing
|
- name: ProposerPreferences#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="ProposerPreferences" fork="gloas" hash="2a38b149">
|
||||||
|
class ProposerPreferences(Container):
|
||||||
|
proposal_slot: Slot
|
||||||
|
validator_index: ValidatorIndex
|
||||||
|
fee_recipient: ExecutionAddress
|
||||||
|
gas_limit: uint64
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: ProposerSlashing#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/eth/v1/beacon_block.proto
|
- file: proto/eth/v1/beacon_block.proto
|
||||||
search: message ProposerSlashing {
|
search: message ProposerSlashing {
|
||||||
@@ -1112,7 +1418,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SignedBLSToExecutionChange
|
- name: SignedBLSToExecutionChange#capella
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/withdrawals.proto
|
- file: proto/prysm/v1alpha1/withdrawals.proto
|
||||||
search: message SignedBLSToExecutionChange {
|
search: message SignedBLSToExecutionChange {
|
||||||
@@ -1123,7 +1429,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SignedBeaconBlock
|
- name: SignedBeaconBlock#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_block.proto
|
- file: proto/prysm/v1alpha1/beacon_block.proto
|
||||||
search: message SignedBeaconBlock {
|
search: message SignedBeaconBlock {
|
||||||
@@ -1134,7 +1440,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SignedBeaconBlockHeader
|
- name: SignedBeaconBlockHeader#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
||||||
search: message SignedBeaconBlockHeader {
|
search: message SignedBeaconBlockHeader {
|
||||||
@@ -1145,7 +1451,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SignedContributionAndProof
|
- name: SignedContributionAndProof#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/sync_committee.proto
|
- file: proto/prysm/v1alpha1/sync_committee.proto
|
||||||
search: message SignedContributionAndProof {
|
search: message SignedContributionAndProof {
|
||||||
@@ -1156,7 +1462,34 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SignedVoluntaryExit
|
- name: SignedExecutionPayloadBid#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="SignedExecutionPayloadBid" fork="gloas" hash="6b344341">
|
||||||
|
class SignedExecutionPayloadBid(Container):
|
||||||
|
message: ExecutionPayloadBid
|
||||||
|
signature: BLSSignature
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: SignedExecutionPayloadEnvelope#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="SignedExecutionPayloadEnvelope" fork="gloas" hash="ab8f3404">
|
||||||
|
class SignedExecutionPayloadEnvelope(Container):
|
||||||
|
message: ExecutionPayloadEnvelope
|
||||||
|
signature: BLSSignature
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: SignedProposerPreferences#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="SignedProposerPreferences" fork="gloas" hash="2142774c">
|
||||||
|
class SignedProposerPreferences(Container):
|
||||||
|
message: ProposerPreferences
|
||||||
|
signature: BLSSignature
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: SignedVoluntaryExit#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
||||||
search: message SignedVoluntaryExit {
|
search: message SignedVoluntaryExit {
|
||||||
@@ -1167,7 +1500,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SigningData
|
- name: SigningData#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_state.proto
|
- file: proto/prysm/v1alpha1/beacon_state.proto
|
||||||
search: message SigningData {
|
search: message SigningData {
|
||||||
@@ -1178,7 +1511,7 @@
|
|||||||
domain: Domain
|
domain: Domain
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SingleAttestation
|
- name: SingleAttestation#electra
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/attestation.proto
|
- file: proto/prysm/v1alpha1/attestation.proto
|
||||||
search: message SingleAttestation {
|
search: message SingleAttestation {
|
||||||
@@ -1191,7 +1524,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SyncAggregate
|
- name: SyncAggregate#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
||||||
search: message SyncAggregate {
|
search: message SyncAggregate {
|
||||||
@@ -1202,7 +1535,7 @@
|
|||||||
sync_committee_signature: BLSSignature
|
sync_committee_signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SyncAggregatorSelectionData
|
- name: SyncAggregatorSelectionData#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_state.proto
|
- file: proto/prysm/v1alpha1/beacon_state.proto
|
||||||
search: message SyncAggregatorSelectionData {
|
search: message SyncAggregatorSelectionData {
|
||||||
@@ -1213,7 +1546,7 @@
|
|||||||
subcommittee_index: uint64
|
subcommittee_index: uint64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SyncCommittee
|
- name: SyncCommittee#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
||||||
search: message SyncCommittee {
|
search: message SyncCommittee {
|
||||||
@@ -1224,7 +1557,7 @@
|
|||||||
aggregate_pubkey: BLSPubkey
|
aggregate_pubkey: BLSPubkey
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SyncCommitteeContribution
|
- name: SyncCommitteeContribution#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/sync_committee.proto
|
- file: proto/prysm/v1alpha1/sync_committee.proto
|
||||||
search: message SyncCommitteeContribution {
|
search: message SyncCommitteeContribution {
|
||||||
@@ -1238,7 +1571,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SyncCommitteeMessage
|
- name: SyncCommitteeMessage#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/sync_committee.proto
|
- file: proto/prysm/v1alpha1/sync_committee.proto
|
||||||
search: message SyncCommitteeMessage {
|
search: message SyncCommitteeMessage {
|
||||||
@@ -1251,7 +1584,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: Validator
|
- name: Validator#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
||||||
search: message Validator {
|
search: message Validator {
|
||||||
@@ -1268,7 +1601,7 @@
|
|||||||
withdrawable_epoch: Epoch
|
withdrawable_epoch: Epoch
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: VoluntaryExit
|
- name: VoluntaryExit#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/eth/v1/beacon_block.proto
|
- file: proto/eth/v1/beacon_block.proto
|
||||||
search: message VoluntaryExit {
|
search: message VoluntaryExit {
|
||||||
@@ -1279,7 +1612,7 @@
|
|||||||
validator_index: ValidatorIndex
|
validator_index: ValidatorIndex
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: Withdrawal
|
- name: Withdrawal#capella
|
||||||
sources:
|
sources:
|
||||||
- file: proto/engine/v1/execution_engine.proto
|
- file: proto/engine/v1/execution_engine.proto
|
||||||
search: message Withdrawal {
|
search: message Withdrawal {
|
||||||
@@ -1292,7 +1625,7 @@
|
|||||||
amount: Gwei
|
amount: Gwei
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: WithdrawalRequest
|
- name: WithdrawalRequest#electra
|
||||||
sources:
|
sources:
|
||||||
- file: proto/engine/v1/electra.proto
|
- file: proto/engine/v1/electra.proto
|
||||||
search: message WithdrawalRequest {
|
search: message WithdrawalRequest {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
- name: BlobParameters
|
- name: BlobParameters#fulu
|
||||||
sources: []
|
sources: []
|
||||||
spec: |
|
spec: |
|
||||||
<spec dataclass="BlobParameters" fork="fulu" hash="a4575aa8">
|
<spec dataclass="BlobParameters" fork="fulu" hash="a4575aa8">
|
||||||
@@ -54,6 +54,20 @@
|
|||||||
processed_sweep_withdrawals_count: uint64
|
processed_sweep_withdrawals_count: uint64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
|
- name: ExpectedWithdrawals#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec dataclass="ExpectedWithdrawals" fork="gloas" hash="b32cc9c9">
|
||||||
|
class ExpectedWithdrawals(object):
|
||||||
|
withdrawals: Sequence[Withdrawal]
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
processed_builder_withdrawals_count: uint64
|
||||||
|
processed_partial_withdrawals_count: uint64
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
processed_builders_sweep_count: uint64
|
||||||
|
processed_sweep_withdrawals_count: uint64
|
||||||
|
</spec>
|
||||||
|
|
||||||
- name: GetPayloadResponse#bellatrix
|
- name: GetPayloadResponse#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: consensus-types/blocks/get_payload.go
|
- file: consensus-types/blocks/get_payload.go
|
||||||
@@ -126,7 +140,7 @@
|
|||||||
execution_requests: Sequence[bytes]
|
execution_requests: Sequence[bytes]
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: LatestMessage
|
- name: LatestMessage#phase0
|
||||||
sources: []
|
sources: []
|
||||||
spec: |
|
spec: |
|
||||||
<spec dataclass="LatestMessage" fork="phase0" hash="44e832d0">
|
<spec dataclass="LatestMessage" fork="phase0" hash="44e832d0">
|
||||||
@@ -136,7 +150,18 @@
|
|||||||
root: Root
|
root: Root
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: LightClientStore
|
- name: LatestMessage#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec dataclass="LatestMessage" fork="gloas" hash="a0030894">
|
||||||
|
@dataclass(eq=True, frozen=True)
|
||||||
|
class LatestMessage(object):
|
||||||
|
slot: Slot
|
||||||
|
root: Root
|
||||||
|
payload_present: boolean
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: LightClientStore#altair
|
||||||
sources: []
|
sources: []
|
||||||
spec: |
|
spec: |
|
||||||
<spec dataclass="LightClientStore" fork="altair" hash="24725cec">
|
<spec dataclass="LightClientStore" fork="altair" hash="24725cec">
|
||||||
@@ -155,6 +180,23 @@
|
|||||||
current_max_active_participants: uint64
|
current_max_active_participants: uint64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
|
- name: LightClientStore#capella
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec dataclass="LightClientStore" fork="capella" hash="04b41062">
|
||||||
|
class LightClientStore(object):
|
||||||
|
# [Modified in Capella]
|
||||||
|
finalized_header: LightClientHeader
|
||||||
|
current_sync_committee: SyncCommittee
|
||||||
|
next_sync_committee: SyncCommittee
|
||||||
|
# [Modified in Capella]
|
||||||
|
best_valid_update: Optional[LightClientUpdate]
|
||||||
|
# [Modified in Capella]
|
||||||
|
optimistic_header: LightClientHeader
|
||||||
|
previous_max_active_participants: uint64
|
||||||
|
current_max_active_participants: uint64
|
||||||
|
</spec>
|
||||||
|
|
||||||
- name: NewPayloadRequest#bellatrix
|
- name: NewPayloadRequest#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: beacon-chain/execution/engine_client.go
|
- file: beacon-chain/execution/engine_client.go
|
||||||
@@ -191,7 +233,7 @@
|
|||||||
execution_requests: ExecutionRequests
|
execution_requests: ExecutionRequests
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: OptimisticStore
|
- name: OptimisticStore#bellatrix
|
||||||
sources: []
|
sources: []
|
||||||
spec: |
|
spec: |
|
||||||
<spec dataclass="OptimisticStore" fork="bellatrix" hash="a2b2182c">
|
<spec dataclass="OptimisticStore" fork="bellatrix" hash="a2b2182c">
|
||||||
@@ -246,7 +288,7 @@
|
|||||||
parent_beacon_block_root: Root
|
parent_beacon_block_root: Root
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: Store
|
- name: Store#phase0
|
||||||
sources: []
|
sources: []
|
||||||
spec: |
|
spec: |
|
||||||
<spec dataclass="Store" fork="phase0" hash="abe525d6">
|
<spec dataclass="Store" fork="phase0" hash="abe525d6">
|
||||||
@@ -266,3 +308,30 @@
|
|||||||
latest_messages: Dict[ValidatorIndex, LatestMessage] = field(default_factory=dict)
|
latest_messages: Dict[ValidatorIndex, LatestMessage] = field(default_factory=dict)
|
||||||
unrealized_justifications: Dict[Root, Checkpoint] = field(default_factory=dict)
|
unrealized_justifications: Dict[Root, Checkpoint] = field(default_factory=dict)
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
|
- name: Store#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec dataclass="Store" fork="gloas" hash="4dbfec46">
|
||||||
|
class Store(object):
|
||||||
|
time: uint64
|
||||||
|
genesis_time: uint64
|
||||||
|
justified_checkpoint: Checkpoint
|
||||||
|
finalized_checkpoint: Checkpoint
|
||||||
|
unrealized_justified_checkpoint: Checkpoint
|
||||||
|
unrealized_finalized_checkpoint: Checkpoint
|
||||||
|
proposer_boost_root: Root
|
||||||
|
equivocating_indices: Set[ValidatorIndex]
|
||||||
|
blocks: Dict[Root, BeaconBlock] = field(default_factory=dict)
|
||||||
|
block_states: Dict[Root, BeaconState] = field(default_factory=dict)
|
||||||
|
block_timeliness: Dict[Root, Vector[boolean, NUM_BLOCK_TIMELINESS_DEADLINES]] = field(
|
||||||
|
default_factory=dict
|
||||||
|
)
|
||||||
|
checkpoint_states: Dict[Checkpoint, BeaconState] = field(default_factory=dict)
|
||||||
|
latest_messages: Dict[ValidatorIndex, LatestMessage] = field(default_factory=dict)
|
||||||
|
unrealized_justifications: Dict[Root, Checkpoint] = field(default_factory=dict)
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
execution_payload_states: Dict[Root, BeaconState] = field(default_factory=dict)
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
ptc_vote: Dict[Root, Vector[boolean, PTC_SIZE]] = field(default_factory=dict)
|
||||||
|
</spec>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
- name: BASE_REWARD_FACTOR
|
- name: BASE_REWARD_FACTOR#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: BaseRewardFactor\s+.*yaml:"BASE_REWARD_FACTOR"
|
search: BaseRewardFactor\s+.*yaml:"BASE_REWARD_FACTOR"
|
||||||
@@ -8,7 +8,21 @@
|
|||||||
BASE_REWARD_FACTOR: uint64 = 64
|
BASE_REWARD_FACTOR: uint64 = 64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: BYTES_PER_LOGS_BLOOM
|
- name: BUILDER_PENDING_WITHDRAWALS_LIMIT#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec preset_var="BUILDER_PENDING_WITHDRAWALS_LIMIT" fork="gloas" hash="40b31377">
|
||||||
|
BUILDER_PENDING_WITHDRAWALS_LIMIT: uint64 = 1048576
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: BUILDER_REGISTRY_LIMIT#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec preset_var="BUILDER_REGISTRY_LIMIT" fork="gloas" hash="e951ff73">
|
||||||
|
BUILDER_REGISTRY_LIMIT: uint64 = 1099511627776
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: BYTES_PER_LOGS_BLOOM#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: BytesPerLogsBloom\s+.*yaml:"BYTES_PER_LOGS_BLOOM"
|
search: BytesPerLogsBloom\s+.*yaml:"BYTES_PER_LOGS_BLOOM"
|
||||||
@@ -18,7 +32,7 @@
|
|||||||
BYTES_PER_LOGS_BLOOM: uint64 = 256
|
BYTES_PER_LOGS_BLOOM: uint64 = 256
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: CELLS_PER_EXT_BLOB
|
- name: CELLS_PER_EXT_BLOB#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: beacon-chain/rpc/eth/config/handlers.go
|
- file: beacon-chain/rpc/eth/config/handlers.go
|
||||||
search: data\["CELLS_PER_EXT_BLOB"\]
|
search: data\["CELLS_PER_EXT_BLOB"\]
|
||||||
@@ -28,7 +42,7 @@
|
|||||||
CELLS_PER_EXT_BLOB = 128
|
CELLS_PER_EXT_BLOB = 128
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: EFFECTIVE_BALANCE_INCREMENT
|
- name: EFFECTIVE_BALANCE_INCREMENT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: EffectiveBalanceIncrement\s+.*yaml:"EFFECTIVE_BALANCE_INCREMENT"
|
search: EffectiveBalanceIncrement\s+.*yaml:"EFFECTIVE_BALANCE_INCREMENT"
|
||||||
@@ -38,7 +52,7 @@
|
|||||||
EFFECTIVE_BALANCE_INCREMENT: Gwei = 1000000000
|
EFFECTIVE_BALANCE_INCREMENT: Gwei = 1000000000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: EPOCHS_PER_ETH1_VOTING_PERIOD
|
- name: EPOCHS_PER_ETH1_VOTING_PERIOD#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: EpochsPerEth1VotingPeriod\s+.*yaml:"EPOCHS_PER_ETH1_VOTING_PERIOD"
|
search: EpochsPerEth1VotingPeriod\s+.*yaml:"EPOCHS_PER_ETH1_VOTING_PERIOD"
|
||||||
@@ -48,7 +62,7 @@
|
|||||||
EPOCHS_PER_ETH1_VOTING_PERIOD: uint64 = 64
|
EPOCHS_PER_ETH1_VOTING_PERIOD: uint64 = 64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: EPOCHS_PER_HISTORICAL_VECTOR
|
- name: EPOCHS_PER_HISTORICAL_VECTOR#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: RandaoMixesLength\s*=
|
search: RandaoMixesLength\s*=
|
||||||
@@ -58,7 +72,7 @@
|
|||||||
EPOCHS_PER_HISTORICAL_VECTOR: uint64 = 65536
|
EPOCHS_PER_HISTORICAL_VECTOR: uint64 = 65536
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: EPOCHS_PER_SLASHINGS_VECTOR
|
- name: EPOCHS_PER_SLASHINGS_VECTOR#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: SlashingsLength\s*=
|
search: SlashingsLength\s*=
|
||||||
@@ -68,7 +82,7 @@
|
|||||||
EPOCHS_PER_SLASHINGS_VECTOR: uint64 = 8192
|
EPOCHS_PER_SLASHINGS_VECTOR: uint64 = 8192
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: EPOCHS_PER_SYNC_COMMITTEE_PERIOD
|
- name: EPOCHS_PER_SYNC_COMMITTEE_PERIOD#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: EpochsPerSyncCommitteePeriod\s+.*yaml:"EPOCHS_PER_SYNC_COMMITTEE_PERIOD"
|
search: EpochsPerSyncCommitteePeriod\s+.*yaml:"EPOCHS_PER_SYNC_COMMITTEE_PERIOD"
|
||||||
@@ -78,7 +92,7 @@
|
|||||||
EPOCHS_PER_SYNC_COMMITTEE_PERIOD: uint64 = 256
|
EPOCHS_PER_SYNC_COMMITTEE_PERIOD: uint64 = 256
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: FIELD_ELEMENTS_PER_BLOB
|
- name: FIELD_ELEMENTS_PER_BLOB#deneb
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: FieldElementsPerBlob\s+.*yaml:"FIELD_ELEMENTS_PER_BLOB"
|
search: FieldElementsPerBlob\s+.*yaml:"FIELD_ELEMENTS_PER_BLOB"
|
||||||
@@ -88,7 +102,7 @@
|
|||||||
FIELD_ELEMENTS_PER_BLOB: uint64 = 4096
|
FIELD_ELEMENTS_PER_BLOB: uint64 = 4096
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: FIELD_ELEMENTS_PER_CELL
|
- name: FIELD_ELEMENTS_PER_CELL#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: CellsPerBlob\s*=
|
search: CellsPerBlob\s*=
|
||||||
@@ -98,7 +112,7 @@
|
|||||||
FIELD_ELEMENTS_PER_CELL: uint64 = 64
|
FIELD_ELEMENTS_PER_CELL: uint64 = 64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: FIELD_ELEMENTS_PER_EXT_BLOB
|
- name: FIELD_ELEMENTS_PER_EXT_BLOB#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: proto/ssz_proto_library.bzl
|
- file: proto/ssz_proto_library.bzl
|
||||||
search: mainnet\s*=\s*\{[^}]*"field_elements_per_ext_blob\.size".*[^}]*\}
|
search: mainnet\s*=\s*\{[^}]*"field_elements_per_ext_blob\.size".*[^}]*\}
|
||||||
@@ -108,7 +122,7 @@
|
|||||||
FIELD_ELEMENTS_PER_EXT_BLOB = 8192
|
FIELD_ELEMENTS_PER_EXT_BLOB = 8192
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: HISTORICAL_ROOTS_LIMIT
|
- name: HISTORICAL_ROOTS_LIMIT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: HistoricalRootsLength\s*=
|
search: HistoricalRootsLength\s*=
|
||||||
@@ -118,7 +132,7 @@
|
|||||||
HISTORICAL_ROOTS_LIMIT: uint64 = 16777216
|
HISTORICAL_ROOTS_LIMIT: uint64 = 16777216
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: HYSTERESIS_DOWNWARD_MULTIPLIER
|
- name: HYSTERESIS_DOWNWARD_MULTIPLIER#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: HysteresisDownwardMultiplier\s+.*yaml:"HYSTERESIS_DOWNWARD_MULTIPLIER"
|
search: HysteresisDownwardMultiplier\s+.*yaml:"HYSTERESIS_DOWNWARD_MULTIPLIER"
|
||||||
@@ -128,7 +142,7 @@
|
|||||||
HYSTERESIS_DOWNWARD_MULTIPLIER: uint64 = 1
|
HYSTERESIS_DOWNWARD_MULTIPLIER: uint64 = 1
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: HYSTERESIS_QUOTIENT
|
- name: HYSTERESIS_QUOTIENT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: HysteresisQuotient\s+.*yaml:"HYSTERESIS_QUOTIENT"
|
search: HysteresisQuotient\s+.*yaml:"HYSTERESIS_QUOTIENT"
|
||||||
@@ -138,7 +152,7 @@
|
|||||||
HYSTERESIS_QUOTIENT: uint64 = 4
|
HYSTERESIS_QUOTIENT: uint64 = 4
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: HYSTERESIS_UPWARD_MULTIPLIER
|
- name: HYSTERESIS_UPWARD_MULTIPLIER#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: HysteresisUpwardMultiplier\s+.*yaml:"HYSTERESIS_UPWARD_MULTIPLIER"
|
search: HysteresisUpwardMultiplier\s+.*yaml:"HYSTERESIS_UPWARD_MULTIPLIER"
|
||||||
@@ -148,7 +162,7 @@
|
|||||||
HYSTERESIS_UPWARD_MULTIPLIER: uint64 = 5
|
HYSTERESIS_UPWARD_MULTIPLIER: uint64 = 5
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: INACTIVITY_PENALTY_QUOTIENT
|
- name: INACTIVITY_PENALTY_QUOTIENT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: InactivityPenaltyQuotient\s+.*yaml:"INACTIVITY_PENALTY_QUOTIENT"
|
search: InactivityPenaltyQuotient\s+.*yaml:"INACTIVITY_PENALTY_QUOTIENT"
|
||||||
@@ -158,7 +172,7 @@
|
|||||||
INACTIVITY_PENALTY_QUOTIENT: uint64 = 67108864
|
INACTIVITY_PENALTY_QUOTIENT: uint64 = 67108864
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: INACTIVITY_PENALTY_QUOTIENT_ALTAIR
|
- name: INACTIVITY_PENALTY_QUOTIENT_ALTAIR#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: InactivityPenaltyQuotientAltair\s+.*yaml:"INACTIVITY_PENALTY_QUOTIENT_ALTAIR"
|
search: InactivityPenaltyQuotientAltair\s+.*yaml:"INACTIVITY_PENALTY_QUOTIENT_ALTAIR"
|
||||||
@@ -168,7 +182,7 @@
|
|||||||
INACTIVITY_PENALTY_QUOTIENT_ALTAIR: uint64 = 50331648
|
INACTIVITY_PENALTY_QUOTIENT_ALTAIR: uint64 = 50331648
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: INACTIVITY_PENALTY_QUOTIENT_BELLATRIX
|
- name: INACTIVITY_PENALTY_QUOTIENT_BELLATRIX#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: InactivityPenaltyQuotientBellatrix\s+.*yaml:"INACTIVITY_PENALTY_QUOTIENT_BELLATRIX"
|
search: InactivityPenaltyQuotientBellatrix\s+.*yaml:"INACTIVITY_PENALTY_QUOTIENT_BELLATRIX"
|
||||||
@@ -178,7 +192,7 @@
|
|||||||
INACTIVITY_PENALTY_QUOTIENT_BELLATRIX: uint64 = 16777216
|
INACTIVITY_PENALTY_QUOTIENT_BELLATRIX: uint64 = 16777216
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH
|
- name: KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: proto/ssz_proto_library.bzl
|
- file: proto/ssz_proto_library.bzl
|
||||||
search: mainnet\s*=\s*\{[^}]*"kzg_commitments_inclusion_proof_depth\.size":.*[^}]*\}
|
search: mainnet\s*=\s*\{[^}]*"kzg_commitments_inclusion_proof_depth\.size":.*[^}]*\}
|
||||||
@@ -188,7 +202,7 @@
|
|||||||
KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH: uint64 = 4
|
KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH: uint64 = 4
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: KZG_COMMITMENT_INCLUSION_PROOF_DEPTH
|
- name: KZG_COMMITMENT_INCLUSION_PROOF_DEPTH#deneb
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: KzgCommitmentInclusionProofDepth\s*=
|
search: KzgCommitmentInclusionProofDepth\s*=
|
||||||
@@ -198,7 +212,7 @@
|
|||||||
KZG_COMMITMENT_INCLUSION_PROOF_DEPTH: uint64 = 17
|
KZG_COMMITMENT_INCLUSION_PROOF_DEPTH: uint64 = 17
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_ATTESTATIONS
|
- name: MAX_ATTESTATIONS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxAttestations\s+.*yaml:"MAX_ATTESTATIONS"
|
search: MaxAttestations\s+.*yaml:"MAX_ATTESTATIONS"
|
||||||
@@ -208,7 +222,7 @@
|
|||||||
MAX_ATTESTATIONS = 128
|
MAX_ATTESTATIONS = 128
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_ATTESTATIONS_ELECTRA
|
- name: MAX_ATTESTATIONS_ELECTRA#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxAttestationsElectra\s+.*yaml:"MAX_ATTESTATIONS_ELECTRA"
|
search: MaxAttestationsElectra\s+.*yaml:"MAX_ATTESTATIONS_ELECTRA"
|
||||||
@@ -218,7 +232,7 @@
|
|||||||
MAX_ATTESTATIONS_ELECTRA = 8
|
MAX_ATTESTATIONS_ELECTRA = 8
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_ATTESTER_SLASHINGS
|
- name: MAX_ATTESTER_SLASHINGS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxAttesterSlashings\s+.*yaml:"MAX_ATTESTER_SLASHINGS"
|
search: MaxAttesterSlashings\s+.*yaml:"MAX_ATTESTER_SLASHINGS"
|
||||||
@@ -228,7 +242,7 @@
|
|||||||
MAX_ATTESTER_SLASHINGS = 2
|
MAX_ATTESTER_SLASHINGS = 2
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_ATTESTER_SLASHINGS_ELECTRA
|
- name: MAX_ATTESTER_SLASHINGS_ELECTRA#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxAttesterSlashingsElectra\s+.*yaml:"MAX_ATTESTER_SLASHINGS_ELECTRA"
|
search: MaxAttesterSlashingsElectra\s+.*yaml:"MAX_ATTESTER_SLASHINGS_ELECTRA"
|
||||||
@@ -238,7 +252,7 @@
|
|||||||
MAX_ATTESTER_SLASHINGS_ELECTRA = 1
|
MAX_ATTESTER_SLASHINGS_ELECTRA = 1
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_BLOB_COMMITMENTS_PER_BLOCK
|
- name: MAX_BLOB_COMMITMENTS_PER_BLOCK#deneb
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: MaxBlobCommitmentsPerBlock\s*=
|
search: MaxBlobCommitmentsPerBlock\s*=
|
||||||
@@ -248,7 +262,7 @@
|
|||||||
MAX_BLOB_COMMITMENTS_PER_BLOCK: uint64 = 4096
|
MAX_BLOB_COMMITMENTS_PER_BLOCK: uint64 = 4096
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_BLS_TO_EXECUTION_CHANGES
|
- name: MAX_BLS_TO_EXECUTION_CHANGES#capella
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxBlsToExecutionChanges\s+.*yaml:"MAX_BLS_TO_EXECUTION_CHANGES"
|
search: MaxBlsToExecutionChanges\s+.*yaml:"MAX_BLS_TO_EXECUTION_CHANGES"
|
||||||
@@ -258,7 +272,14 @@
|
|||||||
MAX_BLS_TO_EXECUTION_CHANGES = 16
|
MAX_BLS_TO_EXECUTION_CHANGES = 16
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_BYTES_PER_TRANSACTION
|
- name: MAX_BUILDERS_PER_WITHDRAWALS_SWEEP#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec preset_var="MAX_BUILDERS_PER_WITHDRAWALS_SWEEP" fork="gloas" hash="1556b314">
|
||||||
|
MAX_BUILDERS_PER_WITHDRAWALS_SWEEP = 16384
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: MAX_BYTES_PER_TRANSACTION#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxBytesPerTransaction\s+.*yaml:"MAX_BYTES_PER_TRANSACTION"
|
search: MaxBytesPerTransaction\s+.*yaml:"MAX_BYTES_PER_TRANSACTION"
|
||||||
@@ -288,7 +309,7 @@
|
|||||||
MAX_COMMITTEES_PER_SLOT: uint64 = 64
|
MAX_COMMITTEES_PER_SLOT: uint64 = 64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD
|
- name: MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxConsolidationsRequestsPerPayload\s+.*yaml:"MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD"
|
search: MaxConsolidationsRequestsPerPayload\s+.*yaml:"MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD"
|
||||||
@@ -298,7 +319,7 @@
|
|||||||
MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD: uint64 = 2
|
MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD: uint64 = 2
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_DEPOSITS
|
- name: MAX_DEPOSITS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxDeposits\s+.*yaml:"MAX_DEPOSITS"
|
search: MaxDeposits\s+.*yaml:"MAX_DEPOSITS"
|
||||||
@@ -308,7 +329,7 @@
|
|||||||
MAX_DEPOSITS = 16
|
MAX_DEPOSITS = 16
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_DEPOSIT_REQUESTS_PER_PAYLOAD
|
- name: MAX_DEPOSIT_REQUESTS_PER_PAYLOAD#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxDepositRequestsPerPayload\s+.*yaml:"MAX_DEPOSIT_REQUESTS_PER_PAYLOAD"
|
search: MaxDepositRequestsPerPayload\s+.*yaml:"MAX_DEPOSIT_REQUESTS_PER_PAYLOAD"
|
||||||
@@ -318,7 +339,7 @@
|
|||||||
MAX_DEPOSIT_REQUESTS_PER_PAYLOAD: uint64 = 8192
|
MAX_DEPOSIT_REQUESTS_PER_PAYLOAD: uint64 = 8192
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_EFFECTIVE_BALANCE
|
- name: MAX_EFFECTIVE_BALANCE#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxEffectiveBalance\s+.*yaml:"MAX_EFFECTIVE_BALANCE"
|
search: MaxEffectiveBalance\s+.*yaml:"MAX_EFFECTIVE_BALANCE"
|
||||||
@@ -328,7 +349,7 @@
|
|||||||
MAX_EFFECTIVE_BALANCE: Gwei = 32000000000
|
MAX_EFFECTIVE_BALANCE: Gwei = 32000000000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_EFFECTIVE_BALANCE_ELECTRA
|
- name: MAX_EFFECTIVE_BALANCE_ELECTRA#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxEffectiveBalanceElectra\s+.*yaml:"MAX_EFFECTIVE_BALANCE_ELECTRA"
|
search: MaxEffectiveBalanceElectra\s+.*yaml:"MAX_EFFECTIVE_BALANCE_ELECTRA"
|
||||||
@@ -338,7 +359,7 @@
|
|||||||
MAX_EFFECTIVE_BALANCE_ELECTRA: Gwei = 2048000000000
|
MAX_EFFECTIVE_BALANCE_ELECTRA: Gwei = 2048000000000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_EXTRA_DATA_BYTES
|
- name: MAX_EXTRA_DATA_BYTES#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxExtraDataBytes\s+.*yaml:"MAX_EXTRA_DATA_BYTES"
|
search: MaxExtraDataBytes\s+.*yaml:"MAX_EXTRA_DATA_BYTES"
|
||||||
@@ -348,7 +369,14 @@
|
|||||||
MAX_EXTRA_DATA_BYTES = 32
|
MAX_EXTRA_DATA_BYTES = 32
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_PENDING_DEPOSITS_PER_EPOCH
|
- name: MAX_PAYLOAD_ATTESTATIONS#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec preset_var="MAX_PAYLOAD_ATTESTATIONS" fork="gloas" hash="fc24e7ea">
|
||||||
|
MAX_PAYLOAD_ATTESTATIONS = 4
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: MAX_PENDING_DEPOSITS_PER_EPOCH#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxPendingDepositsPerEpoch\s+.*yaml:"MAX_PENDING_DEPOSITS_PER_EPOCH"
|
search: MaxPendingDepositsPerEpoch\s+.*yaml:"MAX_PENDING_DEPOSITS_PER_EPOCH"
|
||||||
@@ -358,7 +386,7 @@
|
|||||||
MAX_PENDING_DEPOSITS_PER_EPOCH: uint64 = 16
|
MAX_PENDING_DEPOSITS_PER_EPOCH: uint64 = 16
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP
|
- name: MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxPendingPartialsPerWithdrawalsSweep\s+.*yaml:"MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP"
|
search: MaxPendingPartialsPerWithdrawalsSweep\s+.*yaml:"MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP"
|
||||||
@@ -368,7 +396,7 @@
|
|||||||
MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP: uint64 = 8
|
MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP: uint64 = 8
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_PROPOSER_SLASHINGS
|
- name: MAX_PROPOSER_SLASHINGS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxProposerSlashings\s+.*yaml:"MAX_PROPOSER_SLASHINGS"
|
search: MaxProposerSlashings\s+.*yaml:"MAX_PROPOSER_SLASHINGS"
|
||||||
@@ -378,7 +406,7 @@
|
|||||||
MAX_PROPOSER_SLASHINGS = 16
|
MAX_PROPOSER_SLASHINGS = 16
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_SEED_LOOKAHEAD
|
- name: MAX_SEED_LOOKAHEAD#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxSeedLookahead\s+.*yaml:"MAX_SEED_LOOKAHEAD"
|
search: MaxSeedLookahead\s+.*yaml:"MAX_SEED_LOOKAHEAD"
|
||||||
@@ -388,7 +416,7 @@
|
|||||||
MAX_SEED_LOOKAHEAD: uint64 = 4
|
MAX_SEED_LOOKAHEAD: uint64 = 4
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_TRANSACTIONS_PER_PAYLOAD
|
- name: MAX_TRANSACTIONS_PER_PAYLOAD#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxTransactionsPerPayload\s+.*yaml:"MAX_TRANSACTIONS_PER_PAYLOAD"
|
search: MaxTransactionsPerPayload\s+.*yaml:"MAX_TRANSACTIONS_PER_PAYLOAD"
|
||||||
@@ -418,7 +446,7 @@
|
|||||||
MAX_VALIDATORS_PER_COMMITTEE: uint64 = 2048
|
MAX_VALIDATORS_PER_COMMITTEE: uint64 = 2048
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP
|
- name: MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP#capella
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxValidatorsPerWithdrawalsSweep\s+.*yaml:"MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP"
|
search: MaxValidatorsPerWithdrawalsSweep\s+.*yaml:"MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP"
|
||||||
@@ -428,7 +456,7 @@
|
|||||||
MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP = 16384
|
MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP = 16384
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_VOLUNTARY_EXITS
|
- name: MAX_VOLUNTARY_EXITS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxVoluntaryExits\s+.*yaml:"MAX_VOLUNTARY_EXITS"
|
search: MaxVoluntaryExits\s+.*yaml:"MAX_VOLUNTARY_EXITS"
|
||||||
@@ -438,7 +466,7 @@
|
|||||||
MAX_VOLUNTARY_EXITS = 16
|
MAX_VOLUNTARY_EXITS = 16
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_WITHDRAWALS_PER_PAYLOAD
|
- name: MAX_WITHDRAWALS_PER_PAYLOAD#capella
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: MaxWithdrawalsPerPayload\s*=
|
search: MaxWithdrawalsPerPayload\s*=
|
||||||
@@ -448,7 +476,7 @@
|
|||||||
MAX_WITHDRAWALS_PER_PAYLOAD: uint64 = 16
|
MAX_WITHDRAWALS_PER_PAYLOAD: uint64 = 16
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD
|
- name: MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxWithdrawalRequestsPerPayload\s+.*yaml:"MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD"
|
search: MaxWithdrawalRequestsPerPayload\s+.*yaml:"MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD"
|
||||||
@@ -458,7 +486,7 @@
|
|||||||
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD: uint64 = 16
|
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD: uint64 = 16
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_ACTIVATION_BALANCE
|
- name: MIN_ACTIVATION_BALANCE#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinActivationBalance\s+.*yaml:"MIN_ACTIVATION_BALANCE"
|
search: MinActivationBalance\s+.*yaml:"MIN_ACTIVATION_BALANCE"
|
||||||
@@ -468,7 +496,7 @@
|
|||||||
MIN_ACTIVATION_BALANCE: Gwei = 32000000000
|
MIN_ACTIVATION_BALANCE: Gwei = 32000000000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_ATTESTATION_INCLUSION_DELAY
|
- name: MIN_ATTESTATION_INCLUSION_DELAY#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinAttestationInclusionDelay\s+.*yaml:"MIN_ATTESTATION_INCLUSION_DELAY"
|
search: MinAttestationInclusionDelay\s+.*yaml:"MIN_ATTESTATION_INCLUSION_DELAY"
|
||||||
@@ -478,7 +506,7 @@
|
|||||||
MIN_ATTESTATION_INCLUSION_DELAY: uint64 = 1
|
MIN_ATTESTATION_INCLUSION_DELAY: uint64 = 1
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_DEPOSIT_AMOUNT
|
- name: MIN_DEPOSIT_AMOUNT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinDepositAmount\s+.*yaml:"MIN_DEPOSIT_AMOUNT"
|
search: MinDepositAmount\s+.*yaml:"MIN_DEPOSIT_AMOUNT"
|
||||||
@@ -488,7 +516,7 @@
|
|||||||
MIN_DEPOSIT_AMOUNT: Gwei = 1000000000
|
MIN_DEPOSIT_AMOUNT: Gwei = 1000000000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_EPOCHS_TO_INACTIVITY_PENALTY
|
- name: MIN_EPOCHS_TO_INACTIVITY_PENALTY#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinEpochsToInactivityPenalty\s+.*yaml:"MIN_EPOCHS_TO_INACTIVITY_PENALTY"
|
search: MinEpochsToInactivityPenalty\s+.*yaml:"MIN_EPOCHS_TO_INACTIVITY_PENALTY"
|
||||||
@@ -498,7 +526,7 @@
|
|||||||
MIN_EPOCHS_TO_INACTIVITY_PENALTY: uint64 = 4
|
MIN_EPOCHS_TO_INACTIVITY_PENALTY: uint64 = 4
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_SEED_LOOKAHEAD
|
- name: MIN_SEED_LOOKAHEAD#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinSeedLookahead\s+.*yaml:"MIN_SEED_LOOKAHEAD"
|
search: MinSeedLookahead\s+.*yaml:"MIN_SEED_LOOKAHEAD"
|
||||||
@@ -508,7 +536,7 @@
|
|||||||
MIN_SEED_LOOKAHEAD: uint64 = 1
|
MIN_SEED_LOOKAHEAD: uint64 = 1
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_SLASHING_PENALTY_QUOTIENT
|
- name: MIN_SLASHING_PENALTY_QUOTIENT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinSlashingPenaltyQuotient\s+.*yaml:"MIN_SLASHING_PENALTY_QUOTIENT"
|
search: MinSlashingPenaltyQuotient\s+.*yaml:"MIN_SLASHING_PENALTY_QUOTIENT"
|
||||||
@@ -518,7 +546,7 @@
|
|||||||
MIN_SLASHING_PENALTY_QUOTIENT: uint64 = 128
|
MIN_SLASHING_PENALTY_QUOTIENT: uint64 = 128
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR
|
- name: MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinSlashingPenaltyQuotientAltair\s+.*yaml:"MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR"
|
search: MinSlashingPenaltyQuotientAltair\s+.*yaml:"MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR"
|
||||||
@@ -528,7 +556,7 @@
|
|||||||
MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR: uint64 = 64
|
MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR: uint64 = 64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX
|
- name: MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinSlashingPenaltyQuotientBellatrix\s+.*yaml:"MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX"
|
search: MinSlashingPenaltyQuotientBellatrix\s+.*yaml:"MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX"
|
||||||
@@ -538,7 +566,7 @@
|
|||||||
MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX: uint64 = 32
|
MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX: uint64 = 32
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA
|
- name: MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinSlashingPenaltyQuotientElectra\s+.*yaml:"MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA"
|
search: MinSlashingPenaltyQuotientElectra\s+.*yaml:"MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA"
|
||||||
@@ -548,7 +576,7 @@
|
|||||||
MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA: uint64 = 4096
|
MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA: uint64 = 4096
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_SYNC_COMMITTEE_PARTICIPANTS
|
- name: MIN_SYNC_COMMITTEE_PARTICIPANTS#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinSyncCommitteeParticipants\s+.*yaml:"MIN_SYNC_COMMITTEE_PARTICIPANTS"
|
search: MinSyncCommitteeParticipants\s+.*yaml:"MIN_SYNC_COMMITTEE_PARTICIPANTS"
|
||||||
@@ -558,7 +586,7 @@
|
|||||||
MIN_SYNC_COMMITTEE_PARTICIPANTS = 1
|
MIN_SYNC_COMMITTEE_PARTICIPANTS = 1
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: NUMBER_OF_COLUMNS
|
- name: NUMBER_OF_COLUMNS#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: NumberOfColumns\s*=
|
search: NumberOfColumns\s*=
|
||||||
@@ -568,7 +596,7 @@
|
|||||||
NUMBER_OF_COLUMNS: uint64 = 128
|
NUMBER_OF_COLUMNS: uint64 = 128
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PENDING_CONSOLIDATIONS_LIMIT
|
- name: PENDING_CONSOLIDATIONS_LIMIT#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: PendingConsolidationsLimit\s*=
|
search: PendingConsolidationsLimit\s*=
|
||||||
@@ -578,7 +606,7 @@
|
|||||||
PENDING_CONSOLIDATIONS_LIMIT: uint64 = 262144
|
PENDING_CONSOLIDATIONS_LIMIT: uint64 = 262144
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PENDING_DEPOSITS_LIMIT
|
- name: PENDING_DEPOSITS_LIMIT#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: PendingDepositsLimit\s*=
|
search: PendingDepositsLimit\s*=
|
||||||
@@ -588,7 +616,7 @@
|
|||||||
PENDING_DEPOSITS_LIMIT: uint64 = 134217728
|
PENDING_DEPOSITS_LIMIT: uint64 = 134217728
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PENDING_PARTIAL_WITHDRAWALS_LIMIT
|
- name: PENDING_PARTIAL_WITHDRAWALS_LIMIT#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: PendingPartialWithdrawalsLimit\s*=
|
search: PendingPartialWithdrawalsLimit\s*=
|
||||||
@@ -598,7 +626,7 @@
|
|||||||
PENDING_PARTIAL_WITHDRAWALS_LIMIT: uint64 = 134217728
|
PENDING_PARTIAL_WITHDRAWALS_LIMIT: uint64 = 134217728
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PROPORTIONAL_SLASHING_MULTIPLIER
|
- name: PROPORTIONAL_SLASHING_MULTIPLIER#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ProportionalSlashingMultiplier\s+.*yaml:"PROPORTIONAL_SLASHING_MULTIPLIER"
|
search: ProportionalSlashingMultiplier\s+.*yaml:"PROPORTIONAL_SLASHING_MULTIPLIER"
|
||||||
@@ -608,7 +636,7 @@
|
|||||||
PROPORTIONAL_SLASHING_MULTIPLIER: uint64 = 1
|
PROPORTIONAL_SLASHING_MULTIPLIER: uint64 = 1
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR
|
- name: PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ProportionalSlashingMultiplierAltair\s+.*yaml:"PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR"
|
search: ProportionalSlashingMultiplierAltair\s+.*yaml:"PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR"
|
||||||
@@ -618,7 +646,7 @@
|
|||||||
PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR: uint64 = 2
|
PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR: uint64 = 2
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX
|
- name: PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ProportionalSlashingMultiplierBellatrix\s+.*yaml:"PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX"
|
search: ProportionalSlashingMultiplierBellatrix\s+.*yaml:"PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX"
|
||||||
@@ -628,7 +656,7 @@
|
|||||||
PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX: uint64 = 3
|
PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX: uint64 = 3
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PROPOSER_REWARD_QUOTIENT
|
- name: PROPOSER_REWARD_QUOTIENT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ProposerRewardQuotient\s+.*yaml:"PROPOSER_REWARD_QUOTIENT"
|
search: ProposerRewardQuotient\s+.*yaml:"PROPOSER_REWARD_QUOTIENT"
|
||||||
@@ -638,7 +666,14 @@
|
|||||||
PROPOSER_REWARD_QUOTIENT: uint64 = 8
|
PROPOSER_REWARD_QUOTIENT: uint64 = 8
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SHUFFLE_ROUND_COUNT
|
- name: PTC_SIZE#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec preset_var="PTC_SIZE" fork="gloas" hash="d61c5930">
|
||||||
|
PTC_SIZE: uint64 = 512
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: SHUFFLE_ROUND_COUNT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ShuffleRoundCount\s+.*yaml:"SHUFFLE_ROUND_COUNT"
|
search: ShuffleRoundCount\s+.*yaml:"SHUFFLE_ROUND_COUNT"
|
||||||
@@ -648,7 +683,7 @@
|
|||||||
SHUFFLE_ROUND_COUNT: uint64 = 90
|
SHUFFLE_ROUND_COUNT: uint64 = 90
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SLOTS_PER_EPOCH
|
- name: SLOTS_PER_EPOCH#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: SlotsPerEpoch\s*=
|
search: SlotsPerEpoch\s*=
|
||||||
@@ -658,7 +693,7 @@
|
|||||||
SLOTS_PER_EPOCH: uint64 = 32
|
SLOTS_PER_EPOCH: uint64 = 32
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SLOTS_PER_HISTORICAL_ROOT
|
- name: SLOTS_PER_HISTORICAL_ROOT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: BlockRootsLength\s*=
|
search: BlockRootsLength\s*=
|
||||||
@@ -668,7 +703,7 @@
|
|||||||
SLOTS_PER_HISTORICAL_ROOT: uint64 = 8192
|
SLOTS_PER_HISTORICAL_ROOT: uint64 = 8192
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SYNC_COMMITTEE_SIZE
|
- name: SYNC_COMMITTEE_SIZE#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: SyncCommitteeLength\s*=
|
search: SyncCommitteeLength\s*=
|
||||||
@@ -678,7 +713,7 @@
|
|||||||
SYNC_COMMITTEE_SIZE: uint64 = 512
|
SYNC_COMMITTEE_SIZE: uint64 = 512
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: TARGET_COMMITTEE_SIZE
|
- name: TARGET_COMMITTEE_SIZE#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: TargetCommitteeSize\s+.*yaml:"TARGET_COMMITTEE_SIZE"
|
search: TargetCommitteeSize\s+.*yaml:"TARGET_COMMITTEE_SIZE"
|
||||||
@@ -688,7 +723,7 @@
|
|||||||
TARGET_COMMITTEE_SIZE: uint64 = 128
|
TARGET_COMMITTEE_SIZE: uint64 = 128
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: UPDATE_TIMEOUT
|
- name: UPDATE_TIMEOUT#altair
|
||||||
sources:
|
sources:
|
||||||
- file: beacon-chain/rpc/eth/config/handlers.go
|
- file: beacon-chain/rpc/eth/config/handlers.go
|
||||||
search: data\["UPDATE_TIMEOUT"\]
|
search: data\["UPDATE_TIMEOUT"\]
|
||||||
@@ -698,7 +733,7 @@
|
|||||||
UPDATE_TIMEOUT = 8192
|
UPDATE_TIMEOUT = 8192
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: VALIDATOR_REGISTRY_LIMIT
|
- name: VALIDATOR_REGISTRY_LIMIT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: ValidatorRegistryLimit\s*=
|
search: ValidatorRegistryLimit\s*=
|
||||||
@@ -708,7 +743,7 @@
|
|||||||
VALIDATOR_REGISTRY_LIMIT: uint64 = 1099511627776
|
VALIDATOR_REGISTRY_LIMIT: uint64 = 1099511627776
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: WHISTLEBLOWER_REWARD_QUOTIENT
|
- name: WHISTLEBLOWER_REWARD_QUOTIENT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: WhistleBlowerRewardQuotient\s+.*yaml:"WHISTLEBLOWER_REWARD_QUOTIENT"
|
search: WhistleBlowerRewardQuotient\s+.*yaml:"WHISTLEBLOWER_REWARD_QUOTIENT"
|
||||||
@@ -718,7 +753,7 @@
|
|||||||
WHISTLEBLOWER_REWARD_QUOTIENT: uint64 = 512
|
WHISTLEBLOWER_REWARD_QUOTIENT: uint64 = 512
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA
|
- name: WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: WhistleBlowerRewardQuotientElectra\s+.*yaml:"WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA"
|
search: WhistleBlowerRewardQuotientElectra\s+.*yaml:"WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA"
|
||||||
|
|||||||
14
testing/validator-mock/validator_client_mock.go
generated
14
testing/validator-mock/validator_client_mock.go
generated
@@ -283,16 +283,18 @@ func (mr *MockValidatorClientMockRecorder) ProposeExit(ctx, in any) *gomock.Call
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProposeExit", reflect.TypeOf((*MockValidatorClient)(nil).ProposeExit), ctx, in)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProposeExit", reflect.TypeOf((*MockValidatorClient)(nil).ProposeExit), ctx, in)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SwitchHost mocks base method.
|
// EnsureReady mocks base method.
|
||||||
func (m *MockValidatorClient) SwitchHost(host string) {
|
func (m *MockValidatorClient) EnsureReady(ctx context.Context) bool {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
m.ctrl.Call(m, "SwitchHost", host)
|
ret := m.ctrl.Call(m, "EnsureReady", ctx)
|
||||||
|
ret0, _ := ret[0].(bool)
|
||||||
|
return ret0
|
||||||
}
|
}
|
||||||
|
|
||||||
// SwitchHost indicates an expected call of SwitchHost.
|
// EnsureReady indicates an expected call of EnsureReady.
|
||||||
func (mr *MockValidatorClientMockRecorder) SwitchHost(host any) *gomock.Call {
|
func (mr *MockValidatorClientMockRecorder) EnsureReady(ctx any) *gomock.Call {
|
||||||
mr.mock.ctrl.T.Helper()
|
mr.mock.ctrl.T.Helper()
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SwitchHost", reflect.TypeOf((*MockValidatorClient)(nil).SwitchHost), host)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureReady", reflect.TypeOf((*MockValidatorClient)(nil).EnsureReady), ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
// StartEventStream mocks base method.
|
// StartEventStream mocks base method.
|
||||||
|
|||||||
12
testing/validator-mock/validator_mock.go
generated
12
testing/validator-mock/validator_mock.go
generated
@@ -128,18 +128,18 @@ func (mr *MockValidatorMockRecorder) EventsChan() *gomock.Call {
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EventsChan", reflect.TypeOf((*MockValidator)(nil).EventsChan))
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EventsChan", reflect.TypeOf((*MockValidator)(nil).EventsChan))
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindHealthyHost mocks base method.
|
// EnsureReady mocks base method.
|
||||||
func (m *MockValidator) FindHealthyHost(arg0 context.Context) bool {
|
func (m *MockValidator) EnsureReady(arg0 context.Context) bool {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "FindHealthyHost", arg0)
|
ret := m.ctrl.Call(m, "EnsureReady", arg0)
|
||||||
ret0, _ := ret[0].(bool)
|
ret0, _ := ret[0].(bool)
|
||||||
return ret0
|
return ret0
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindHealthyHost indicates an expected call of FindHealthyHost.
|
// EnsureReady indicates an expected call of EnsureReady.
|
||||||
func (mr *MockValidatorMockRecorder) FindHealthyHost(arg0 any) *gomock.Call {
|
func (mr *MockValidatorMockRecorder) EnsureReady(arg0 any) *gomock.Call {
|
||||||
mr.mock.ctrl.T.Helper()
|
mr.mock.ctrl.T.Helper()
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindHealthyHost", reflect.TypeOf((*MockValidator)(nil).FindHealthyHost), arg0)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureReady", reflect.TypeOf((*MockValidator)(nil).EnsureReady), arg0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GenesisTime mocks base method.
|
// GenesisTime mocks base method.
|
||||||
|
|||||||
@@ -122,7 +122,6 @@ go_test(
|
|||||||
embed = [":go_default_library"],
|
embed = [":go_default_library"],
|
||||||
deps = [
|
deps = [
|
||||||
"//api/grpc:go_default_library",
|
"//api/grpc:go_default_library",
|
||||||
"//api/rest:go_default_library",
|
|
||||||
"//api/server/structs:go_default_library",
|
"//api/server/structs:go_default_library",
|
||||||
"//async/event:go_default_library",
|
"//async/event:go_default_library",
|
||||||
"//beacon-chain/core/signing:go_default_library",
|
"//beacon-chain/core/signing:go_default_library",
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ go_library(
|
|||||||
"//api:go_default_library",
|
"//api:go_default_library",
|
||||||
"//api/apiutil:go_default_library",
|
"//api/apiutil:go_default_library",
|
||||||
"//api/client/event:go_default_library",
|
"//api/client/event:go_default_library",
|
||||||
|
"//api/fallback:go_default_library",
|
||||||
"//api/rest:go_default_library",
|
"//api/rest:go_default_library",
|
||||||
"//api/server/structs:go_default_library",
|
"//api/server/structs:go_default_library",
|
||||||
"//beacon-chain/core/helpers:go_default_library",
|
"//beacon-chain/core/helpers:go_default_library",
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ func (c *beaconApiValidatorClient) attestationData(
|
|||||||
query := apiutil.BuildURL("/eth/v1/validator/attestation_data", params)
|
query := apiutil.BuildURL("/eth/v1/validator/attestation_data", params)
|
||||||
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
||||||
|
|
||||||
if err := c.jsonRestHandler.Get(ctx, query, &produceAttestationDataResponseJson); err != nil {
|
if err := c.handler.Get(ctx, query, &produceAttestationDataResponseJson); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,10 +28,10 @@ func TestGetAttestationData_ValidAttestation(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v1/validator/attestation_data?committee_index=%d&slot=%d", expectedCommitteeIndex, expectedSlot),
|
fmt.Sprintf("/eth/v1/validator/attestation_data?committee_index=%d&slot=%d", expectedCommitteeIndex, expectedSlot),
|
||||||
&produceAttestationDataResponseJson,
|
&produceAttestationDataResponseJson,
|
||||||
@@ -56,7 +56,7 @@ func TestGetAttestationData_ValidAttestation(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
resp, err := validatorClient.attestationData(ctx, primitives.Slot(expectedSlot), primitives.CommitteeIndex(expectedCommitteeIndex))
|
resp, err := validatorClient.attestationData(ctx, primitives.Slot(expectedSlot), primitives.CommitteeIndex(expectedCommitteeIndex))
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
@@ -180,8 +180,8 @@ func TestGetAttestationData_InvalidData(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/validator/attestation_data?committee_index=2&slot=1",
|
"/eth/v1/validator/attestation_data?committee_index=2&slot=1",
|
||||||
&produceAttestationDataResponseJson,
|
&produceAttestationDataResponseJson,
|
||||||
@@ -192,7 +192,7 @@ func TestGetAttestationData_InvalidData(t *testing.T) {
|
|||||||
testCase.generateData(),
|
testCase.generateData(),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.attestationData(ctx, 1, 2)
|
_, err := validatorClient.attestationData(ctx, 1, 2)
|
||||||
assert.ErrorContains(t, testCase.expectedErrorMessage, err)
|
assert.ErrorContains(t, testCase.expectedErrorMessage, err)
|
||||||
})
|
})
|
||||||
@@ -208,9 +208,9 @@ func TestGetAttestationData_JsonResponseError(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v1/validator/attestation_data?committee_index=%d&slot=%d", committeeIndex, slot),
|
fmt.Sprintf("/eth/v1/validator/attestation_data?committee_index=%d&slot=%d", committeeIndex, slot),
|
||||||
&produceAttestationDataResponseJson,
|
&produceAttestationDataResponseJson,
|
||||||
@@ -218,7 +218,7 @@ func TestGetAttestationData_JsonResponseError(t *testing.T) {
|
|||||||
errors.New("some specific json response error"),
|
errors.New("some specific json response error"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.attestationData(ctx, slot, committeeIndex)
|
_, err := validatorClient.attestationData(ctx, slot, committeeIndex)
|
||||||
assert.ErrorContains(t, "some specific json response error", err)
|
assert.ErrorContains(t, "some specific json response error", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,13 +18,13 @@ import (
|
|||||||
|
|
||||||
type beaconApiChainClient struct {
|
type beaconApiChainClient struct {
|
||||||
fallbackClient iface.ChainClient
|
fallbackClient iface.ChainClient
|
||||||
jsonRestHandler rest.RestHandler
|
handler rest.Handler
|
||||||
stateValidatorsProvider StateValidatorsProvider
|
stateValidatorsProvider StateValidatorsProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c beaconApiChainClient) headBlockHeaders(ctx context.Context) (*structs.GetBlockHeaderResponse, error) {
|
func (c beaconApiChainClient) headBlockHeaders(ctx context.Context) (*structs.GetBlockHeaderResponse, error) {
|
||||||
blockHeader := structs.GetBlockHeaderResponse{}
|
blockHeader := structs.GetBlockHeaderResponse{}
|
||||||
err := c.jsonRestHandler.Get(ctx, "/eth/v1/beacon/headers/head", &blockHeader)
|
err := c.handler.Get(ctx, "/eth/v1/beacon/headers/head", &blockHeader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -44,7 +44,7 @@ func (c beaconApiChainClient) ChainHead(ctx context.Context, _ *empty.Empty) (*e
|
|||||||
const endpoint = "/eth/v1/beacon/states/head/finality_checkpoints"
|
const endpoint = "/eth/v1/beacon/states/head/finality_checkpoints"
|
||||||
|
|
||||||
finalityCheckpoints := structs.GetFinalityCheckpointsResponse{}
|
finalityCheckpoints := structs.GetFinalityCheckpointsResponse{}
|
||||||
if err := c.jsonRestHandler.Get(ctx, endpoint, &finalityCheckpoints); err != nil {
|
if err := c.handler.Get(ctx, endpoint, &finalityCheckpoints); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,10 +328,10 @@ func (c beaconApiChainClient) ValidatorParticipation(ctx context.Context, in *et
|
|||||||
return nil, errors.New("beaconApiChainClient.ValidatorParticipation is not implemented. To use a fallback client, pass a fallback client as the last argument of NewBeaconApiChainClientWithFallback.")
|
return nil, errors.New("beaconApiChainClient.ValidatorParticipation is not implemented. To use a fallback client, pass a fallback client as the last argument of NewBeaconApiChainClientWithFallback.")
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewBeaconApiChainClientWithFallback(jsonRestHandler rest.RestHandler, fallbackClient iface.ChainClient) iface.ChainClient {
|
func NewBeaconApiChainClientWithFallback(handler rest.Handler, fallbackClient iface.ChainClient) iface.ChainClient {
|
||||||
return &beaconApiChainClient{
|
return &beaconApiChainClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
fallbackClient: fallbackClient,
|
fallbackClient: fallbackClient,
|
||||||
stateValidatorsProvider: beaconApiStateValidatorsProvider{jsonRestHandler: jsonRestHandler},
|
stateValidatorsProvider: beaconApiStateValidatorsProvider{handler: handler},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,12 +115,12 @@ func TestListValidators(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
)
|
)
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(gomock.Any(), blockHeaderEndpoint, gomock.Any()).Return(errors.New("bar error"))
|
handler.EXPECT().Get(gomock.Any(), blockHeaderEndpoint, gomock.Any()).Return(errors.New("bar error"))
|
||||||
|
|
||||||
beaconChainClient := beaconApiChainClient{
|
beaconChainClient := beaconApiChainClient{
|
||||||
stateValidatorsProvider: stateValidatorsProvider,
|
stateValidatorsProvider: stateValidatorsProvider,
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
_, err := beaconChainClient.Validators(ctx, ðpb.ListValidatorsRequest{
|
_, err := beaconChainClient.Validators(ctx, ðpb.ListValidatorsRequest{
|
||||||
QueryFilter: nil,
|
QueryFilter: nil,
|
||||||
@@ -188,8 +188,8 @@ func TestListValidators(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
)
|
)
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(gomock.Any(), blockHeaderEndpoint, gomock.Any()).Return(
|
handler.EXPECT().Get(gomock.Any(), blockHeaderEndpoint, gomock.Any()).Return(
|
||||||
nil,
|
nil,
|
||||||
).SetArg(
|
).SetArg(
|
||||||
2,
|
2,
|
||||||
@@ -198,7 +198,7 @@ func TestListValidators(t *testing.T) {
|
|||||||
|
|
||||||
beaconChainClient := beaconApiChainClient{
|
beaconChainClient := beaconApiChainClient{
|
||||||
stateValidatorsProvider: stateValidatorsProvider,
|
stateValidatorsProvider: stateValidatorsProvider,
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
_, err := beaconChainClient.Validators(ctx, ðpb.ListValidatorsRequest{
|
_, err := beaconChainClient.Validators(ctx, ðpb.ListValidatorsRequest{
|
||||||
QueryFilter: nil,
|
QueryFilter: nil,
|
||||||
@@ -740,15 +740,15 @@ func TestGetChainHead(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
finalityCheckpointsResponse := structs.GetFinalityCheckpointsResponse{}
|
finalityCheckpointsResponse := structs.GetFinalityCheckpointsResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(gomock.Any(), finalityCheckpointsEndpoint, &finalityCheckpointsResponse).Return(
|
handler.EXPECT().Get(gomock.Any(), finalityCheckpointsEndpoint, &finalityCheckpointsResponse).Return(
|
||||||
testCase.finalityCheckpointsError,
|
testCase.finalityCheckpointsError,
|
||||||
).SetArg(
|
).SetArg(
|
||||||
2,
|
2,
|
||||||
testCase.generateFinalityCheckpointsResponse(),
|
testCase.generateFinalityCheckpointsResponse(),
|
||||||
)
|
)
|
||||||
|
|
||||||
beaconChainClient := beaconApiChainClient{jsonRestHandler: jsonRestHandler}
|
beaconChainClient := beaconApiChainClient{handler: handler}
|
||||||
_, err := beaconChainClient.ChainHead(ctx, &emptypb.Empty{})
|
_, err := beaconChainClient.ChainHead(ctx, &emptypb.Empty{})
|
||||||
assert.ErrorContains(t, testCase.expectedError, err)
|
assert.ErrorContains(t, testCase.expectedError, err)
|
||||||
})
|
})
|
||||||
@@ -837,10 +837,10 @@ func TestGetChainHead(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
finalityCheckpointsResponse := structs.GetFinalityCheckpointsResponse{}
|
finalityCheckpointsResponse := structs.GetFinalityCheckpointsResponse{}
|
||||||
jsonRestHandler.EXPECT().Get(gomock.Any(), finalityCheckpointsEndpoint, &finalityCheckpointsResponse).Return(
|
handler.EXPECT().Get(gomock.Any(), finalityCheckpointsEndpoint, &finalityCheckpointsResponse).Return(
|
||||||
nil,
|
nil,
|
||||||
).SetArg(
|
).SetArg(
|
||||||
2,
|
2,
|
||||||
@@ -848,14 +848,14 @@ func TestGetChainHead(t *testing.T) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
headBlockHeadersResponse := structs.GetBlockHeaderResponse{}
|
headBlockHeadersResponse := structs.GetBlockHeaderResponse{}
|
||||||
jsonRestHandler.EXPECT().Get(gomock.Any(), headBlockHeadersEndpoint, &headBlockHeadersResponse).Return(
|
handler.EXPECT().Get(gomock.Any(), headBlockHeadersEndpoint, &headBlockHeadersResponse).Return(
|
||||||
testCase.headBlockHeadersError,
|
testCase.headBlockHeadersError,
|
||||||
).SetArg(
|
).SetArg(
|
||||||
2,
|
2,
|
||||||
testCase.generateHeadBlockHeadersResponse(),
|
testCase.generateHeadBlockHeadersResponse(),
|
||||||
)
|
)
|
||||||
|
|
||||||
beaconChainClient := beaconApiChainClient{jsonRestHandler: jsonRestHandler}
|
beaconChainClient := beaconApiChainClient{handler: handler}
|
||||||
_, err := beaconChainClient.ChainHead(ctx, &emptypb.Empty{})
|
_, err := beaconChainClient.ChainHead(ctx, &emptypb.Empty{})
|
||||||
assert.ErrorContains(t, testCase.expectedError, err)
|
assert.ErrorContains(t, testCase.expectedError, err)
|
||||||
})
|
})
|
||||||
@@ -867,10 +867,10 @@ func TestGetChainHead(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
finalityCheckpointsResponse := structs.GetFinalityCheckpointsResponse{}
|
finalityCheckpointsResponse := structs.GetFinalityCheckpointsResponse{}
|
||||||
jsonRestHandler.EXPECT().Get(gomock.Any(), finalityCheckpointsEndpoint, &finalityCheckpointsResponse).Return(
|
handler.EXPECT().Get(gomock.Any(), finalityCheckpointsEndpoint, &finalityCheckpointsResponse).Return(
|
||||||
nil,
|
nil,
|
||||||
).SetArg(
|
).SetArg(
|
||||||
2,
|
2,
|
||||||
@@ -878,7 +878,7 @@ func TestGetChainHead(t *testing.T) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
headBlockHeadersResponse := structs.GetBlockHeaderResponse{}
|
headBlockHeadersResponse := structs.GetBlockHeaderResponse{}
|
||||||
jsonRestHandler.EXPECT().Get(gomock.Any(), headBlockHeadersEndpoint, &headBlockHeadersResponse).Return(
|
handler.EXPECT().Get(gomock.Any(), headBlockHeadersEndpoint, &headBlockHeadersResponse).Return(
|
||||||
nil,
|
nil,
|
||||||
).SetArg(
|
).SetArg(
|
||||||
2,
|
2,
|
||||||
@@ -909,7 +909,7 @@ func TestGetChainHead(t *testing.T) {
|
|||||||
HeadEpoch: slots.ToEpoch(8),
|
HeadEpoch: slots.ToEpoch(8),
|
||||||
}
|
}
|
||||||
|
|
||||||
beaconChainClient := beaconApiChainClient{jsonRestHandler: jsonRestHandler}
|
beaconChainClient := beaconApiChainClient{handler: handler}
|
||||||
chainHead, err := beaconChainClient.ChainHead(ctx, &emptypb.Empty{})
|
chainHead, err := beaconChainClient.ChainHead(ctx, &emptypb.Empty{})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.DeepEqual(t, expectedChainHead, chainHead)
|
assert.DeepEqual(t, expectedChainHead, chainHead)
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ func (c *beaconApiValidatorClient) fork(ctx context.Context) (*structs.GetStateF
|
|||||||
|
|
||||||
stateForkResponseJson := &structs.GetStateForkResponse{}
|
stateForkResponseJson := &structs.GetStateForkResponse{}
|
||||||
|
|
||||||
if err := c.jsonRestHandler.Get(ctx, endpoint, stateForkResponseJson); err != nil {
|
if err := c.handler.Get(ctx, endpoint, stateForkResponseJson); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@ func (c *beaconApiValidatorClient) headers(ctx context.Context) (*structs.GetBlo
|
|||||||
|
|
||||||
blockHeadersResponseJson := &structs.GetBlockHeadersResponse{}
|
blockHeadersResponseJson := &structs.GetBlockHeadersResponse{}
|
||||||
|
|
||||||
if err := c.jsonRestHandler.Get(ctx, endpoint, blockHeadersResponseJson); err != nil {
|
if err := c.handler.Get(ctx, endpoint, blockHeadersResponseJson); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ func (c *beaconApiValidatorClient) liveness(ctx context.Context, epoch primitive
|
|||||||
return nil, errors.Wrapf(err, "failed to marshal validator indexes")
|
return nil, errors.Wrapf(err, "failed to marshal validator indexes")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = c.jsonRestHandler.Post(ctx, url, nil, bytes.NewBuffer(marshalledJsonValidatorIndexes), livenessResponseJson); err != nil {
|
if err = c.handler.Post(ctx, url, nil, bytes.NewBuffer(marshalledJsonValidatorIndexes), livenessResponseJson); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ func (c *beaconApiValidatorClient) syncing(ctx context.Context) (*structs.SyncSt
|
|||||||
|
|
||||||
syncingResponseJson := &structs.SyncStatusResponse{}
|
syncingResponseJson := &structs.SyncStatusResponse{}
|
||||||
|
|
||||||
if err := c.jsonRestHandler.Get(ctx, endpoint, syncingResponseJson); err != nil {
|
if err := c.handler.Get(ctx, endpoint, syncingResponseJson); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ func TestGetFork_Nominal(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
stateForkResponseJson := structs.GetStateForkResponse{}
|
stateForkResponseJson := structs.GetStateForkResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
expected := structs.GetStateForkResponse{
|
expected := structs.GetStateForkResponse{
|
||||||
Data: &structs.Fork{
|
Data: &structs.Fork{
|
||||||
@@ -32,7 +32,7 @@ func TestGetFork_Nominal(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
forkEndpoint,
|
forkEndpoint,
|
||||||
&stateForkResponseJson,
|
&stateForkResponseJson,
|
||||||
@@ -44,7 +44,7 @@ func TestGetFork_Nominal(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
|
|
||||||
fork, err := validatorClient.fork(ctx)
|
fork, err := validatorClient.fork(ctx)
|
||||||
@@ -56,11 +56,11 @@ func TestGetFork_Invalid(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
forkEndpoint,
|
forkEndpoint,
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -69,7 +69,7 @@ func TestGetFork_Invalid(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := validatorClient.fork(ctx)
|
_, err := validatorClient.fork(ctx)
|
||||||
@@ -83,7 +83,7 @@ func TestGetHeaders_Nominal(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
blockHeadersResponseJson := structs.GetBlockHeadersResponse{}
|
blockHeadersResponseJson := structs.GetBlockHeadersResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
expected := structs.GetBlockHeadersResponse{
|
expected := structs.GetBlockHeadersResponse{
|
||||||
Data: []*structs.SignedBeaconBlockHeaderContainer{
|
Data: []*structs.SignedBeaconBlockHeaderContainer{
|
||||||
@@ -99,7 +99,7 @@ func TestGetHeaders_Nominal(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
headersEndpoint,
|
headersEndpoint,
|
||||||
&blockHeadersResponseJson,
|
&blockHeadersResponseJson,
|
||||||
@@ -111,7 +111,7 @@ func TestGetHeaders_Nominal(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
|
|
||||||
headers, err := validatorClient.headers(ctx)
|
headers, err := validatorClient.headers(ctx)
|
||||||
@@ -123,11 +123,11 @@ func TestGetHeaders_Invalid(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
headersEndpoint,
|
headersEndpoint,
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -136,7 +136,7 @@ func TestGetHeaders_Invalid(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := validatorClient.headers(ctx)
|
_, err := validatorClient.headers(ctx)
|
||||||
@@ -170,8 +170,8 @@ func TestGetLiveness_Nominal(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
livenessEndpoint,
|
livenessEndpoint,
|
||||||
nil,
|
nil,
|
||||||
@@ -184,7 +184,7 @@ func TestGetLiveness_Nominal(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
liveness, err := validatorClient.liveness(ctx, 42, indexes)
|
liveness, err := validatorClient.liveness(ctx, 42, indexes)
|
||||||
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -197,8 +197,8 @@ func TestGetLiveness_Invalid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
livenessEndpoint,
|
livenessEndpoint,
|
||||||
nil,
|
nil,
|
||||||
@@ -208,7 +208,7 @@ func TestGetLiveness_Invalid(t *testing.T) {
|
|||||||
errors.New("custom error"),
|
errors.New("custom error"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.liveness(ctx, 42, nil)
|
_, err := validatorClient.liveness(ctx, 42, nil)
|
||||||
|
|
||||||
require.ErrorContains(t, "custom error", err)
|
require.ErrorContains(t, "custom error", err)
|
||||||
@@ -237,7 +237,7 @@ func TestGetIsSyncing_Nominal(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
syncingResponseJson := structs.SyncStatusResponse{}
|
syncingResponseJson := structs.SyncStatusResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
expected := structs.SyncStatusResponse{
|
expected := structs.SyncStatusResponse{
|
||||||
Data: &structs.SyncStatusResponseData{
|
Data: &structs.SyncStatusResponseData{
|
||||||
@@ -247,7 +247,7 @@ func TestGetIsSyncing_Nominal(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
syncingEndpoint,
|
syncingEndpoint,
|
||||||
&syncingResponseJson,
|
&syncingResponseJson,
|
||||||
@@ -259,7 +259,7 @@ func TestGetIsSyncing_Nominal(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
|
|
||||||
isSyncing, err := validatorClient.isSyncing(ctx)
|
isSyncing, err := validatorClient.isSyncing(ctx)
|
||||||
@@ -274,11 +274,11 @@ func TestGetIsSyncing_Invalid(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
syncingResponseJson := structs.SyncStatusResponse{}
|
syncingResponseJson := structs.SyncStatusResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
syncingEndpoint,
|
syncingEndpoint,
|
||||||
&syncingResponseJson,
|
&syncingResponseJson,
|
||||||
@@ -287,7 +287,7 @@ func TestGetIsSyncing_Invalid(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
|
|
||||||
isSyncing, err := validatorClient.isSyncing(ctx)
|
isSyncing, err := validatorClient.isSyncing(ctx)
|
||||||
|
|||||||
@@ -21,13 +21,13 @@ var (
|
|||||||
|
|
||||||
type beaconApiNodeClient struct {
|
type beaconApiNodeClient struct {
|
||||||
fallbackClient iface.NodeClient
|
fallbackClient iface.NodeClient
|
||||||
jsonRestHandler rest.RestHandler
|
handler rest.Handler
|
||||||
genesisProvider GenesisProvider
|
genesisProvider GenesisProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *beaconApiNodeClient) SyncStatus(ctx context.Context, _ *empty.Empty) (*ethpb.SyncStatus, error) {
|
func (c *beaconApiNodeClient) SyncStatus(ctx context.Context, _ *empty.Empty) (*ethpb.SyncStatus, error) {
|
||||||
syncingResponse := structs.SyncStatusResponse{}
|
syncingResponse := structs.SyncStatusResponse{}
|
||||||
if err := c.jsonRestHandler.Get(ctx, "/eth/v1/node/syncing", &syncingResponse); err != nil {
|
if err := c.handler.Get(ctx, "/eth/v1/node/syncing", &syncingResponse); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,7 +57,7 @@ func (c *beaconApiNodeClient) Genesis(ctx context.Context, _ *empty.Empty) (*eth
|
|||||||
}
|
}
|
||||||
|
|
||||||
depositContractJson := structs.GetDepositContractResponse{}
|
depositContractJson := structs.GetDepositContractResponse{}
|
||||||
if err = c.jsonRestHandler.Get(ctx, "/eth/v1/config/deposit_contract", &depositContractJson); err != nil {
|
if err = c.handler.Get(ctx, "/eth/v1/config/deposit_contract", &depositContractJson); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ func (c *beaconApiNodeClient) Genesis(ctx context.Context, _ *empty.Empty) (*eth
|
|||||||
|
|
||||||
func (c *beaconApiNodeClient) Version(ctx context.Context, _ *empty.Empty) (*ethpb.Version, error) {
|
func (c *beaconApiNodeClient) Version(ctx context.Context, _ *empty.Empty) (*ethpb.Version, error) {
|
||||||
var versionResponse structs.GetVersionResponse
|
var versionResponse structs.GetVersionResponse
|
||||||
if err := c.jsonRestHandler.Get(ctx, "/eth/v1/node/version", &versionResponse); err != nil {
|
if err := c.handler.Get(ctx, "/eth/v1/node/version", &versionResponse); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,9 +106,9 @@ func (c *beaconApiNodeClient) Peers(ctx context.Context, in *empty.Empty) (*ethp
|
|||||||
// IsReady returns true only if the node is fully synced (200 OK).
|
// IsReady returns true only if the node is fully synced (200 OK).
|
||||||
// A 206 Partial Content response indicates the node is syncing and not ready.
|
// A 206 Partial Content response indicates the node is syncing and not ready.
|
||||||
func (c *beaconApiNodeClient) IsReady(ctx context.Context) bool {
|
func (c *beaconApiNodeClient) IsReady(ctx context.Context) bool {
|
||||||
statusCode, err := c.jsonRestHandler.GetStatusCode(ctx, "/eth/v1/node/health")
|
statusCode, err := c.handler.GetStatusCode(ctx, "/eth/v1/node/health")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.WithError(err).Error("failed to get health of node")
|
log.WithError(err).WithField("url", c.handler.Host()).Error("failed to get health of node")
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
// Only 200 OK means the node is fully synced and ready.
|
// Only 200 OK means the node is fully synced and ready.
|
||||||
@@ -116,11 +116,11 @@ func (c *beaconApiNodeClient) IsReady(ctx context.Context) bool {
|
|||||||
return statusCode == http.StatusOK
|
return statusCode == http.StatusOK
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNodeClientWithFallback(jsonRestHandler rest.RestHandler, fallbackClient iface.NodeClient) iface.NodeClient {
|
func NewNodeClientWithFallback(handler rest.Handler, fallbackClient iface.NodeClient) iface.NodeClient {
|
||||||
b := &beaconApiNodeClient{
|
b := &beaconApiNodeClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
fallbackClient: fallbackClient,
|
fallbackClient: fallbackClient,
|
||||||
genesisProvider: &beaconApiGenesisProvider{jsonRestHandler: jsonRestHandler},
|
genesisProvider: &beaconApiGenesisProvider{handler: handler},
|
||||||
}
|
}
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,10 +120,10 @@ func TestGetGenesis(t *testing.T) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
depositContractJson := structs.GetDepositContractResponse{}
|
depositContractJson := structs.GetDepositContractResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
if testCase.queriesDepositContract {
|
if testCase.queriesDepositContract {
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/config/deposit_contract",
|
"/eth/v1/config/deposit_contract",
|
||||||
&depositContractJson,
|
&depositContractJson,
|
||||||
@@ -137,7 +137,7 @@ func TestGetGenesis(t *testing.T) {
|
|||||||
|
|
||||||
nodeClient := &beaconApiNodeClient{
|
nodeClient := &beaconApiNodeClient{
|
||||||
genesisProvider: genesisProvider,
|
genesisProvider: genesisProvider,
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
response, err := nodeClient.Genesis(ctx, &emptypb.Empty{})
|
response, err := nodeClient.Genesis(ctx, &emptypb.Empty{})
|
||||||
|
|
||||||
@@ -201,8 +201,8 @@ func TestGetSyncStatus(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
syncingResponse := structs.SyncStatusResponse{}
|
syncingResponse := structs.SyncStatusResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
syncingEndpoint,
|
syncingEndpoint,
|
||||||
&syncingResponse,
|
&syncingResponse,
|
||||||
@@ -213,7 +213,7 @@ func TestGetSyncStatus(t *testing.T) {
|
|||||||
testCase.restEndpointResponse,
|
testCase.restEndpointResponse,
|
||||||
)
|
)
|
||||||
|
|
||||||
nodeClient := &beaconApiNodeClient{jsonRestHandler: jsonRestHandler}
|
nodeClient := &beaconApiNodeClient{handler: handler}
|
||||||
syncStatus, err := nodeClient.SyncStatus(ctx, &emptypb.Empty{})
|
syncStatus, err := nodeClient.SyncStatus(ctx, &emptypb.Empty{})
|
||||||
|
|
||||||
if testCase.expectedResponse == nil {
|
if testCase.expectedResponse == nil {
|
||||||
@@ -265,8 +265,8 @@ func TestGetVersion(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
var versionResponse structs.GetVersionResponse
|
var versionResponse structs.GetVersionResponse
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
versionEndpoint,
|
versionEndpoint,
|
||||||
&versionResponse,
|
&versionResponse,
|
||||||
@@ -277,7 +277,7 @@ func TestGetVersion(t *testing.T) {
|
|||||||
testCase.restEndpointResponse,
|
testCase.restEndpointResponse,
|
||||||
)
|
)
|
||||||
|
|
||||||
nodeClient := &beaconApiNodeClient{jsonRestHandler: jsonRestHandler}
|
nodeClient := &beaconApiNodeClient{handler: handler}
|
||||||
version, err := nodeClient.Version(ctx, &emptypb.Empty{})
|
version, err := nodeClient.Version(ctx, &emptypb.Empty{})
|
||||||
|
|
||||||
if testCase.expectedResponse == nil {
|
if testCase.expectedResponse == nil {
|
||||||
@@ -331,13 +331,14 @@ func TestIsReady(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetStatusCode(
|
handler.EXPECT().GetStatusCode(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
healthEndpoint,
|
healthEndpoint,
|
||||||
).Return(tc.statusCode, tc.err)
|
).Return(tc.statusCode, tc.err)
|
||||||
|
handler.EXPECT().Host().Return("http://localhost:3500").AnyTimes()
|
||||||
|
|
||||||
nodeClient := &beaconApiNodeClient{jsonRestHandler: jsonRestHandler}
|
nodeClient := &beaconApiNodeClient{handler: handler}
|
||||||
result := nodeClient.IsReady(ctx)
|
result := nodeClient.IsReady(ctx)
|
||||||
|
|
||||||
assert.Equal(t, tc.expectedResult, result)
|
assert.Equal(t, tc.expectedResult, result)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/OffchainLabs/prysm/v7/api/client/event"
|
"github.com/OffchainLabs/prysm/v7/api/client/event"
|
||||||
|
"github.com/OffchainLabs/prysm/v7/api/fallback"
|
||||||
"github.com/OffchainLabs/prysm/v7/api/rest"
|
"github.com/OffchainLabs/prysm/v7/api/rest"
|
||||||
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
||||||
"github.com/OffchainLabs/prysm/v7/encoding/bytesutil"
|
"github.com/OffchainLabs/prysm/v7/encoding/bytesutil"
|
||||||
@@ -23,22 +24,28 @@ type beaconApiValidatorClient struct {
|
|||||||
genesisProvider GenesisProvider
|
genesisProvider GenesisProvider
|
||||||
dutiesProvider dutiesProvider
|
dutiesProvider dutiesProvider
|
||||||
stateValidatorsProvider StateValidatorsProvider
|
stateValidatorsProvider StateValidatorsProvider
|
||||||
jsonRestHandler rest.RestHandler
|
restProvider rest.RestConnectionProvider
|
||||||
|
handler rest.Handler
|
||||||
|
nodeClient *beaconApiNodeClient
|
||||||
beaconBlockConverter BeaconBlockConverter
|
beaconBlockConverter BeaconBlockConverter
|
||||||
prysmChainClient iface.PrysmChainClient
|
prysmChainClient iface.PrysmChainClient
|
||||||
isEventStreamRunning bool
|
isEventStreamRunning bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewBeaconApiValidatorClient(jsonRestHandler rest.RestHandler, opts ...ValidatorClientOpt) iface.ValidatorClient {
|
func NewBeaconApiValidatorClient(provider rest.RestConnectionProvider, opts ...ValidatorClientOpt) iface.ValidatorClient {
|
||||||
|
handler := provider.Handler()
|
||||||
|
nc := &beaconApiNodeClient{handler: handler}
|
||||||
c := &beaconApiValidatorClient{
|
c := &beaconApiValidatorClient{
|
||||||
genesisProvider: &beaconApiGenesisProvider{jsonRestHandler: jsonRestHandler},
|
genesisProvider: &beaconApiGenesisProvider{handler: handler},
|
||||||
dutiesProvider: beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler},
|
dutiesProvider: beaconApiDutiesProvider{handler: handler},
|
||||||
stateValidatorsProvider: beaconApiStateValidatorsProvider{jsonRestHandler: jsonRestHandler},
|
stateValidatorsProvider: beaconApiStateValidatorsProvider{handler: handler},
|
||||||
jsonRestHandler: jsonRestHandler,
|
restProvider: provider,
|
||||||
|
handler: handler,
|
||||||
|
nodeClient: nc,
|
||||||
beaconBlockConverter: beaconApiBeaconBlockConverter{},
|
beaconBlockConverter: beaconApiBeaconBlockConverter{},
|
||||||
prysmChainClient: prysmChainClient{
|
prysmChainClient: prysmChainClient{
|
||||||
nodeClient: &beaconApiNodeClient{jsonRestHandler: jsonRestHandler},
|
nodeClient: nc,
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
isEventStreamRunning: false,
|
isEventStreamRunning: false,
|
||||||
}
|
}
|
||||||
@@ -280,8 +287,8 @@ func (c *beaconApiValidatorClient) WaitForChainStart(ctx context.Context, _ *emp
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *beaconApiValidatorClient) StartEventStream(ctx context.Context, topics []string, eventsChannel chan<- *event.Event) {
|
func (c *beaconApiValidatorClient) StartEventStream(ctx context.Context, topics []string, eventsChannel chan<- *event.Event) {
|
||||||
client := &http.Client{} // event stream should not be subject to the same settings as other api calls, so we won't use c.jsonRestHandler.HttpClient()
|
client := &http.Client{} // event stream should not be subject to the same settings as other api calls
|
||||||
eventStream, err := event.NewEventStream(ctx, client, c.jsonRestHandler.Host(), topics)
|
eventStream, err := event.NewEventStream(ctx, client, c.handler.Host(), topics)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
eventsChannel <- &event.Event{
|
eventsChannel <- &event.Event{
|
||||||
EventType: event.EventError,
|
EventType: event.EventError,
|
||||||
@@ -329,9 +336,9 @@ func wrapInMetrics[Resp any](action string, f func() (Resp, error)) (Resp, error
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *beaconApiValidatorClient) Host() string {
|
func (c *beaconApiValidatorClient) Host() string {
|
||||||
return c.jsonRestHandler.Host()
|
return c.handler.Host()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *beaconApiValidatorClient) SwitchHost(host string) {
|
func (c *beaconApiValidatorClient) EnsureReady(ctx context.Context) bool {
|
||||||
c.jsonRestHandler.SwitchHost(host)
|
return fallback.EnsureReady(ctx, c.restProvider, c.nodeClient)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,9 +31,9 @@ func TestBeaconApiValidatorClient_GetAttestationDataValid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v1/validator/attestation_data?committee_index=%d&slot=%d", committeeIndex, slot),
|
fmt.Sprintf("/eth/v1/validator/attestation_data?committee_index=%d&slot=%d", committeeIndex, slot),
|
||||||
&produceAttestationDataResponseJson,
|
&produceAttestationDataResponseJson,
|
||||||
@@ -44,7 +44,7 @@ func TestBeaconApiValidatorClient_GetAttestationDataValid(t *testing.T) {
|
|||||||
generateValidAttestation(uint64(slot), uint64(committeeIndex)),
|
generateValidAttestation(uint64(slot), uint64(committeeIndex)),
|
||||||
).Times(2)
|
).Times(2)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := beaconApiValidatorClient{handler: handler}
|
||||||
expectedResp, expectedErr := validatorClient.attestationData(ctx, slot, committeeIndex)
|
expectedResp, expectedErr := validatorClient.attestationData(ctx, slot, committeeIndex)
|
||||||
|
|
||||||
resp, err := validatorClient.AttestationData(
|
resp, err := validatorClient.AttestationData(
|
||||||
@@ -65,9 +65,9 @@ func TestBeaconApiValidatorClient_GetAttestationDataError(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v1/validator/attestation_data?committee_index=%d&slot=%d", committeeIndex, slot),
|
fmt.Sprintf("/eth/v1/validator/attestation_data?committee_index=%d&slot=%d", committeeIndex, slot),
|
||||||
&produceAttestationDataResponseJson,
|
&produceAttestationDataResponseJson,
|
||||||
@@ -78,7 +78,7 @@ func TestBeaconApiValidatorClient_GetAttestationDataError(t *testing.T) {
|
|||||||
generateValidAttestation(uint64(slot), uint64(committeeIndex)),
|
generateValidAttestation(uint64(slot), uint64(committeeIndex)),
|
||||||
).Times(2)
|
).Times(2)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := beaconApiValidatorClient{handler: handler}
|
||||||
expectedResp, expectedErr := validatorClient.attestationData(ctx, slot, committeeIndex)
|
expectedResp, expectedErr := validatorClient.attestationData(ctx, slot, committeeIndex)
|
||||||
|
|
||||||
resp, err := validatorClient.AttestationData(
|
resp, err := validatorClient.AttestationData(
|
||||||
@@ -139,8 +139,8 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockValid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks",
|
"/eth/v2/beacon/blocks",
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -149,7 +149,7 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockValid(t *testing.T) {
|
|||||||
nil, nil, nil,
|
nil, nil, nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := beaconApiValidatorClient{handler: handler}
|
||||||
expectedResp, expectedErr := validatorClient.proposeBeaconBlock(
|
expectedResp, expectedErr := validatorClient.proposeBeaconBlock(
|
||||||
ctx,
|
ctx,
|
||||||
ðpb.GenericSignedBeaconBlock{
|
ðpb.GenericSignedBeaconBlock{
|
||||||
@@ -166,8 +166,8 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockError_ThenPass(t *testing.T)
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks",
|
"/eth/v2/beacon/blocks",
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -179,7 +179,7 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockError_ThenPass(t *testing.T)
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks",
|
"/eth/v2/beacon/blocks",
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -189,7 +189,7 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockError_ThenPass(t *testing.T)
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := beaconApiValidatorClient{handler: handler}
|
||||||
expectedResp, expectedErr := validatorClient.proposeBeaconBlock(
|
expectedResp, expectedErr := validatorClient.proposeBeaconBlock(
|
||||||
ctx,
|
ctx,
|
||||||
ðpb.GenericSignedBeaconBlock{
|
ðpb.GenericSignedBeaconBlock{
|
||||||
@@ -308,10 +308,10 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockAllTypes(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
if !tt.wantErr {
|
if !tt.wantErr {
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
tt.expectedPath,
|
tt.expectedPath,
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -319,7 +319,7 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockAllTypes(t *testing.T) {
|
|||||||
).Return(nil, nil, nil).Times(1)
|
).Return(nil, nil, nil).Times(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := beaconApiValidatorClient{handler: handler}
|
||||||
resp, err := validatorClient.proposeBeaconBlock(ctx, tt.block)
|
resp, err := validatorClient.proposeBeaconBlock(ctx, tt.block)
|
||||||
|
|
||||||
if tt.wantErr {
|
if tt.wantErr {
|
||||||
@@ -366,9 +366,9 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockHTTPErrors(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks",
|
"/eth/v2/beacon/blocks",
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -377,7 +377,7 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockHTTPErrors(t *testing.T) {
|
|||||||
|
|
||||||
if tt.expectJSON {
|
if tt.expectJSON {
|
||||||
// When SSZ fails, it falls back to JSON
|
// When SSZ fails, it falls back to JSON
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks",
|
"/eth/v2/beacon/blocks",
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -386,7 +386,7 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockHTTPErrors(t *testing.T) {
|
|||||||
).Return(tt.sszError).Times(1)
|
).Return(tt.sszError).Times(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.proposeBeaconBlock(
|
_, err := validatorClient.proposeBeaconBlock(
|
||||||
ctx,
|
ctx,
|
||||||
ðpb.GenericSignedBeaconBlock{
|
ðpb.GenericSignedBeaconBlock{
|
||||||
@@ -507,10 +507,10 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockJSONFallback(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
// SSZ call fails with 406 to trigger JSON fallback
|
// SSZ call fails with 406 to trigger JSON fallback
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
tt.expectedPath,
|
tt.expectedPath,
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -521,7 +521,7 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockJSONFallback(t *testing.T) {
|
|||||||
}).Times(1)
|
}).Times(1)
|
||||||
|
|
||||||
// JSON fallback
|
// JSON fallback
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
tt.expectedPath,
|
tt.expectedPath,
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -529,7 +529,7 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockJSONFallback(t *testing.T) {
|
|||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
).Return(tt.jsonError).Times(1)
|
).Return(tt.jsonError).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := beaconApiValidatorClient{handler: handler}
|
||||||
resp, err := validatorClient.proposeBeaconBlock(ctx, tt.block)
|
resp, err := validatorClient.proposeBeaconBlock(ctx, tt.block)
|
||||||
|
|
||||||
if tt.wantErr {
|
if tt.wantErr {
|
||||||
@@ -547,29 +547,12 @@ func TestBeaconApiValidatorClient_Host(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
hosts := []string{"http://localhost:8080", "http://localhost:8081"}
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler.EXPECT().Host().Return("http://localhost:8080").Times(1)
|
||||||
jsonRestHandler.EXPECT().SwitchHost(
|
|
||||||
hosts[0],
|
|
||||||
).Times(1)
|
|
||||||
jsonRestHandler.EXPECT().Host().Return(
|
|
||||||
hosts[0],
|
|
||||||
).Times(1)
|
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := beaconApiValidatorClient{handler: handler}
|
||||||
validatorClient.SwitchHost(hosts[0])
|
|
||||||
host := validatorClient.Host()
|
host := validatorClient.Host()
|
||||||
require.Equal(t, hosts[0], host)
|
require.Equal(t, "http://localhost:8080", host)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().SwitchHost(
|
|
||||||
hosts[1],
|
|
||||||
).Times(1)
|
|
||||||
jsonRestHandler.EXPECT().Host().Return(
|
|
||||||
hosts[1],
|
|
||||||
).Times(1)
|
|
||||||
validatorClient.SwitchHost(hosts[1])
|
|
||||||
host = validatorClient.Host()
|
|
||||||
require.Equal(t, hosts[1], host)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper functions for generating test blocks for newer consensus versions
|
// Helper functions for generating test blocks for newer consensus versions
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ func (c *beaconApiValidatorClient) aggregatedSelection(ctx context.Context, sele
|
|||||||
}
|
}
|
||||||
|
|
||||||
var resp aggregatedSelectionResponse
|
var resp aggregatedSelectionResponse
|
||||||
err = c.jsonRestHandler.Post(ctx, "/eth/v1/validator/beacon_committee_selections", nil, bytes.NewBuffer(body), &resp)
|
err = c.handler.Post(ctx, "/eth/v1/validator/beacon_committee_selections", nil, bytes.NewBuffer(body), &resp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "error calling post endpoint")
|
return nil, errors.Wrap(err, "error calling post endpoint")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,13 +89,13 @@ func TestGetAggregatedSelections(t *testing.T) {
|
|||||||
for _, test := range testcases {
|
for _, test := range testcases {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
reqBody, err := json.Marshal(test.req)
|
reqBody, err := json.Marshal(test.req)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/validator/beacon_committee_selections",
|
"/eth/v1/validator/beacon_committee_selections",
|
||||||
nil,
|
nil,
|
||||||
@@ -108,7 +108,7 @@ func TestGetAggregatedSelections(t *testing.T) {
|
|||||||
test.endpointError,
|
test.endpointError,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
res, err := validatorClient.AggregatedSelections(ctx, test.req)
|
res, err := validatorClient.AggregatedSelections(ctx, test.req)
|
||||||
if test.expectedErrorMessage != "" {
|
if test.expectedErrorMessage != "" {
|
||||||
require.ErrorContains(t, test.expectedErrorMessage, err)
|
require.ErrorContains(t, test.expectedErrorMessage, err)
|
||||||
|
|||||||
@@ -288,12 +288,12 @@ func TestCheckDoppelGanger_Nominal(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
if testCase.getSyncingOutput != nil {
|
if testCase.getSyncingOutput != nil {
|
||||||
syncingResponseJson := structs.SyncStatusResponse{}
|
syncingResponseJson := structs.SyncStatusResponse{}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
syncingEndpoint,
|
syncingEndpoint,
|
||||||
&syncingResponseJson,
|
&syncingResponseJson,
|
||||||
@@ -308,7 +308,7 @@ func TestCheckDoppelGanger_Nominal(t *testing.T) {
|
|||||||
if testCase.getForkOutput != nil {
|
if testCase.getForkOutput != nil {
|
||||||
stateForkResponseJson := structs.GetStateForkResponse{}
|
stateForkResponseJson := structs.GetStateForkResponse{}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
forkEndpoint,
|
forkEndpoint,
|
||||||
&stateForkResponseJson,
|
&stateForkResponseJson,
|
||||||
@@ -323,7 +323,7 @@ func TestCheckDoppelGanger_Nominal(t *testing.T) {
|
|||||||
if testCase.getHeadersOutput != nil {
|
if testCase.getHeadersOutput != nil {
|
||||||
blockHeadersResponseJson := structs.GetBlockHeadersResponse{}
|
blockHeadersResponseJson := structs.GetBlockHeadersResponse{}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
headersEndpoint,
|
headersEndpoint,
|
||||||
&blockHeadersResponseJson,
|
&blockHeadersResponseJson,
|
||||||
@@ -342,7 +342,7 @@ func TestCheckDoppelGanger_Nominal(t *testing.T) {
|
|||||||
marshalledIndexes, err := json.Marshal(iface.inputStringIndexes)
|
marshalledIndexes, err := json.Marshal(iface.inputStringIndexes)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
iface.inputUrl,
|
iface.inputUrl,
|
||||||
nil,
|
nil,
|
||||||
@@ -372,7 +372,7 @@ func TestCheckDoppelGanger_Nominal(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
stateValidatorsProvider: stateValidatorsProvider,
|
stateValidatorsProvider: stateValidatorsProvider,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -722,12 +722,12 @@ func TestCheckDoppelGanger_Errors(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
if testCase.getSyncingOutput != nil {
|
if testCase.getSyncingOutput != nil {
|
||||||
syncingResponseJson := structs.SyncStatusResponse{}
|
syncingResponseJson := structs.SyncStatusResponse{}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
syncingEndpoint,
|
syncingEndpoint,
|
||||||
&syncingResponseJson,
|
&syncingResponseJson,
|
||||||
@@ -742,7 +742,7 @@ func TestCheckDoppelGanger_Errors(t *testing.T) {
|
|||||||
if testCase.getForkOutput != nil {
|
if testCase.getForkOutput != nil {
|
||||||
stateForkResponseJson := structs.GetStateForkResponse{}
|
stateForkResponseJson := structs.GetStateForkResponse{}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
forkEndpoint,
|
forkEndpoint,
|
||||||
&stateForkResponseJson,
|
&stateForkResponseJson,
|
||||||
@@ -757,7 +757,7 @@ func TestCheckDoppelGanger_Errors(t *testing.T) {
|
|||||||
if testCase.getHeadersOutput != nil {
|
if testCase.getHeadersOutput != nil {
|
||||||
blockHeadersResponseJson := structs.GetBlockHeadersResponse{}
|
blockHeadersResponseJson := structs.GetBlockHeadersResponse{}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
headersEndpoint,
|
headersEndpoint,
|
||||||
&blockHeadersResponseJson,
|
&blockHeadersResponseJson,
|
||||||
@@ -790,7 +790,7 @@ func TestCheckDoppelGanger_Errors(t *testing.T) {
|
|||||||
marshalledIndexes, err := json.Marshal(iface.inputStringIndexes)
|
marshalledIndexes, err := json.Marshal(iface.inputStringIndexes)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
iface.inputUrl,
|
iface.inputUrl,
|
||||||
nil,
|
nil,
|
||||||
@@ -806,7 +806,7 @@ func TestCheckDoppelGanger_Errors(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
stateValidatorsProvider: stateValidatorsProvider,
|
stateValidatorsProvider: stateValidatorsProvider,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ type dutiesProvider interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type beaconApiDutiesProvider struct {
|
type beaconApiDutiesProvider struct {
|
||||||
jsonRestHandler rest.RestHandler
|
handler rest.Handler
|
||||||
}
|
}
|
||||||
|
|
||||||
type attesterDuty struct {
|
type attesterDuty struct {
|
||||||
@@ -279,7 +279,7 @@ func (c beaconApiDutiesProvider) Committees(ctx context.Context, epoch primitive
|
|||||||
committeesRequest := apiutil.BuildURL("/eth/v1/beacon/states/head/committees", committeeParams)
|
committeesRequest := apiutil.BuildURL("/eth/v1/beacon/states/head/committees", committeeParams)
|
||||||
|
|
||||||
var stateCommittees structs.GetCommitteesResponse
|
var stateCommittees structs.GetCommitteesResponse
|
||||||
if err := c.jsonRestHandler.Get(ctx, committeesRequest, &stateCommittees); err != nil {
|
if err := c.handler.Get(ctx, committeesRequest, &stateCommittees); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -309,7 +309,7 @@ func (c beaconApiDutiesProvider) AttesterDuties(ctx context.Context, epoch primi
|
|||||||
}
|
}
|
||||||
|
|
||||||
attesterDuties := &structs.GetAttesterDutiesResponse{}
|
attesterDuties := &structs.GetAttesterDutiesResponse{}
|
||||||
if err = c.jsonRestHandler.Post(
|
if err = c.handler.Post(
|
||||||
ctx,
|
ctx,
|
||||||
fmt.Sprintf("/eth/v1/validator/duties/attester/%d", epoch),
|
fmt.Sprintf("/eth/v1/validator/duties/attester/%d", epoch),
|
||||||
nil,
|
nil,
|
||||||
@@ -331,7 +331,7 @@ func (c beaconApiDutiesProvider) AttesterDuties(ctx context.Context, epoch primi
|
|||||||
// ProposerDuties retrieves the proposer duties for the given epoch
|
// ProposerDuties retrieves the proposer duties for the given epoch
|
||||||
func (c beaconApiDutiesProvider) ProposerDuties(ctx context.Context, epoch primitives.Epoch) (*structs.GetProposerDutiesResponse, error) {
|
func (c beaconApiDutiesProvider) ProposerDuties(ctx context.Context, epoch primitives.Epoch) (*structs.GetProposerDutiesResponse, error) {
|
||||||
proposerDuties := &structs.GetProposerDutiesResponse{}
|
proposerDuties := &structs.GetProposerDutiesResponse{}
|
||||||
if err := c.jsonRestHandler.Get(ctx, fmt.Sprintf("/eth/v1/validator/duties/proposer/%d", epoch), proposerDuties); err != nil {
|
if err := c.handler.Get(ctx, fmt.Sprintf("/eth/v1/validator/duties/proposer/%d", epoch), proposerDuties); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -361,7 +361,7 @@ func (c beaconApiDutiesProvider) SyncDuties(ctx context.Context, epoch primitive
|
|||||||
}
|
}
|
||||||
|
|
||||||
syncDuties := structs.GetSyncCommitteeDutiesResponse{}
|
syncDuties := structs.GetSyncCommitteeDutiesResponse{}
|
||||||
if err = c.jsonRestHandler.Post(
|
if err = c.handler.Post(
|
||||||
ctx,
|
ctx,
|
||||||
fmt.Sprintf("/eth/v1/validator/duties/sync/%d", epoch),
|
fmt.Sprintf("/eth/v1/validator/duties/sync/%d", epoch),
|
||||||
nil,
|
nil,
|
||||||
|
|||||||
@@ -60,8 +60,8 @@ func TestGetAttesterDuties_Valid(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
validatorIndices := []primitives.ValidatorIndex{2, 9}
|
validatorIndices := []primitives.ValidatorIndex{2, 9}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s/%d", getAttesterDutiesTestEndpoint, epoch),
|
fmt.Sprintf("%s/%d", getAttesterDutiesTestEndpoint, epoch),
|
||||||
nil,
|
nil,
|
||||||
@@ -74,7 +74,7 @@ func TestGetAttesterDuties_Valid(t *testing.T) {
|
|||||||
expectedAttesterDuties,
|
expectedAttesterDuties,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
dutiesProvider := &beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler}
|
dutiesProvider := &beaconApiDutiesProvider{handler: handler}
|
||||||
attesterDuties, err := dutiesProvider.AttesterDuties(ctx, epoch, validatorIndices)
|
attesterDuties, err := dutiesProvider.AttesterDuties(ctx, epoch, validatorIndices)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.DeepEqual(t, expectedAttesterDuties.Data, attesterDuties.Data)
|
assert.DeepEqual(t, expectedAttesterDuties.Data, attesterDuties.Data)
|
||||||
@@ -88,8 +88,8 @@ func TestGetAttesterDuties_HttpError(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s/%d", getAttesterDutiesTestEndpoint, epoch),
|
fmt.Sprintf("%s/%d", getAttesterDutiesTestEndpoint, epoch),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -99,7 +99,7 @@ func TestGetAttesterDuties_HttpError(t *testing.T) {
|
|||||||
errors.New("foo error"),
|
errors.New("foo error"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
dutiesProvider := &beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler}
|
dutiesProvider := &beaconApiDutiesProvider{handler: handler}
|
||||||
_, err := dutiesProvider.AttesterDuties(ctx, epoch, nil)
|
_, err := dutiesProvider.AttesterDuties(ctx, epoch, nil)
|
||||||
assert.ErrorContains(t, "foo error", err)
|
assert.ErrorContains(t, "foo error", err)
|
||||||
}
|
}
|
||||||
@@ -112,8 +112,8 @@ func TestGetAttesterDuties_NilAttesterDuty(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s/%d", getAttesterDutiesTestEndpoint, epoch),
|
fmt.Sprintf("%s/%d", getAttesterDutiesTestEndpoint, epoch),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -128,7 +128,7 @@ func TestGetAttesterDuties_NilAttesterDuty(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
dutiesProvider := &beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler}
|
dutiesProvider := &beaconApiDutiesProvider{handler: handler}
|
||||||
_, err := dutiesProvider.AttesterDuties(ctx, epoch, nil)
|
_, err := dutiesProvider.AttesterDuties(ctx, epoch, nil)
|
||||||
assert.ErrorContains(t, "attester duty at index `0` is nil", err)
|
assert.ErrorContains(t, "attester duty at index `0` is nil", err)
|
||||||
}
|
}
|
||||||
@@ -156,8 +156,8 @@ func TestGetProposerDuties_Valid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s/%d", getProposerDutiesTestEndpoint, epoch),
|
fmt.Sprintf("%s/%d", getProposerDutiesTestEndpoint, epoch),
|
||||||
&structs.GetProposerDutiesResponse{},
|
&structs.GetProposerDutiesResponse{},
|
||||||
@@ -168,7 +168,7 @@ func TestGetProposerDuties_Valid(t *testing.T) {
|
|||||||
expectedProposerDuties,
|
expectedProposerDuties,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
dutiesProvider := &beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler}
|
dutiesProvider := &beaconApiDutiesProvider{handler: handler}
|
||||||
proposerDuties, err := dutiesProvider.ProposerDuties(ctx, epoch)
|
proposerDuties, err := dutiesProvider.ProposerDuties(ctx, epoch)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.DeepEqual(t, expectedProposerDuties.Data, proposerDuties.Data)
|
assert.DeepEqual(t, expectedProposerDuties.Data, proposerDuties.Data)
|
||||||
@@ -182,8 +182,8 @@ func TestGetProposerDuties_HttpError(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s/%d", getProposerDutiesTestEndpoint, epoch),
|
fmt.Sprintf("%s/%d", getProposerDutiesTestEndpoint, epoch),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -191,7 +191,7 @@ func TestGetProposerDuties_HttpError(t *testing.T) {
|
|||||||
errors.New("foo error"),
|
errors.New("foo error"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
dutiesProvider := &beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler}
|
dutiesProvider := &beaconApiDutiesProvider{handler: handler}
|
||||||
_, err := dutiesProvider.ProposerDuties(ctx, epoch)
|
_, err := dutiesProvider.ProposerDuties(ctx, epoch)
|
||||||
assert.ErrorContains(t, "foo error", err)
|
assert.ErrorContains(t, "foo error", err)
|
||||||
}
|
}
|
||||||
@@ -204,8 +204,8 @@ func TestGetProposerDuties_NilData(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s/%d", getProposerDutiesTestEndpoint, epoch),
|
fmt.Sprintf("%s/%d", getProposerDutiesTestEndpoint, epoch),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -218,7 +218,7 @@ func TestGetProposerDuties_NilData(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
dutiesProvider := &beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler}
|
dutiesProvider := &beaconApiDutiesProvider{handler: handler}
|
||||||
_, err := dutiesProvider.ProposerDuties(ctx, epoch)
|
_, err := dutiesProvider.ProposerDuties(ctx, epoch)
|
||||||
assert.ErrorContains(t, "proposer duties data is nil", err)
|
assert.ErrorContains(t, "proposer duties data is nil", err)
|
||||||
}
|
}
|
||||||
@@ -231,8 +231,8 @@ func TestGetProposerDuties_NilProposerDuty(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s/%d", getProposerDutiesTestEndpoint, epoch),
|
fmt.Sprintf("%s/%d", getProposerDutiesTestEndpoint, epoch),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -245,7 +245,7 @@ func TestGetProposerDuties_NilProposerDuty(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
dutiesProvider := &beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler}
|
dutiesProvider := &beaconApiDutiesProvider{handler: handler}
|
||||||
_, err := dutiesProvider.ProposerDuties(ctx, epoch)
|
_, err := dutiesProvider.ProposerDuties(ctx, epoch)
|
||||||
assert.ErrorContains(t, "proposer duty at index `0` is nil", err)
|
assert.ErrorContains(t, "proposer duty at index `0` is nil", err)
|
||||||
}
|
}
|
||||||
@@ -284,8 +284,8 @@ func TestGetSyncDuties_Valid(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
validatorIndices := []primitives.ValidatorIndex{2, 6}
|
validatorIndices := []primitives.ValidatorIndex{2, 6}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s/%d", getSyncDutiesTestEndpoint, epoch),
|
fmt.Sprintf("%s/%d", getSyncDutiesTestEndpoint, epoch),
|
||||||
nil,
|
nil,
|
||||||
@@ -298,7 +298,7 @@ func TestGetSyncDuties_Valid(t *testing.T) {
|
|||||||
expectedSyncDuties,
|
expectedSyncDuties,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
dutiesProvider := &beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler}
|
dutiesProvider := &beaconApiDutiesProvider{handler: handler}
|
||||||
syncDuties, err := dutiesProvider.SyncDuties(ctx, epoch, validatorIndices)
|
syncDuties, err := dutiesProvider.SyncDuties(ctx, epoch, validatorIndices)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.DeepEqual(t, expectedSyncDuties.Data, syncDuties)
|
assert.DeepEqual(t, expectedSyncDuties.Data, syncDuties)
|
||||||
@@ -312,8 +312,8 @@ func TestGetSyncDuties_HttpError(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s/%d", getSyncDutiesTestEndpoint, epoch),
|
fmt.Sprintf("%s/%d", getSyncDutiesTestEndpoint, epoch),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -323,7 +323,7 @@ func TestGetSyncDuties_HttpError(t *testing.T) {
|
|||||||
errors.New("foo error"),
|
errors.New("foo error"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
dutiesProvider := &beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler}
|
dutiesProvider := &beaconApiDutiesProvider{handler: handler}
|
||||||
_, err := dutiesProvider.SyncDuties(ctx, epoch, nil)
|
_, err := dutiesProvider.SyncDuties(ctx, epoch, nil)
|
||||||
assert.ErrorContains(t, "foo error", err)
|
assert.ErrorContains(t, "foo error", err)
|
||||||
}
|
}
|
||||||
@@ -336,8 +336,8 @@ func TestGetSyncDuties_NilData(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s/%d", getSyncDutiesTestEndpoint, epoch),
|
fmt.Sprintf("%s/%d", getSyncDutiesTestEndpoint, epoch),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -352,7 +352,7 @@ func TestGetSyncDuties_NilData(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
dutiesProvider := &beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler}
|
dutiesProvider := &beaconApiDutiesProvider{handler: handler}
|
||||||
_, err := dutiesProvider.SyncDuties(ctx, epoch, nil)
|
_, err := dutiesProvider.SyncDuties(ctx, epoch, nil)
|
||||||
assert.ErrorContains(t, "sync duties data is nil", err)
|
assert.ErrorContains(t, "sync duties data is nil", err)
|
||||||
}
|
}
|
||||||
@@ -365,8 +365,8 @@ func TestGetSyncDuties_NilSyncDuty(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s/%d", getSyncDutiesTestEndpoint, epoch),
|
fmt.Sprintf("%s/%d", getSyncDutiesTestEndpoint, epoch),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -381,7 +381,7 @@ func TestGetSyncDuties_NilSyncDuty(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
dutiesProvider := &beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler}
|
dutiesProvider := &beaconApiDutiesProvider{handler: handler}
|
||||||
_, err := dutiesProvider.SyncDuties(ctx, epoch, nil)
|
_, err := dutiesProvider.SyncDuties(ctx, epoch, nil)
|
||||||
assert.ErrorContains(t, "sync duty at index `0` is nil", err)
|
assert.ErrorContains(t, "sync duty at index `0` is nil", err)
|
||||||
}
|
}
|
||||||
@@ -415,8 +415,8 @@ func TestGetCommittees_Valid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s?epoch=%d", getCommitteesTestEndpoint, epoch),
|
fmt.Sprintf("%s?epoch=%d", getCommitteesTestEndpoint, epoch),
|
||||||
&structs.GetCommitteesResponse{},
|
&structs.GetCommitteesResponse{},
|
||||||
@@ -427,7 +427,7 @@ func TestGetCommittees_Valid(t *testing.T) {
|
|||||||
expectedCommittees,
|
expectedCommittees,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
dutiesProvider := &beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler}
|
dutiesProvider := &beaconApiDutiesProvider{handler: handler}
|
||||||
committees, err := dutiesProvider.Committees(ctx, epoch)
|
committees, err := dutiesProvider.Committees(ctx, epoch)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.DeepEqual(t, expectedCommittees.Data, committees)
|
assert.DeepEqual(t, expectedCommittees.Data, committees)
|
||||||
@@ -441,8 +441,8 @@ func TestGetCommittees_HttpError(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s?epoch=%d", getCommitteesTestEndpoint, epoch),
|
fmt.Sprintf("%s?epoch=%d", getCommitteesTestEndpoint, epoch),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -450,7 +450,7 @@ func TestGetCommittees_HttpError(t *testing.T) {
|
|||||||
errors.New("foo error"),
|
errors.New("foo error"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
dutiesProvider := &beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler}
|
dutiesProvider := &beaconApiDutiesProvider{handler: handler}
|
||||||
_, err := dutiesProvider.Committees(ctx, epoch)
|
_, err := dutiesProvider.Committees(ctx, epoch)
|
||||||
assert.ErrorContains(t, "foo error", err)
|
assert.ErrorContains(t, "foo error", err)
|
||||||
}
|
}
|
||||||
@@ -463,8 +463,8 @@ func TestGetCommittees_NilData(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s?epoch=%d", getCommitteesTestEndpoint, epoch),
|
fmt.Sprintf("%s?epoch=%d", getCommitteesTestEndpoint, epoch),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -477,7 +477,7 @@ func TestGetCommittees_NilData(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
dutiesProvider := &beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler}
|
dutiesProvider := &beaconApiDutiesProvider{handler: handler}
|
||||||
_, err := dutiesProvider.Committees(ctx, epoch)
|
_, err := dutiesProvider.Committees(ctx, epoch)
|
||||||
assert.ErrorContains(t, "state committees data is nil", err)
|
assert.ErrorContains(t, "state committees data is nil", err)
|
||||||
}
|
}
|
||||||
@@ -490,8 +490,8 @@ func TestGetCommittees_NilCommittee(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s?epoch=%d", getCommitteesTestEndpoint, epoch),
|
fmt.Sprintf("%s?epoch=%d", getCommitteesTestEndpoint, epoch),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -504,7 +504,7 @@ func TestGetCommittees_NilCommittee(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
dutiesProvider := &beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler}
|
dutiesProvider := &beaconApiDutiesProvider{handler: handler}
|
||||||
_, err := dutiesProvider.Committees(ctx, epoch)
|
_, err := dutiesProvider.Committees(ctx, epoch)
|
||||||
assert.ErrorContains(t, "committee at index `0` is nil", err)
|
assert.ErrorContains(t, "committee at index `0` is nil", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ type GenesisProvider interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type beaconApiGenesisProvider struct {
|
type beaconApiGenesisProvider struct {
|
||||||
jsonRestHandler rest.RestHandler
|
handler rest.Handler
|
||||||
genesis *structs.Genesis
|
genesis *structs.Genesis
|
||||||
once sync.Once
|
once sync.Once
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *beaconApiValidatorClient) waitForChainStart(ctx context.Context) (*ethpb.ChainStartResponse, error) {
|
func (c *beaconApiValidatorClient) waitForChainStart(ctx context.Context) (*ethpb.ChainStartResponse, error) {
|
||||||
@@ -69,7 +69,7 @@ func (c *beaconApiGenesisProvider) Genesis(ctx context.Context) (*structs.Genesi
|
|||||||
genesisJson := &structs.GetGenesisResponse{}
|
genesisJson := &structs.GetGenesisResponse{}
|
||||||
var doErr error
|
var doErr error
|
||||||
c.once.Do(func() {
|
c.once.Do(func() {
|
||||||
if err := c.jsonRestHandler.Get(ctx, "/eth/v1/beacon/genesis", genesisJson); err != nil {
|
if err := c.handler.Get(ctx, "/eth/v1/beacon/genesis", genesisJson); err != nil {
|
||||||
doErr = err
|
doErr = err
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ func TestGetGenesis_ValidGenesis(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
genesisResponseJson := structs.GetGenesisResponse{}
|
genesisResponseJson := structs.GetGenesisResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/genesis",
|
"/eth/v1/beacon/genesis",
|
||||||
&genesisResponseJson,
|
&genesisResponseJson,
|
||||||
@@ -35,7 +35,7 @@ func TestGetGenesis_ValidGenesis(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
genesisProvider := &beaconApiGenesisProvider{jsonRestHandler: jsonRestHandler}
|
genesisProvider := &beaconApiGenesisProvider{handler: handler}
|
||||||
resp, err := genesisProvider.Genesis(ctx)
|
resp, err := genesisProvider.Genesis(ctx)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
require.NotNil(t, resp)
|
require.NotNil(t, resp)
|
||||||
@@ -50,8 +50,8 @@ func TestGetGenesis_NilData(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
genesisResponseJson := structs.GetGenesisResponse{}
|
genesisResponseJson := structs.GetGenesisResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/genesis",
|
"/eth/v1/beacon/genesis",
|
||||||
&genesisResponseJson,
|
&genesisResponseJson,
|
||||||
@@ -62,7 +62,7 @@ func TestGetGenesis_NilData(t *testing.T) {
|
|||||||
structs.GetGenesisResponse{Data: nil},
|
structs.GetGenesisResponse{Data: nil},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
genesisProvider := &beaconApiGenesisProvider{jsonRestHandler: jsonRestHandler}
|
genesisProvider := &beaconApiGenesisProvider{handler: handler}
|
||||||
_, err := genesisProvider.Genesis(ctx)
|
_, err := genesisProvider.Genesis(ctx)
|
||||||
assert.ErrorContains(t, "genesis data is nil", err)
|
assert.ErrorContains(t, "genesis data is nil", err)
|
||||||
}
|
}
|
||||||
@@ -74,8 +74,8 @@ func TestGetGenesis_EndpointCalledOnlyOnce(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
genesisResponseJson := structs.GetGenesisResponse{}
|
genesisResponseJson := structs.GetGenesisResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/genesis",
|
"/eth/v1/beacon/genesis",
|
||||||
&genesisResponseJson,
|
&genesisResponseJson,
|
||||||
@@ -91,7 +91,7 @@ func TestGetGenesis_EndpointCalledOnlyOnce(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
genesisProvider := &beaconApiGenesisProvider{jsonRestHandler: jsonRestHandler}
|
genesisProvider := &beaconApiGenesisProvider{handler: handler}
|
||||||
_, err := genesisProvider.Genesis(ctx)
|
_, err := genesisProvider.Genesis(ctx)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
resp, err := genesisProvider.Genesis(ctx)
|
resp, err := genesisProvider.Genesis(ctx)
|
||||||
@@ -108,15 +108,15 @@ func TestGetGenesis_EndpointCanBeCalledAgainAfterError(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
genesisResponseJson := structs.GetGenesisResponse{}
|
genesisResponseJson := structs.GetGenesisResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/genesis",
|
"/eth/v1/beacon/genesis",
|
||||||
&genesisResponseJson,
|
&genesisResponseJson,
|
||||||
).Return(
|
).Return(
|
||||||
errors.New("foo"),
|
errors.New("foo"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/genesis",
|
"/eth/v1/beacon/genesis",
|
||||||
&genesisResponseJson,
|
&genesisResponseJson,
|
||||||
@@ -132,7 +132,7 @@ func TestGetGenesis_EndpointCanBeCalledAgainAfterError(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
genesisProvider := &beaconApiGenesisProvider{jsonRestHandler: jsonRestHandler}
|
genesisProvider := &beaconApiGenesisProvider{handler: handler}
|
||||||
_, err := genesisProvider.Genesis(ctx)
|
_, err := genesisProvider.Genesis(ctx)
|
||||||
require.ErrorContains(t, "foo", err)
|
require.ErrorContains(t, "foo", err)
|
||||||
resp, err := genesisProvider.Genesis(ctx)
|
resp, err := genesisProvider.Genesis(ctx)
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ func (c *beaconApiValidatorClient) beaconBlock(ctx context.Context, slot primiti
|
|||||||
queryParams.Add("graffiti", hexutil.Encode(graffiti))
|
queryParams.Add("graffiti", hexutil.Encode(graffiti))
|
||||||
}
|
}
|
||||||
queryUrl := apiutil.BuildURL(fmt.Sprintf("/eth/v3/validator/blocks/%d", slot), queryParams)
|
queryUrl := apiutil.BuildURL(fmt.Sprintf("/eth/v3/validator/blocks/%d", slot), queryParams)
|
||||||
data, header, err := c.jsonRestHandler.GetSSZ(ctx, queryUrl)
|
data, header, err := c.handler.GetSSZ(ctx, queryUrl)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ func TestGetBeaconBlock_RequestFailed(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -35,7 +35,7 @@ func TestGetBeaconBlock_RequestFailed(t *testing.T) {
|
|||||||
errors.New("foo error"),
|
errors.New("foo error"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.beaconBlock(ctx, 1, []byte{1}, []byte{2})
|
_, err := validatorClient.beaconBlock(ctx, 1, []byte{1}, []byte{2})
|
||||||
assert.ErrorContains(t, "foo error", err)
|
assert.ErrorContains(t, "foo error", err)
|
||||||
}
|
}
|
||||||
@@ -149,8 +149,8 @@ func TestGetBeaconBlock_Error(t *testing.T) {
|
|||||||
|
|
||||||
b, err := json.Marshal(resp)
|
b, err := json.Marshal(resp)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -159,7 +159,7 @@ func TestGetBeaconBlock_Error(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err = validatorClient.beaconBlock(ctx, 1, []byte{1}, []byte{2})
|
_, err = validatorClient.beaconBlock(ctx, 1, []byte{1}, []byte{2})
|
||||||
assert.ErrorContains(t, testCase.expectedErrorMessage, err)
|
assert.ErrorContains(t, testCase.expectedErrorMessage, err)
|
||||||
})
|
})
|
||||||
@@ -185,8 +185,8 @@ func TestGetBeaconBlock_Phase0Valid(t *testing.T) {
|
|||||||
Data: bytes,
|
Data: bytes,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -195,7 +195,7 @@ func TestGetBeaconBlock_Phase0Valid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -224,8 +224,8 @@ func TestGetBeaconBlock_SSZ_BellatrixValid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -238,7 +238,7 @@ func TestGetBeaconBlock_SSZ_BellatrixValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -266,8 +266,8 @@ func TestGetBeaconBlock_SSZ_BlindedBellatrixValid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -280,7 +280,7 @@ func TestGetBeaconBlock_SSZ_BlindedBellatrixValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -308,8 +308,8 @@ func TestGetBeaconBlock_SSZ_CapellaValid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -322,7 +322,7 @@ func TestGetBeaconBlock_SSZ_CapellaValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -350,8 +350,8 @@ func TestGetBeaconBlock_SSZ_BlindedCapellaValid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -364,7 +364,7 @@ func TestGetBeaconBlock_SSZ_BlindedCapellaValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -392,8 +392,8 @@ func TestGetBeaconBlock_SSZ_DenebValid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -406,7 +406,7 @@ func TestGetBeaconBlock_SSZ_DenebValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -434,8 +434,8 @@ func TestGetBeaconBlock_SSZ_BlindedDenebValid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -448,7 +448,7 @@ func TestGetBeaconBlock_SSZ_BlindedDenebValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -476,8 +476,8 @@ func TestGetBeaconBlock_SSZ_ElectraValid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -490,7 +490,7 @@ func TestGetBeaconBlock_SSZ_ElectraValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -518,8 +518,8 @@ func TestGetBeaconBlock_SSZ_BlindedElectraValid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -532,7 +532,7 @@ func TestGetBeaconBlock_SSZ_BlindedElectraValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -556,8 +556,8 @@ func TestGetBeaconBlock_SSZ_UnsupportedVersion(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -570,7 +570,7 @@ func TestGetBeaconBlock_SSZ_UnsupportedVersion(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
_, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
assert.ErrorContains(t, "version name doesn't map to a known value in the enum", err)
|
assert.ErrorContains(t, "version name doesn't map to a known value in the enum", err)
|
||||||
}
|
}
|
||||||
@@ -589,8 +589,8 @@ func TestGetBeaconBlock_SSZ_InvalidBlindedHeader(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -603,7 +603,7 @@ func TestGetBeaconBlock_SSZ_InvalidBlindedHeader(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err = validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
_, err = validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
assert.ErrorContains(t, "strconv.ParseBool: parsing \"invalid\": invalid syntax", err)
|
assert.ErrorContains(t, "strconv.ParseBool: parsing \"invalid\": invalid syntax", err)
|
||||||
}
|
}
|
||||||
@@ -622,8 +622,8 @@ func TestGetBeaconBlock_SSZ_InvalidVersionHeader(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -636,7 +636,7 @@ func TestGetBeaconBlock_SSZ_InvalidVersionHeader(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err = validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
_, err = validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
assert.ErrorContains(t, "unsupported header version invalid", err)
|
assert.ErrorContains(t, "unsupported header version invalid", err)
|
||||||
}
|
}
|
||||||
@@ -651,8 +651,8 @@ func TestGetBeaconBlock_SSZ_GetSSZError(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -661,7 +661,7 @@ func TestGetBeaconBlock_SSZ_GetSSZError(t *testing.T) {
|
|||||||
errors.New("get ssz error"),
|
errors.New("get ssz error"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
_, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
assert.ErrorContains(t, "get ssz error", err)
|
assert.ErrorContains(t, "get ssz error", err)
|
||||||
}
|
}
|
||||||
@@ -680,8 +680,8 @@ func TestGetBeaconBlock_SSZ_Phase0Valid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -694,7 +694,7 @@ func TestGetBeaconBlock_SSZ_Phase0Valid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -722,8 +722,8 @@ func TestGetBeaconBlock_SSZ_AltairValid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -736,7 +736,7 @@ func TestGetBeaconBlock_SSZ_AltairValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -770,8 +770,8 @@ func TestGetBeaconBlock_AltairValid(t *testing.T) {
|
|||||||
Data: bytes,
|
Data: bytes,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -780,7 +780,7 @@ func TestGetBeaconBlock_AltairValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -814,8 +814,8 @@ func TestGetBeaconBlock_BellatrixValid(t *testing.T) {
|
|||||||
Data: bytes,
|
Data: bytes,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -824,7 +824,7 @@ func TestGetBeaconBlock_BellatrixValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -859,8 +859,8 @@ func TestGetBeaconBlock_BlindedBellatrixValid(t *testing.T) {
|
|||||||
Data: bytes,
|
Data: bytes,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -869,7 +869,7 @@ func TestGetBeaconBlock_BlindedBellatrixValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -904,8 +904,8 @@ func TestGetBeaconBlock_CapellaValid(t *testing.T) {
|
|||||||
Data: bytes,
|
Data: bytes,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -914,7 +914,7 @@ func TestGetBeaconBlock_CapellaValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -949,8 +949,8 @@ func TestGetBeaconBlock_BlindedCapellaValid(t *testing.T) {
|
|||||||
Data: bytes,
|
Data: bytes,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -959,7 +959,7 @@ func TestGetBeaconBlock_BlindedCapellaValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -994,8 +994,8 @@ func TestGetBeaconBlock_DenebValid(t *testing.T) {
|
|||||||
Data: bytes,
|
Data: bytes,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -1004,7 +1004,7 @@ func TestGetBeaconBlock_DenebValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -1039,8 +1039,8 @@ func TestGetBeaconBlock_BlindedDenebValid(t *testing.T) {
|
|||||||
Data: bytes,
|
Data: bytes,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -1049,7 +1049,7 @@ func TestGetBeaconBlock_BlindedDenebValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -1084,8 +1084,8 @@ func TestGetBeaconBlock_ElectraValid(t *testing.T) {
|
|||||||
Data: bytes,
|
Data: bytes,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -1094,7 +1094,7 @@ func TestGetBeaconBlock_ElectraValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -1129,8 +1129,8 @@ func TestGetBeaconBlock_BlindedElectraValid(t *testing.T) {
|
|||||||
Data: bytes,
|
Data: bytes,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetSSZ(
|
handler.EXPECT().GetSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
fmt.Sprintf("/eth/v3/validator/blocks/%d?graffiti=%s&randao_reveal=%s", slot, hexutil.Encode(graffiti), hexutil.Encode(randaoReveal)),
|
||||||
).Return(
|
).Return(
|
||||||
@@ -1139,7 +1139,7 @@ func TestGetBeaconBlock_BlindedElectraValid(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
beaconBlock, err := validatorClient.beaconBlock(ctx, slot, randaoReveal, graffiti)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
|||||||
@@ -41,9 +41,9 @@ func TestIndex_Nominal(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/states/head/validators",
|
"/eth/v1/beacon/states/head/validators",
|
||||||
nil,
|
nil,
|
||||||
@@ -68,7 +68,7 @@ func TestIndex_Nominal(t *testing.T) {
|
|||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
stateValidatorsProvider: beaconApiStateValidatorsProvider{
|
stateValidatorsProvider: beaconApiStateValidatorsProvider{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,9 +91,9 @@ func TestIndex_UnexistingValidator(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/states/head/validators",
|
"/eth/v1/beacon/states/head/validators",
|
||||||
nil,
|
nil,
|
||||||
@@ -110,7 +110,7 @@ func TestIndex_UnexistingValidator(t *testing.T) {
|
|||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
stateValidatorsProvider: beaconApiStateValidatorsProvider{
|
stateValidatorsProvider: beaconApiStateValidatorsProvider{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,9 +133,9 @@ func TestIndex_BadIndexError(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/states/head/validators",
|
"/eth/v1/beacon/states/head/validators",
|
||||||
nil,
|
nil,
|
||||||
@@ -160,7 +160,7 @@ func TestIndex_BadIndexError(t *testing.T) {
|
|||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
stateValidatorsProvider: beaconApiStateValidatorsProvider{
|
stateValidatorsProvider: beaconApiStateValidatorsProvider{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -182,9 +182,9 @@ func TestIndex_JsonResponseError(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/states/head/validators",
|
"/eth/v1/beacon/states/head/validators",
|
||||||
nil,
|
nil,
|
||||||
@@ -207,7 +207,7 @@ func TestIndex_JsonResponseError(t *testing.T) {
|
|||||||
queryParams.Add("status", st)
|
queryParams.Add("status", st)
|
||||||
}
|
}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
apiutil.BuildURL("/eth/v1/beacon/states/head/validators", queryParams),
|
apiutil.BuildURL("/eth/v1/beacon/states/head/validators", queryParams),
|
||||||
&stateValidatorsResponseJson,
|
&stateValidatorsResponseJson,
|
||||||
@@ -217,7 +217,7 @@ func TestIndex_JsonResponseError(t *testing.T) {
|
|||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
stateValidatorsProvider: beaconApiStateValidatorsProvider{
|
stateValidatorsProvider: beaconApiStateValidatorsProvider{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
// Code generated by MockGen. DO NOT EDIT.
|
// Code generated by MockGen. DO NOT EDIT.
|
||||||
// Source: validator/client/beacon-api/rest_handler_client.go
|
// Source: api/rest/rest_handler.go
|
||||||
//
|
//
|
||||||
// Generated by this command:
|
// Generated by this command:
|
||||||
//
|
//
|
||||||
// mockgen -package=mock -source=validator/client/beacon-api/rest_handler_client.go -destination=validator/client/beacon-api/mock/json_rest_handler_mock.go RestHandler
|
// mockgen -package=mock -source=api/rest/rest_handler.go -destination=validator/client/beacon-api/mock/json_rest_handler_mock.go Handler
|
||||||
//
|
//
|
||||||
|
|
||||||
// Package mock is a generated GoMock package.
|
// Package mock is a generated GoMock package.
|
||||||
@@ -19,36 +19,39 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Backward compatibility aliases for the renamed mock type.
|
// Backward compatibility aliases for the renamed mock type.
|
||||||
type MockJsonRestHandler = MockRestHandler
|
type MockJsonRestHandler = MockHandler
|
||||||
type MockJsonRestHandlerMockRecorder = MockRestHandlerMockRecorder
|
type MockJsonRestHandlerMockRecorder = MockHandlerMockRecorder
|
||||||
|
type MockRestHandler = MockHandler
|
||||||
|
type MockRestHandlerMockRecorder = MockHandlerMockRecorder
|
||||||
|
|
||||||
var NewMockJsonRestHandler = NewMockRestHandler
|
var NewMockJsonRestHandler = NewMockHandler
|
||||||
|
var NewMockRestHandler = NewMockHandler
|
||||||
|
|
||||||
// MockRestHandler is a mock of RestHandler interface.
|
// MockHandler is a mock of Handler interface.
|
||||||
type MockRestHandler struct {
|
type MockHandler struct {
|
||||||
ctrl *gomock.Controller
|
ctrl *gomock.Controller
|
||||||
recorder *MockRestHandlerMockRecorder
|
recorder *MockHandlerMockRecorder
|
||||||
}
|
}
|
||||||
|
|
||||||
// MockRestHandlerMockRecorder is the mock recorder for MockRestHandler.
|
// MockHandlerMockRecorder is the mock recorder for MockHandler.
|
||||||
type MockRestHandlerMockRecorder struct {
|
type MockHandlerMockRecorder struct {
|
||||||
mock *MockRestHandler
|
mock *MockHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewMockRestHandler creates a new mock instance.
|
// NewMockHandler creates a new mock instance.
|
||||||
func NewMockRestHandler(ctrl *gomock.Controller) *MockRestHandler {
|
func NewMockHandler(ctrl *gomock.Controller) *MockHandler {
|
||||||
mock := &MockRestHandler{ctrl: ctrl}
|
mock := &MockHandler{ctrl: ctrl}
|
||||||
mock.recorder = &MockRestHandlerMockRecorder{mock}
|
mock.recorder = &MockHandlerMockRecorder{mock}
|
||||||
return mock
|
return mock
|
||||||
}
|
}
|
||||||
|
|
||||||
// EXPECT returns an object that allows the caller to indicate expected use.
|
// EXPECT returns an object that allows the caller to indicate expected use.
|
||||||
func (m *MockRestHandler) EXPECT() *MockRestHandlerMockRecorder {
|
func (m *MockHandler) EXPECT() *MockHandlerMockRecorder {
|
||||||
return m.recorder
|
return m.recorder
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get mocks base method.
|
// Get mocks base method.
|
||||||
func (m *MockRestHandler) Get(ctx context.Context, endpoint string, resp any) error {
|
func (m *MockHandler) Get(ctx context.Context, endpoint string, resp any) error {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "Get", ctx, endpoint, resp)
|
ret := m.ctrl.Call(m, "Get", ctx, endpoint, resp)
|
||||||
ret0, _ := ret[0].(error)
|
ret0, _ := ret[0].(error)
|
||||||
@@ -56,13 +59,13 @@ func (m *MockRestHandler) Get(ctx context.Context, endpoint string, resp any) er
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get indicates an expected call of Get.
|
// Get indicates an expected call of Get.
|
||||||
func (mr *MockRestHandlerMockRecorder) Get(ctx, endpoint, resp any) *gomock.Call {
|
func (mr *MockHandlerMockRecorder) Get(ctx, endpoint, resp any) *gomock.Call {
|
||||||
mr.mock.ctrl.T.Helper()
|
mr.mock.ctrl.T.Helper()
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockRestHandler)(nil).Get), ctx, endpoint, resp)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockHandler)(nil).Get), ctx, endpoint, resp)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetSSZ mocks base method.
|
// GetSSZ mocks base method.
|
||||||
func (m *MockRestHandler) GetSSZ(ctx context.Context, endpoint string) ([]byte, http.Header, error) {
|
func (m *MockHandler) GetSSZ(ctx context.Context, endpoint string) ([]byte, http.Header, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "GetSSZ", ctx, endpoint)
|
ret := m.ctrl.Call(m, "GetSSZ", ctx, endpoint)
|
||||||
ret0, _ := ret[0].([]byte)
|
ret0, _ := ret[0].([]byte)
|
||||||
@@ -72,13 +75,13 @@ func (m *MockRestHandler) GetSSZ(ctx context.Context, endpoint string) ([]byte,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetSSZ indicates an expected call of GetSSZ.
|
// GetSSZ indicates an expected call of GetSSZ.
|
||||||
func (mr *MockRestHandlerMockRecorder) GetSSZ(ctx, endpoint any) *gomock.Call {
|
func (mr *MockHandlerMockRecorder) GetSSZ(ctx, endpoint any) *gomock.Call {
|
||||||
mr.mock.ctrl.T.Helper()
|
mr.mock.ctrl.T.Helper()
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSSZ", reflect.TypeOf((*MockRestHandler)(nil).GetSSZ), ctx, endpoint)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSSZ", reflect.TypeOf((*MockHandler)(nil).GetSSZ), ctx, endpoint)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetStatusCode mocks base method.
|
// GetStatusCode mocks base method.
|
||||||
func (m *MockRestHandler) GetStatusCode(ctx context.Context, endpoint string) (int, error) {
|
func (m *MockHandler) GetStatusCode(ctx context.Context, endpoint string) (int, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "GetStatusCode", ctx, endpoint)
|
ret := m.ctrl.Call(m, "GetStatusCode", ctx, endpoint)
|
||||||
ret0, _ := ret[0].(int)
|
ret0, _ := ret[0].(int)
|
||||||
@@ -87,13 +90,13 @@ func (m *MockRestHandler) GetStatusCode(ctx context.Context, endpoint string) (i
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetStatusCode indicates an expected call of GetStatusCode.
|
// GetStatusCode indicates an expected call of GetStatusCode.
|
||||||
func (mr *MockRestHandlerMockRecorder) GetStatusCode(ctx, endpoint any) *gomock.Call {
|
func (mr *MockHandlerMockRecorder) GetStatusCode(ctx, endpoint any) *gomock.Call {
|
||||||
mr.mock.ctrl.T.Helper()
|
mr.mock.ctrl.T.Helper()
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetStatusCode", reflect.TypeOf((*MockRestHandler)(nil).GetStatusCode), ctx, endpoint)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetStatusCode", reflect.TypeOf((*MockHandler)(nil).GetStatusCode), ctx, endpoint)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Host mocks base method.
|
// Host mocks base method.
|
||||||
func (m *MockRestHandler) Host() string {
|
func (m *MockHandler) Host() string {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "Host")
|
ret := m.ctrl.Call(m, "Host")
|
||||||
ret0, _ := ret[0].(string)
|
ret0, _ := ret[0].(string)
|
||||||
@@ -101,27 +104,13 @@ func (m *MockRestHandler) Host() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Host indicates an expected call of Host.
|
// Host indicates an expected call of Host.
|
||||||
func (mr *MockRestHandlerMockRecorder) Host() *gomock.Call {
|
func (mr *MockHandlerMockRecorder) Host() *gomock.Call {
|
||||||
mr.mock.ctrl.T.Helper()
|
mr.mock.ctrl.T.Helper()
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Host", reflect.TypeOf((*MockRestHandler)(nil).Host))
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Host", reflect.TypeOf((*MockHandler)(nil).Host))
|
||||||
}
|
|
||||||
|
|
||||||
// HttpClient mocks base method.
|
|
||||||
func (m *MockRestHandler) HttpClient() *http.Client {
|
|
||||||
m.ctrl.T.Helper()
|
|
||||||
ret := m.ctrl.Call(m, "HttpClient")
|
|
||||||
ret0, _ := ret[0].(*http.Client)
|
|
||||||
return ret0
|
|
||||||
}
|
|
||||||
|
|
||||||
// HttpClient indicates an expected call of HttpClient.
|
|
||||||
func (mr *MockRestHandlerMockRecorder) HttpClient() *gomock.Call {
|
|
||||||
mr.mock.ctrl.T.Helper()
|
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HttpClient", reflect.TypeOf((*MockRestHandler)(nil).HttpClient))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Post mocks base method.
|
// Post mocks base method.
|
||||||
func (m *MockRestHandler) Post(ctx context.Context, endpoint string, headers map[string]string, data *bytes.Buffer, resp any) error {
|
func (m *MockHandler) Post(ctx context.Context, endpoint string, headers map[string]string, data *bytes.Buffer, resp any) error {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "Post", ctx, endpoint, headers, data, resp)
|
ret := m.ctrl.Call(m, "Post", ctx, endpoint, headers, data, resp)
|
||||||
ret0, _ := ret[0].(error)
|
ret0, _ := ret[0].(error)
|
||||||
@@ -129,13 +118,13 @@ func (m *MockRestHandler) Post(ctx context.Context, endpoint string, headers map
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Post indicates an expected call of Post.
|
// Post indicates an expected call of Post.
|
||||||
func (mr *MockRestHandlerMockRecorder) Post(ctx, endpoint, headers, data, resp any) *gomock.Call {
|
func (mr *MockHandlerMockRecorder) Post(ctx, endpoint, headers, data, resp any) *gomock.Call {
|
||||||
mr.mock.ctrl.T.Helper()
|
mr.mock.ctrl.T.Helper()
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Post", reflect.TypeOf((*MockRestHandler)(nil).Post), ctx, endpoint, headers, data, resp)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Post", reflect.TypeOf((*MockHandler)(nil).Post), ctx, endpoint, headers, data, resp)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PostSSZ mocks base method.
|
// PostSSZ mocks base method.
|
||||||
func (m *MockRestHandler) PostSSZ(ctx context.Context, endpoint string, headers map[string]string, data *bytes.Buffer) ([]byte, http.Header, error) {
|
func (m *MockHandler) PostSSZ(ctx context.Context, endpoint string, headers map[string]string, data *bytes.Buffer) ([]byte, http.Header, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "PostSSZ", ctx, endpoint, headers, data)
|
ret := m.ctrl.Call(m, "PostSSZ", ctx, endpoint, headers, data)
|
||||||
ret0, _ := ret[0].([]byte)
|
ret0, _ := ret[0].([]byte)
|
||||||
@@ -145,19 +134,7 @@ func (m *MockRestHandler) PostSSZ(ctx context.Context, endpoint string, headers
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PostSSZ indicates an expected call of PostSSZ.
|
// PostSSZ indicates an expected call of PostSSZ.
|
||||||
func (mr *MockRestHandlerMockRecorder) PostSSZ(ctx, endpoint, headers, data any) *gomock.Call {
|
func (mr *MockHandlerMockRecorder) PostSSZ(ctx, endpoint, headers, data any) *gomock.Call {
|
||||||
mr.mock.ctrl.T.Helper()
|
mr.mock.ctrl.T.Helper()
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PostSSZ", reflect.TypeOf((*MockRestHandler)(nil).PostSSZ), ctx, endpoint, headers, data)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PostSSZ", reflect.TypeOf((*MockHandler)(nil).PostSSZ), ctx, endpoint, headers, data)
|
||||||
}
|
|
||||||
|
|
||||||
// SwitchHost mocks base method.
|
|
||||||
func (m *MockRestHandler) SwitchHost(host string) {
|
|
||||||
m.ctrl.T.Helper()
|
|
||||||
m.ctrl.Call(m, "SwitchHost", host)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SwitchHost indicates an expected call of SwitchHost.
|
|
||||||
func (mr *MockRestHandlerMockRecorder) SwitchHost(host any) *gomock.Call {
|
|
||||||
mr.mock.ctrl.T.Helper()
|
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SwitchHost", reflect.TypeOf((*MockRestHandler)(nil).SwitchHost), host)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,5 +26,5 @@ func (c *beaconApiValidatorClient) prepareBeaconProposer(ctx context.Context, re
|
|||||||
return errors.Wrap(err, "failed to marshal recipients")
|
return errors.Wrap(err, "failed to marshal recipients")
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.jsonRestHandler.Post(ctx, "/eth/v1/validator/prepare_beacon_proposer", nil, bytes.NewBuffer(marshalledJsonRecipients), nil)
|
return c.handler.Post(ctx, "/eth/v1/validator/prepare_beacon_proposer", nil, bytes.NewBuffer(marshalledJsonRecipients), nil)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ func TestPrepareBeaconProposer_Valid(t *testing.T) {
|
|||||||
marshalledJsonRecipients, err := json.Marshal(jsonRecipients)
|
marshalledJsonRecipients, err := json.Marshal(jsonRecipients)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
prepareBeaconProposerTestEndpoint,
|
prepareBeaconProposerTestEndpoint,
|
||||||
nil,
|
nil,
|
||||||
@@ -78,7 +78,7 @@ func TestPrepareBeaconProposer_Valid(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
err = validatorClient.prepareBeaconProposer(ctx, protoRecipients)
|
err = validatorClient.prepareBeaconProposer(ctx, protoRecipients)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
@@ -89,8 +89,8 @@ func TestPrepareBeaconProposer_BadRequest(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
prepareBeaconProposerTestEndpoint,
|
prepareBeaconProposerTestEndpoint,
|
||||||
nil,
|
nil,
|
||||||
@@ -100,7 +100,7 @@ func TestPrepareBeaconProposer_BadRequest(t *testing.T) {
|
|||||||
errors.New("foo error"),
|
errors.New("foo error"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
err := validatorClient.prepareBeaconProposer(ctx, nil)
|
err := validatorClient.prepareBeaconProposer(ctx, nil)
|
||||||
assert.ErrorContains(t, "foo error", err)
|
assert.ErrorContains(t, "foo error", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ func (c *beaconApiValidatorClient) proposeAttestation(ctx context.Context, attes
|
|||||||
}
|
}
|
||||||
|
|
||||||
headers := map[string]string{"Eth-Consensus-Version": version.String(attestation.Version())}
|
headers := map[string]string{"Eth-Consensus-Version": version.String(attestation.Version())}
|
||||||
err = c.jsonRestHandler.Post(
|
err = c.handler.Post(
|
||||||
ctx,
|
ctx,
|
||||||
"/eth/v2/beacon/pool/attestations",
|
"/eth/v2/beacon/pool/attestations",
|
||||||
headers,
|
headers,
|
||||||
@@ -51,7 +51,7 @@ func (c *beaconApiValidatorClient) proposeAttestationElectra(ctx context.Context
|
|||||||
}
|
}
|
||||||
consensusVersion := version.String(slots.ToForkVersion(attestation.Data.Slot))
|
consensusVersion := version.String(slots.ToForkVersion(attestation.Data.Slot))
|
||||||
headers := map[string]string{"Eth-Consensus-Version": consensusVersion}
|
headers := map[string]string{"Eth-Consensus-Version": consensusVersion}
|
||||||
if err = c.jsonRestHandler.Post(
|
if err = c.handler.Post(
|
||||||
ctx,
|
ctx,
|
||||||
"/eth/v2/beacon/pool/attestations",
|
"/eth/v2/beacon/pool/attestations",
|
||||||
headers,
|
headers,
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ func TestProposeAttestation(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
var marshalledAttestations []byte
|
var marshalledAttestations []byte
|
||||||
if helpers.ValidateNilAttestation(test.attestation) == nil {
|
if helpers.ValidateNilAttestation(test.attestation) == nil {
|
||||||
@@ -119,7 +119,7 @@ func TestProposeAttestation(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
headers := map[string]string{"Eth-Consensus-Version": version.String(test.attestation.Version())}
|
headers := map[string]string{"Eth-Consensus-Version": version.String(test.attestation.Version())}
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/pool/attestations",
|
"/eth/v2/beacon/pool/attestations",
|
||||||
headers,
|
headers,
|
||||||
@@ -129,7 +129,7 @@ func TestProposeAttestation(t *testing.T) {
|
|||||||
test.endpointError,
|
test.endpointError,
|
||||||
).Times(test.endpointCall)
|
).Times(test.endpointCall)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
proposeResponse, err := validatorClient.proposeAttestation(ctx, test.attestation)
|
proposeResponse, err := validatorClient.proposeAttestation(ctx, test.attestation)
|
||||||
if test.expectedErrorMessage != "" {
|
if test.expectedErrorMessage != "" {
|
||||||
require.ErrorContains(t, test.expectedErrorMessage, err)
|
require.ErrorContains(t, test.expectedErrorMessage, err)
|
||||||
@@ -254,7 +254,7 @@ func TestProposeAttestationElectra(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
var marshalledAttestations []byte
|
var marshalledAttestations []byte
|
||||||
if helpers.ValidateNilAttestation(test.attestation) == nil {
|
if helpers.ValidateNilAttestation(test.attestation) == nil {
|
||||||
@@ -268,7 +268,7 @@ func TestProposeAttestationElectra(t *testing.T) {
|
|||||||
if test.expectedConsensusVersion != "" {
|
if test.expectedConsensusVersion != "" {
|
||||||
headerMatcher = gomock.Eq(map[string]string{"Eth-Consensus-Version": test.expectedConsensusVersion})
|
headerMatcher = gomock.Eq(map[string]string{"Eth-Consensus-Version": test.expectedConsensusVersion})
|
||||||
}
|
}
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/pool/attestations",
|
"/eth/v2/beacon/pool/attestations",
|
||||||
headerMatcher,
|
headerMatcher,
|
||||||
@@ -278,7 +278,7 @@ func TestProposeAttestationElectra(t *testing.T) {
|
|||||||
test.endpointError,
|
test.endpointError,
|
||||||
).Times(test.endpointCall)
|
).Times(test.endpointCall)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
proposeResponse, err := validatorClient.proposeAttestationElectra(ctx, test.attestation)
|
proposeResponse, err := validatorClient.proposeAttestationElectra(ctx, test.attestation)
|
||||||
if test.expectedErrorMessage != "" {
|
if test.expectedErrorMessage != "" {
|
||||||
require.ErrorContains(t, test.expectedErrorMessage, err)
|
require.ErrorContains(t, test.expectedErrorMessage, err)
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ func (c *beaconApiValidatorClient) proposeBeaconBlock(ctx context.Context, in *e
|
|||||||
|
|
||||||
// Try PostSSZ first with SSZ data
|
// Try PostSSZ first with SSZ data
|
||||||
if res.marshalledSSZ != nil {
|
if res.marshalledSSZ != nil {
|
||||||
_, _, err = c.jsonRestHandler.PostSSZ(ctx, endpoint, headers, bytes.NewBuffer(res.marshalledSSZ))
|
_, _, err = c.handler.PostSSZ(ctx, endpoint, headers, bytes.NewBuffer(res.marshalledSSZ))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errJson := &httputil.DefaultJsonError{}
|
errJson := &httputil.DefaultJsonError{}
|
||||||
// If PostSSZ fails with 406 (Not Acceptable), fall back to JSON
|
// If PostSSZ fails with 406 (Not Acceptable), fall back to JSON
|
||||||
@@ -81,7 +81,7 @@ func (c *beaconApiValidatorClient) proposeBeaconBlock(ctx context.Context, in *e
|
|||||||
return nil, errors.Wrap(jsonErr, "failed to marshal JSON")
|
return nil, errors.Wrap(jsonErr, "failed to marshal JSON")
|
||||||
}
|
}
|
||||||
// Reset headers for JSON
|
// Reset headers for JSON
|
||||||
err = c.jsonRestHandler.Post(ctx, endpoint, headers, bytes.NewBuffer(jsonData), nil)
|
err = c.handler.Post(ctx, endpoint, headers, bytes.NewBuffer(jsonData), nil)
|
||||||
// If JSON also fails, return that error
|
// If JSON also fails, return that error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to submit block via JSON fallback")
|
return nil, errors.Wrap(err, "failed to submit block via JSON fallback")
|
||||||
@@ -100,7 +100,7 @@ func (c *beaconApiValidatorClient) proposeBeaconBlock(ctx context.Context, in *e
|
|||||||
return nil, errors.Wrap(jsonErr, "failed to marshal JSON")
|
return nil, errors.Wrap(jsonErr, "failed to marshal JSON")
|
||||||
}
|
}
|
||||||
// Reset headers for JSON
|
// Reset headers for JSON
|
||||||
err = c.jsonRestHandler.Post(ctx, endpoint, headers, bytes.NewBuffer(jsonData), nil)
|
err = c.handler.Post(ctx, endpoint, headers, bytes.NewBuffer(jsonData), nil)
|
||||||
errJson := &httputil.DefaultJsonError{}
|
errJson := &httputil.DefaultJsonError{}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !errors.As(err, &errJson) {
|
if !errors.As(err, &errJson) {
|
||||||
|
|||||||
@@ -103,13 +103,13 @@ func TestProposeBeaconBlock_SSZ_Error(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
// Expect PostSSZ to be called first with SSZ data
|
// Expect PostSSZ to be called first with SSZ data
|
||||||
headers := map[string]string{
|
headers := map[string]string{
|
||||||
"Eth-Consensus-Version": testCase.consensusVersion,
|
"Eth-Consensus-Version": testCase.consensusVersion,
|
||||||
}
|
}
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
testCase.endpoint,
|
testCase.endpoint,
|
||||||
headers,
|
headers,
|
||||||
@@ -120,7 +120,7 @@ func TestProposeBeaconBlock_SSZ_Error(t *testing.T) {
|
|||||||
|
|
||||||
// No JSON fallback expected for non-406 errors
|
// No JSON fallback expected for non-406 errors
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.proposeBeaconBlock(ctx, testCase.block)
|
_, err := validatorClient.proposeBeaconBlock(ctx, testCase.block)
|
||||||
assert.ErrorContains(t, testSuite.expectedErrorMessage, err)
|
assert.ErrorContains(t, testSuite.expectedErrorMessage, err)
|
||||||
})
|
})
|
||||||
@@ -165,13 +165,13 @@ func TestProposeBeaconBlock_SSZSuccess_NoFallback(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
// Expect PostSSZ to be called and succeed
|
// Expect PostSSZ to be called and succeed
|
||||||
headers := map[string]string{
|
headers := map[string]string{
|
||||||
"Eth-Consensus-Version": testCase.consensusVersion,
|
"Eth-Consensus-Version": testCase.consensusVersion,
|
||||||
}
|
}
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
testCase.endpoint,
|
testCase.endpoint,
|
||||||
headers,
|
headers,
|
||||||
@@ -181,7 +181,7 @@ func TestProposeBeaconBlock_SSZSuccess_NoFallback(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
// Post should NOT be called when PostSSZ succeeds
|
// Post should NOT be called when PostSSZ succeeds
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -189,7 +189,7 @@ func TestProposeBeaconBlock_SSZSuccess_NoFallback(t *testing.T) {
|
|||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
).Times(0)
|
).Times(0)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.proposeBeaconBlock(ctx, testCase.block)
|
_, err := validatorClient.proposeBeaconBlock(ctx, testCase.block)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
})
|
})
|
||||||
@@ -200,7 +200,7 @@ func TestProposeBeaconBlock_NewerTypes_SSZMarshal(t *testing.T) {
|
|||||||
t.Run("deneb", func(t *testing.T) {
|
t.Run("deneb", func(t *testing.T) {
|
||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
var blockContents structs.SignedBeaconBlockContentsDeneb
|
var blockContents structs.SignedBeaconBlockContentsDeneb
|
||||||
err := json.Unmarshal([]byte(rpctesting.DenebBlockContents), &blockContents)
|
err := json.Unmarshal([]byte(rpctesting.DenebBlockContents), &blockContents)
|
||||||
@@ -211,14 +211,14 @@ func TestProposeBeaconBlock_NewerTypes_SSZMarshal(t *testing.T) {
|
|||||||
denebBytes, err := genericSignedBlock.GetDeneb().MarshalSSZ()
|
denebBytes, err := genericSignedBlock.GetDeneb().MarshalSSZ()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks",
|
"/eth/v2/beacon/blocks",
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
bytes.NewBuffer(denebBytes),
|
bytes.NewBuffer(denebBytes),
|
||||||
)
|
)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
proposeResponse, err := validatorClient.proposeBeaconBlock(t.Context(), genericSignedBlock)
|
proposeResponse, err := validatorClient.proposeBeaconBlock(t.Context(), genericSignedBlock)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
require.NotNil(t, proposeResponse)
|
require.NotNil(t, proposeResponse)
|
||||||
@@ -231,7 +231,7 @@ func TestProposeBeaconBlock_NewerTypes_SSZMarshal(t *testing.T) {
|
|||||||
t.Run("blinded_deneb", func(t *testing.T) {
|
t.Run("blinded_deneb", func(t *testing.T) {
|
||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
var blindedBlock structs.SignedBlindedBeaconBlockDeneb
|
var blindedBlock structs.SignedBlindedBeaconBlockDeneb
|
||||||
err := json.Unmarshal([]byte(rpctesting.BlindedDenebBlock), &blindedBlock)
|
err := json.Unmarshal([]byte(rpctesting.BlindedDenebBlock), &blindedBlock)
|
||||||
@@ -242,14 +242,14 @@ func TestProposeBeaconBlock_NewerTypes_SSZMarshal(t *testing.T) {
|
|||||||
blindedDenebBytes, err := genericSignedBlock.GetBlindedDeneb().MarshalSSZ()
|
blindedDenebBytes, err := genericSignedBlock.GetBlindedDeneb().MarshalSSZ()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blinded_blocks",
|
"/eth/v2/beacon/blinded_blocks",
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
bytes.NewBuffer(blindedDenebBytes),
|
bytes.NewBuffer(blindedDenebBytes),
|
||||||
)
|
)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
proposeResponse, err := validatorClient.proposeBeaconBlock(t.Context(), genericSignedBlock)
|
proposeResponse, err := validatorClient.proposeBeaconBlock(t.Context(), genericSignedBlock)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
require.NotNil(t, proposeResponse)
|
require.NotNil(t, proposeResponse)
|
||||||
@@ -262,7 +262,7 @@ func TestProposeBeaconBlock_NewerTypes_SSZMarshal(t *testing.T) {
|
|||||||
t.Run("electra", func(t *testing.T) {
|
t.Run("electra", func(t *testing.T) {
|
||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
var blockContents structs.SignedBeaconBlockContentsElectra
|
var blockContents structs.SignedBeaconBlockContentsElectra
|
||||||
err := json.Unmarshal([]byte(rpctesting.ElectraBlockContents), &blockContents)
|
err := json.Unmarshal([]byte(rpctesting.ElectraBlockContents), &blockContents)
|
||||||
@@ -273,14 +273,14 @@ func TestProposeBeaconBlock_NewerTypes_SSZMarshal(t *testing.T) {
|
|||||||
electraBytes, err := genericSignedBlock.GetElectra().MarshalSSZ()
|
electraBytes, err := genericSignedBlock.GetElectra().MarshalSSZ()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks",
|
"/eth/v2/beacon/blocks",
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
bytes.NewBuffer(electraBytes),
|
bytes.NewBuffer(electraBytes),
|
||||||
)
|
)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
proposeResponse, err := validatorClient.proposeBeaconBlock(t.Context(), genericSignedBlock)
|
proposeResponse, err := validatorClient.proposeBeaconBlock(t.Context(), genericSignedBlock)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
require.NotNil(t, proposeResponse)
|
require.NotNil(t, proposeResponse)
|
||||||
@@ -293,7 +293,7 @@ func TestProposeBeaconBlock_NewerTypes_SSZMarshal(t *testing.T) {
|
|||||||
t.Run("blinded_electra", func(t *testing.T) {
|
t.Run("blinded_electra", func(t *testing.T) {
|
||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
var blindedBlock structs.SignedBlindedBeaconBlockElectra
|
var blindedBlock structs.SignedBlindedBeaconBlockElectra
|
||||||
err := json.Unmarshal([]byte(rpctesting.BlindedElectraBlock), &blindedBlock)
|
err := json.Unmarshal([]byte(rpctesting.BlindedElectraBlock), &blindedBlock)
|
||||||
@@ -304,14 +304,14 @@ func TestProposeBeaconBlock_NewerTypes_SSZMarshal(t *testing.T) {
|
|||||||
blindedElectraBytes, err := genericSignedBlock.GetBlindedElectra().MarshalSSZ()
|
blindedElectraBytes, err := genericSignedBlock.GetBlindedElectra().MarshalSSZ()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blinded_blocks",
|
"/eth/v2/beacon/blinded_blocks",
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
bytes.NewBuffer(blindedElectraBytes),
|
bytes.NewBuffer(blindedElectraBytes),
|
||||||
)
|
)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
proposeResponse, err := validatorClient.proposeBeaconBlock(t.Context(), genericSignedBlock)
|
proposeResponse, err := validatorClient.proposeBeaconBlock(t.Context(), genericSignedBlock)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
require.NotNil(t, proposeResponse)
|
require.NotNil(t, proposeResponse)
|
||||||
@@ -324,7 +324,7 @@ func TestProposeBeaconBlock_NewerTypes_SSZMarshal(t *testing.T) {
|
|||||||
t.Run("fulu", func(t *testing.T) {
|
t.Run("fulu", func(t *testing.T) {
|
||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
var blockContents structs.SignedBeaconBlockContentsFulu
|
var blockContents structs.SignedBeaconBlockContentsFulu
|
||||||
err := json.Unmarshal([]byte(rpctesting.FuluBlockContents), &blockContents)
|
err := json.Unmarshal([]byte(rpctesting.FuluBlockContents), &blockContents)
|
||||||
@@ -335,14 +335,14 @@ func TestProposeBeaconBlock_NewerTypes_SSZMarshal(t *testing.T) {
|
|||||||
fuluBytes, err := genericSignedBlock.GetFulu().MarshalSSZ()
|
fuluBytes, err := genericSignedBlock.GetFulu().MarshalSSZ()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks",
|
"/eth/v2/beacon/blocks",
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
bytes.NewBuffer(fuluBytes),
|
bytes.NewBuffer(fuluBytes),
|
||||||
)
|
)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
proposeResponse, err := validatorClient.proposeBeaconBlock(t.Context(), genericSignedBlock)
|
proposeResponse, err := validatorClient.proposeBeaconBlock(t.Context(), genericSignedBlock)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
require.NotNil(t, proposeResponse)
|
require.NotNil(t, proposeResponse)
|
||||||
@@ -355,7 +355,7 @@ func TestProposeBeaconBlock_NewerTypes_SSZMarshal(t *testing.T) {
|
|||||||
t.Run("blinded_fulu", func(t *testing.T) {
|
t.Run("blinded_fulu", func(t *testing.T) {
|
||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
var blindedBlock structs.SignedBlindedBeaconBlockFulu
|
var blindedBlock structs.SignedBlindedBeaconBlockFulu
|
||||||
err := json.Unmarshal([]byte(rpctesting.BlindedFuluBlock), &blindedBlock)
|
err := json.Unmarshal([]byte(rpctesting.BlindedFuluBlock), &blindedBlock)
|
||||||
@@ -366,14 +366,14 @@ func TestProposeBeaconBlock_NewerTypes_SSZMarshal(t *testing.T) {
|
|||||||
blindedFuluBytes, err := genericSignedBlock.GetBlindedFulu().MarshalSSZ()
|
blindedFuluBytes, err := genericSignedBlock.GetBlindedFulu().MarshalSSZ()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blinded_blocks",
|
"/eth/v2/beacon/blinded_blocks",
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
bytes.NewBuffer(blindedFuluBytes),
|
bytes.NewBuffer(blindedFuluBytes),
|
||||||
)
|
)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
proposeResponse, err := validatorClient.proposeBeaconBlock(t.Context(), genericSignedBlock)
|
proposeResponse, err := validatorClient.proposeBeaconBlock(t.Context(), genericSignedBlock)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
require.NotNil(t, proposeResponse)
|
require.NotNil(t, proposeResponse)
|
||||||
@@ -588,10 +588,10 @@ func TestProposeBeaconBlock_SSZFails_406_FallbackToJSON(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
// Expect PostSSZ to be called first and fail
|
// Expect PostSSZ to be called first and fail
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
testCase.endpoint,
|
testCase.endpoint,
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -603,7 +603,7 @@ func TestProposeBeaconBlock_SSZFails_406_FallbackToJSON(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
testCase.endpoint,
|
testCase.endpoint,
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -613,7 +613,7 @@ func TestProposeBeaconBlock_SSZFails_406_FallbackToJSON(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.proposeBeaconBlock(ctx, testCase.block)
|
_, err := validatorClient.proposeBeaconBlock(ctx, testCase.block)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
})
|
})
|
||||||
@@ -643,13 +643,13 @@ func TestProposeBeaconBlock_SSZFails_Non406_NoFallback(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
// Expect PostSSZ to be called first and fail with non-406 error
|
// Expect PostSSZ to be called first and fail with non-406 error
|
||||||
sszHeaders := map[string]string{
|
sszHeaders := map[string]string{
|
||||||
"Eth-Consensus-Version": testCase.consensusVersion,
|
"Eth-Consensus-Version": testCase.consensusVersion,
|
||||||
}
|
}
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
testCase.endpoint,
|
testCase.endpoint,
|
||||||
sszHeaders,
|
sszHeaders,
|
||||||
@@ -662,7 +662,7 @@ func TestProposeBeaconBlock_SSZFails_Non406_NoFallback(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
// Post should NOT be called for non-406 errors
|
// Post should NOT be called for non-406 errors
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -670,7 +670,7 @@ func TestProposeBeaconBlock_SSZFails_Non406_NoFallback(t *testing.T) {
|
|||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
).Times(0)
|
).Times(0)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.proposeBeaconBlock(ctx, testCase.block)
|
_, err := validatorClient.proposeBeaconBlock(ctx, testCase.block)
|
||||||
require.ErrorContains(t, "Internal server error", err)
|
require.ErrorContains(t, "Internal server error", err)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ func (c *beaconApiValidatorClient) proposeExit(ctx context.Context, signedVolunt
|
|||||||
return nil, errors.Wrap(err, "failed to marshal signed voluntary exit")
|
return nil, errors.Wrap(err, "failed to marshal signed voluntary exit")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = c.jsonRestHandler.Post(
|
if err = c.handler.Post(
|
||||||
ctx,
|
ctx,
|
||||||
"/eth/v1/beacon/pool/voluntary_exits",
|
"/eth/v1/beacon/pool/voluntary_exits",
|
||||||
nil,
|
nil,
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ func TestProposeExit_Valid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
proposeExitTestEndpoint,
|
proposeExitTestEndpoint,
|
||||||
nil,
|
nil,
|
||||||
@@ -61,7 +61,7 @@ func TestProposeExit_Valid(t *testing.T) {
|
|||||||
expectedExitRoot, err := protoSignedVoluntaryExit.Exit.HashTreeRoot()
|
expectedExitRoot, err := protoSignedVoluntaryExit.Exit.HashTreeRoot()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
exitResponse, err := validatorClient.proposeExit(ctx, protoSignedVoluntaryExit)
|
exitResponse, err := validatorClient.proposeExit(ctx, protoSignedVoluntaryExit)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.DeepEqual(t, expectedExitRoot[:], exitResponse.ExitRoot)
|
assert.DeepEqual(t, expectedExitRoot[:], exitResponse.ExitRoot)
|
||||||
@@ -85,8 +85,8 @@ func TestProposeExit_BadRequest(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
proposeExitTestEndpoint,
|
proposeExitTestEndpoint,
|
||||||
nil,
|
nil,
|
||||||
@@ -104,7 +104,7 @@ func TestProposeExit_BadRequest(t *testing.T) {
|
|||||||
Signature: []byte{3},
|
Signature: []byte{3},
|
||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.proposeExit(ctx, protoSignedVoluntaryExit)
|
_, err := validatorClient.proposeExit(ctx, protoSignedVoluntaryExit)
|
||||||
assert.ErrorContains(t, "foo error", err)
|
assert.ErrorContains(t, "foo error", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,16 +19,16 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewPrysmChainClient returns implementation of iface.PrysmChainClient.
|
// NewPrysmChainClient returns implementation of iface.PrysmChainClient.
|
||||||
func NewPrysmChainClient(jsonRestHandler rest.RestHandler, nodeClient iface.NodeClient) iface.PrysmChainClient {
|
func NewPrysmChainClient(handler rest.Handler, nodeClient iface.NodeClient) iface.PrysmChainClient {
|
||||||
return prysmChainClient{
|
return prysmChainClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
nodeClient: nodeClient,
|
nodeClient: nodeClient,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type prysmChainClient struct {
|
type prysmChainClient struct {
|
||||||
jsonRestHandler rest.RestHandler
|
handler rest.Handler
|
||||||
nodeClient iface.NodeClient
|
nodeClient iface.NodeClient
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c prysmChainClient) ValidatorCount(ctx context.Context, stateID string, statuses []validator2.Status) ([]iface.ValidatorCount, error) {
|
func (c prysmChainClient) ValidatorCount(ctx context.Context, stateID string, statuses []validator2.Status) ([]iface.ValidatorCount, error) {
|
||||||
@@ -50,7 +50,7 @@ func (c prysmChainClient) ValidatorCount(ctx context.Context, stateID string, st
|
|||||||
queryUrl := apiutil.BuildURL(fmt.Sprintf("/eth/v1/beacon/states/%s/validator_count", stateID), queryParams)
|
queryUrl := apiutil.BuildURL(fmt.Sprintf("/eth/v1/beacon/states/%s/validator_count", stateID), queryParams)
|
||||||
|
|
||||||
var validatorCountResponse structs.GetValidatorCountResponse
|
var validatorCountResponse structs.GetValidatorCountResponse
|
||||||
if err = c.jsonRestHandler.Get(ctx, queryUrl, &validatorCountResponse); err != nil {
|
if err = c.handler.Get(ctx, queryUrl, &validatorCountResponse); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,7 +97,7 @@ func (c prysmChainClient) ValidatorPerformance(ctx context.Context, in *ethpb.Va
|
|||||||
return nil, errors.Wrap(err, "failed to marshal request")
|
return nil, errors.Wrap(err, "failed to marshal request")
|
||||||
}
|
}
|
||||||
resp := &structs.GetValidatorPerformanceResponse{}
|
resp := &structs.GetValidatorPerformanceResponse{}
|
||||||
if err = c.jsonRestHandler.Post(ctx, "/prysm/validators/performance", nil, bytes.NewBuffer(request), resp); err != nil {
|
if err = c.handler.Post(ctx, "/prysm/validators/performance", nil, bytes.NewBuffer(request), resp); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -116,11 +116,11 @@ func TestGetValidatorCount(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
// Expect node version endpoint call.
|
// Expect node version endpoint call.
|
||||||
var nodeVersionResponse structs.GetVersionResponse
|
var nodeVersionResponse structs.GetVersionResponse
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/node/version",
|
"/eth/v1/node/version",
|
||||||
&nodeVersionResponse,
|
&nodeVersionResponse,
|
||||||
@@ -132,7 +132,7 @@ func TestGetValidatorCount(t *testing.T) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
var validatorCountResponse structs.GetValidatorCountResponse
|
var validatorCountResponse structs.GetValidatorCountResponse
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/states/head/validator_count?status=active",
|
"/eth/v1/beacon/states/head/validator_count?status=active",
|
||||||
&validatorCountResponse,
|
&validatorCountResponse,
|
||||||
@@ -145,8 +145,8 @@ func TestGetValidatorCount(t *testing.T) {
|
|||||||
|
|
||||||
// Type assertion.
|
// Type assertion.
|
||||||
var client iface.PrysmChainClient = &prysmChainClient{
|
var client iface.PrysmChainClient = &prysmChainClient{
|
||||||
nodeClient: &beaconApiNodeClient{jsonRestHandler: jsonRestHandler},
|
nodeClient: &beaconApiNodeClient{handler: handler},
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
|
|
||||||
countResponse, err := client.ValidatorCount(ctx, "head", []validator.Status{validator.Active})
|
countResponse, err := client.ValidatorCount(ctx, "head", []validator.Status{validator.Active})
|
||||||
@@ -177,10 +177,10 @@ func Test_beaconApiBeaconChainClient_GetValidatorPerformance(t *testing.T) {
|
|||||||
PublicKeys: [][]byte{publicKeys[0][:], publicKeys[2][:], publicKeys[1][:]},
|
PublicKeys: [][]byte{publicKeys[0][:], publicKeys[2][:], publicKeys[1][:]},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
// Expect node version endpoint call.
|
// Expect node version endpoint call.
|
||||||
var nodeVersionResponse structs.GetVersionResponse
|
var nodeVersionResponse structs.GetVersionResponse
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/node/version",
|
"/eth/v1/node/version",
|
||||||
&nodeVersionResponse,
|
&nodeVersionResponse,
|
||||||
@@ -196,7 +196,7 @@ func Test_beaconApiBeaconChainClient_GetValidatorPerformance(t *testing.T) {
|
|||||||
wantResponse := &structs.GetValidatorPerformanceResponse{}
|
wantResponse := &structs.GetValidatorPerformanceResponse{}
|
||||||
want := ðpb.ValidatorPerformanceResponse{}
|
want := ðpb.ValidatorPerformanceResponse{}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/prysm/validators/performance",
|
"/prysm/validators/performance",
|
||||||
nil,
|
nil,
|
||||||
@@ -207,8 +207,8 @@ func Test_beaconApiBeaconChainClient_GetValidatorPerformance(t *testing.T) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
var client iface.PrysmChainClient = &prysmChainClient{
|
var client iface.PrysmChainClient = &prysmChainClient{
|
||||||
nodeClient: &beaconApiNodeClient{jsonRestHandler: jsonRestHandler},
|
nodeClient: &beaconApiNodeClient{handler: handler},
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
|
|
||||||
got, err := client.ValidatorPerformance(ctx, ðpb.ValidatorPerformanceRequest{
|
got, err := client.ValidatorPerformance(ctx, ðpb.ValidatorPerformanceRequest{
|
||||||
|
|||||||
@@ -24,5 +24,5 @@ func (c *beaconApiValidatorClient) submitValidatorRegistrations(ctx context.Cont
|
|||||||
return errors.Wrap(err, "failed to marshal registration")
|
return errors.Wrap(err, "failed to marshal registration")
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.jsonRestHandler.Post(ctx, endpoint, nil, bytes.NewBuffer(marshalledJsonRegistration), nil)
|
return c.handler.Post(ctx, endpoint, nil, bytes.NewBuffer(marshalledJsonRegistration), nil)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,8 +65,8 @@ func TestRegistration_Valid(t *testing.T) {
|
|||||||
marshalledJsonRegistrations, err := json.Marshal(jsonRegistrations)
|
marshalledJsonRegistrations, err := json.Marshal(jsonRegistrations)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/validator/register_validator",
|
"/eth/v1/validator/register_validator",
|
||||||
nil,
|
nil,
|
||||||
@@ -129,7 +129,7 @@ func TestRegistration_Valid(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
res, err := validatorClient.SubmitValidatorRegistrations(t.Context(), &protoRegistrations)
|
res, err := validatorClient.SubmitValidatorRegistrations(t.Context(), &protoRegistrations)
|
||||||
|
|
||||||
assert.DeepEqual(t, new(empty.Empty), res)
|
assert.DeepEqual(t, new(empty.Empty), res)
|
||||||
@@ -140,8 +140,8 @@ func TestRegistration_BadRequest(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/validator/register_validator",
|
"/eth/v1/validator/register_validator",
|
||||||
nil,
|
nil,
|
||||||
@@ -151,7 +151,7 @@ func TestRegistration_BadRequest(t *testing.T) {
|
|||||||
errors.New("foo error"),
|
errors.New("foo error"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.SubmitValidatorRegistrations(t.Context(), ðpb.SignedValidatorRegistrationsV1{})
|
_, err := validatorClient.SubmitValidatorRegistrations(t.Context(), ðpb.SignedValidatorRegistrationsV1{})
|
||||||
assert.ErrorContains(t, "foo error", err)
|
assert.ErrorContains(t, "foo error", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,9 +44,9 @@ func TestGet(t *testing.T) {
|
|||||||
server := httptest.NewServer(mux)
|
server := httptest.NewServer(mux)
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
|
||||||
jsonRestHandler := rest.NewRestHandler(http.Client{Timeout: time.Second * 5}, server.URL)
|
handler := rest.NewHandler(http.Client{Timeout: time.Second * 5}, server.URL)
|
||||||
resp := &structs.GetGenesisResponse{}
|
resp := &structs.GetGenesisResponse{}
|
||||||
require.NoError(t, jsonRestHandler.Get(ctx, endpoint+"?arg1=abc&arg2=def", resp))
|
require.NoError(t, handler.Get(ctx, endpoint+"?arg1=abc&arg2=def", resp))
|
||||||
assert.DeepEqual(t, genesisJson, resp)
|
assert.DeepEqual(t, genesisJson, resp)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,9 +75,9 @@ func TestGetSSZ(t *testing.T) {
|
|||||||
server := httptest.NewServer(mux)
|
server := httptest.NewServer(mux)
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
|
||||||
jsonRestHandler := rest.NewRestHandler(http.Client{Timeout: time.Second * 5}, server.URL)
|
handler := rest.NewHandler(http.Client{Timeout: time.Second * 5}, server.URL)
|
||||||
|
|
||||||
body, header, err := jsonRestHandler.GetSSZ(ctx, endpoint)
|
body, header, err := handler.GetSSZ(ctx, endpoint)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.DeepEqual(t, expectedBody, body)
|
assert.DeepEqual(t, expectedBody, body)
|
||||||
require.StringContains(t, api.OctetStreamMediaType, header.Get("Content-Type"))
|
require.StringContains(t, api.OctetStreamMediaType, header.Get("Content-Type"))
|
||||||
@@ -101,9 +101,9 @@ func TestGetSSZ(t *testing.T) {
|
|||||||
server := httptest.NewServer(mux)
|
server := httptest.NewServer(mux)
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
|
||||||
jsonRestHandler := rest.NewRestHandler(http.Client{Timeout: time.Second * 5}, server.URL)
|
handler := rest.NewHandler(http.Client{Timeout: time.Second * 5}, server.URL)
|
||||||
|
|
||||||
body, header, err := jsonRestHandler.GetSSZ(ctx, endpoint)
|
body, header, err := handler.GetSSZ(ctx, endpoint)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.LogsContain(t, logHook, "Server responded with non primary accept type")
|
assert.LogsContain(t, logHook, "Server responded with non primary accept type")
|
||||||
require.Equal(t, api.JsonMediaType, header.Get("Content-Type"))
|
require.Equal(t, api.JsonMediaType, header.Get("Content-Type"))
|
||||||
@@ -126,9 +126,9 @@ func TestGetSSZ(t *testing.T) {
|
|||||||
server := httptest.NewServer(mux)
|
server := httptest.NewServer(mux)
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
|
||||||
jsonRestHandler := rest.NewRestHandler(http.Client{Timeout: time.Second * 5}, server.URL)
|
handler := rest.NewHandler(http.Client{Timeout: time.Second * 5}, server.URL)
|
||||||
|
|
||||||
_, _, err := jsonRestHandler.GetSSZ(ctx, endpoint)
|
_, _, err := handler.GetSSZ(ctx, endpoint)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.LogsContain(t, logHook, "Server responded with non primary accept type")
|
assert.LogsContain(t, logHook, "Server responded with non primary accept type")
|
||||||
})
|
})
|
||||||
@@ -148,7 +148,7 @@ func TestAcceptOverrideSSZ(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}))
|
}))
|
||||||
defer srv.Close()
|
defer srv.Close()
|
||||||
c := rest.NewRestHandler(http.Client{Timeout: time.Second * 5}, srv.URL)
|
c := rest.NewHandler(http.Client{Timeout: time.Second * 5}, srv.URL)
|
||||||
_, _, err := c.GetSSZ(t.Context(), "/test")
|
_, _, err := c.GetSSZ(t.Context(), "/test")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
@@ -191,9 +191,9 @@ func TestPost(t *testing.T) {
|
|||||||
server := httptest.NewServer(mux)
|
server := httptest.NewServer(mux)
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
|
||||||
jsonRestHandler := rest.NewRestHandler(http.Client{Timeout: time.Second * 5}, server.URL)
|
handler := rest.NewHandler(http.Client{Timeout: time.Second * 5}, server.URL)
|
||||||
resp := &structs.GetGenesisResponse{}
|
resp := &structs.GetGenesisResponse{}
|
||||||
require.NoError(t, jsonRestHandler.Post(ctx, endpoint, headers, bytes.NewBuffer(dataBytes), resp))
|
require.NoError(t, handler.Post(ctx, endpoint, headers, bytes.NewBuffer(dataBytes), resp))
|
||||||
assert.DeepEqual(t, genesisJson, resp)
|
assert.DeepEqual(t, genesisJson, resp)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -238,18 +238,18 @@ func TestGetStatusCode(t *testing.T) {
|
|||||||
server := httptest.NewServer(mux)
|
server := httptest.NewServer(mux)
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
|
||||||
jsonRestHandler := rest.NewRestHandler(http.Client{Timeout: time.Second * 5}, server.URL)
|
handler := rest.NewHandler(http.Client{Timeout: time.Second * 5}, server.URL)
|
||||||
|
|
||||||
statusCode, err := jsonRestHandler.GetStatusCode(ctx, endpoint)
|
statusCode, err := handler.GetStatusCode(ctx, endpoint)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Equal(t, tc.expectedStatusCode, statusCode)
|
assert.Equal(t, tc.expectedStatusCode, statusCode)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Run("returns error on connection failure", func(t *testing.T) {
|
t.Run("returns error on connection failure", func(t *testing.T) {
|
||||||
jsonRestHandler := rest.NewRestHandler(http.Client{Timeout: time.Millisecond * 100}, "http://localhost:99999")
|
handler := rest.NewHandler(http.Client{Timeout: time.Millisecond * 100}, "http://localhost:99999")
|
||||||
|
|
||||||
_, err := jsonRestHandler.GetStatusCode(ctx, endpoint)
|
_, err := handler.GetStatusCode(ctx, endpoint)
|
||||||
require.ErrorContains(t, "failed to perform request", err)
|
require.ErrorContains(t, "failed to perform request", err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ type StateValidatorsProvider interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type beaconApiStateValidatorsProvider struct {
|
type beaconApiStateValidatorsProvider struct {
|
||||||
jsonRestHandler rest.RestHandler
|
handler rest.Handler
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c beaconApiStateValidatorsProvider) StateValidators(
|
func (c beaconApiStateValidatorsProvider) StateValidators(
|
||||||
@@ -94,7 +94,7 @@ func (c beaconApiStateValidatorsProvider) getStateValidatorsHelper(
|
|||||||
}
|
}
|
||||||
stateValidatorsJson := &structs.GetValidatorsResponse{}
|
stateValidatorsJson := &structs.GetValidatorsResponse{}
|
||||||
// First try POST endpoint to check whether it is supported by the beacon node.
|
// First try POST endpoint to check whether it is supported by the beacon node.
|
||||||
if err = c.jsonRestHandler.Post(ctx, endpoint, nil, bytes.NewBuffer(reqBytes), stateValidatorsJson); err == nil {
|
if err = c.handler.Post(ctx, endpoint, nil, bytes.NewBuffer(reqBytes), stateValidatorsJson); err == nil {
|
||||||
if stateValidatorsJson.Data == nil {
|
if stateValidatorsJson.Data == nil {
|
||||||
return nil, errors.New("stateValidatorsJson.Data is nil")
|
return nil, errors.New("stateValidatorsJson.Data is nil")
|
||||||
}
|
}
|
||||||
@@ -116,7 +116,7 @@ func (c beaconApiStateValidatorsProvider) getStateValidatorsHelper(
|
|||||||
|
|
||||||
query := apiutil.BuildURL(endpoint, queryParams)
|
query := apiutil.BuildURL(endpoint, queryParams)
|
||||||
|
|
||||||
err = c.jsonRestHandler.Get(ctx, query, stateValidatorsJson)
|
err = c.handler.Get(ctx, query, stateValidatorsJson)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ func TestGetStateValidators_Nominal_POST(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
wanted := []*structs.ValidatorContainer{
|
wanted := []*structs.ValidatorContainer{
|
||||||
{
|
{
|
||||||
@@ -69,7 +69,7 @@ func TestGetStateValidators_Nominal_POST(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/states/head/validators",
|
"/eth/v1/beacon/states/head/validators",
|
||||||
nil,
|
nil,
|
||||||
@@ -84,7 +84,7 @@ func TestGetStateValidators_Nominal_POST(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
stateValidatorsProvider := beaconApiStateValidatorsProvider{jsonRestHandler: jsonRestHandler}
|
stateValidatorsProvider := beaconApiStateValidatorsProvider{handler: handler}
|
||||||
actual, err := stateValidatorsProvider.StateValidators(ctx, []string{
|
actual, err := stateValidatorsProvider.StateValidators(ctx, []string{
|
||||||
"0x8000091c2ae64ee414a54c1cc1fc67dec663408bc636cb86756e0200e41a75c8f86603f104f02c856983d2783116be13", // active_ongoing
|
"0x8000091c2ae64ee414a54c1cc1fc67dec663408bc636cb86756e0200e41a75c8f86603f104f02c856983d2783116be13", // active_ongoing
|
||||||
"0x80000e851c0f53c3246ff726d7ff7766661ca5e12a07c45c114d208d54f0f8233d4380b2e9aff759d69795d1df905526", // active_exiting
|
"0x80000e851c0f53c3246ff726d7ff7766661ca5e12a07c45c114d208d54f0f8233d4380b2e9aff759d69795d1df905526", // active_exiting
|
||||||
@@ -120,7 +120,7 @@ func TestGetStateValidators_Nominal_GET(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
wanted := []*structs.ValidatorContainer{
|
wanted := []*structs.ValidatorContainer{
|
||||||
{
|
{
|
||||||
@@ -156,7 +156,7 @@ func TestGetStateValidators_Nominal_GET(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
// First return an error from POST call.
|
// First return an error from POST call.
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/states/head/validators",
|
"/eth/v1/beacon/states/head/validators",
|
||||||
nil,
|
nil,
|
||||||
@@ -177,7 +177,7 @@ func TestGetStateValidators_Nominal_GET(t *testing.T) {
|
|||||||
|
|
||||||
query := apiutil.BuildURL("/eth/v1/beacon/states/head/validators", queryParams)
|
query := apiutil.BuildURL("/eth/v1/beacon/states/head/validators", queryParams)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
query,
|
query,
|
||||||
&stateValidatorsResponseJson,
|
&stateValidatorsResponseJson,
|
||||||
@@ -190,7 +190,7 @@ func TestGetStateValidators_Nominal_GET(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
stateValidatorsProvider := beaconApiStateValidatorsProvider{jsonRestHandler: jsonRestHandler}
|
stateValidatorsProvider := beaconApiStateValidatorsProvider{handler: handler}
|
||||||
actual, err := stateValidatorsProvider.StateValidators(ctx, []string{
|
actual, err := stateValidatorsProvider.StateValidators(ctx, []string{
|
||||||
"0x8000091c2ae64ee414a54c1cc1fc67dec663408bc636cb86756e0200e41a75c8f86603f104f02c856983d2783116be13", // active_ongoing
|
"0x8000091c2ae64ee414a54c1cc1fc67dec663408bc636cb86756e0200e41a75c8f86603f104f02c856983d2783116be13", // active_ongoing
|
||||||
"0x80000e851c0f53c3246ff726d7ff7766661ca5e12a07c45c114d208d54f0f8233d4380b2e9aff759d69795d1df905526", // active_exiting
|
"0x80000e851c0f53c3246ff726d7ff7766661ca5e12a07c45c114d208d54f0f8233d4380b2e9aff759d69795d1df905526", // active_exiting
|
||||||
@@ -220,12 +220,12 @@ func TestGetStateValidators_GetRestJsonResponseOnError(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
// First call POST.
|
// First call POST.
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/states/head/validators",
|
"/eth/v1/beacon/states/head/validators",
|
||||||
nil,
|
nil,
|
||||||
@@ -246,7 +246,7 @@ func TestGetStateValidators_GetRestJsonResponseOnError(t *testing.T) {
|
|||||||
|
|
||||||
query := apiutil.BuildURL("/eth/v1/beacon/states/head/validators", queryParams)
|
query := apiutil.BuildURL("/eth/v1/beacon/states/head/validators", queryParams)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
query,
|
query,
|
||||||
&stateValidatorsResponseJson,
|
&stateValidatorsResponseJson,
|
||||||
@@ -254,7 +254,7 @@ func TestGetStateValidators_GetRestJsonResponseOnError(t *testing.T) {
|
|||||||
errors.New("an error"),
|
errors.New("an error"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
stateValidatorsProvider := beaconApiStateValidatorsProvider{jsonRestHandler: jsonRestHandler}
|
stateValidatorsProvider := beaconApiStateValidatorsProvider{handler: handler}
|
||||||
_, err = stateValidatorsProvider.StateValidators(ctx, []string{
|
_, err = stateValidatorsProvider.StateValidators(ctx, []string{
|
||||||
"0x8000091c2ae64ee414a54c1cc1fc67dec663408bc636cb86756e0200e41a75c8f86603f104f02c856983d2783116be13", // active_ongoing
|
"0x8000091c2ae64ee414a54c1cc1fc67dec663408bc636cb86756e0200e41a75c8f86603f104f02c856983d2783116be13", // active_ongoing
|
||||||
},
|
},
|
||||||
@@ -277,9 +277,9 @@ func TestGetStateValidators_DataIsNil_POST(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/states/head/validators",
|
"/eth/v1/beacon/states/head/validators",
|
||||||
nil, bytes.NewBuffer(reqBytes),
|
nil, bytes.NewBuffer(reqBytes),
|
||||||
@@ -293,7 +293,7 @@ func TestGetStateValidators_DataIsNil_POST(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
stateValidatorsProvider := beaconApiStateValidatorsProvider{jsonRestHandler: jsonRestHandler}
|
stateValidatorsProvider := beaconApiStateValidatorsProvider{handler: handler}
|
||||||
_, err = stateValidatorsProvider.StateValidators(ctx, []string{
|
_, err = stateValidatorsProvider.StateValidators(ctx, []string{
|
||||||
"0x8000091c2ae64ee414a54c1cc1fc67dec663408bc636cb86756e0200e41a75c8f86603f104f02c856983d2783116be13", // active_ongoing
|
"0x8000091c2ae64ee414a54c1cc1fc67dec663408bc636cb86756e0200e41a75c8f86603f104f02c856983d2783116be13", // active_ongoing
|
||||||
},
|
},
|
||||||
@@ -316,10 +316,10 @@ func TestGetStateValidators_DataIsNil_GET(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
stateValidatorsResponseJson := structs.GetValidatorsResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
// First call POST which will return an error.
|
// First call POST which will return an error.
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/states/head/validators",
|
"/eth/v1/beacon/states/head/validators",
|
||||||
nil,
|
nil,
|
||||||
@@ -340,7 +340,7 @@ func TestGetStateValidators_DataIsNil_GET(t *testing.T) {
|
|||||||
|
|
||||||
query := apiutil.BuildURL("/eth/v1/beacon/states/head/validators", queryParams)
|
query := apiutil.BuildURL("/eth/v1/beacon/states/head/validators", queryParams)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
query,
|
query,
|
||||||
&stateValidatorsResponseJson,
|
&stateValidatorsResponseJson,
|
||||||
@@ -353,7 +353,7 @@ func TestGetStateValidators_DataIsNil_GET(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
stateValidatorsProvider := beaconApiStateValidatorsProvider{jsonRestHandler: jsonRestHandler}
|
stateValidatorsProvider := beaconApiStateValidatorsProvider{handler: handler}
|
||||||
_, err = stateValidatorsProvider.StateValidators(ctx, []string{
|
_, err = stateValidatorsProvider.StateValidators(ctx, []string{
|
||||||
"0x8000091c2ae64ee414a54c1cc1fc67dec663408bc636cb86756e0200e41a75c8f86603f104f02c856983d2783116be13", // active_ongoing
|
"0x8000091c2ae64ee414a54c1cc1fc67dec663408bc636cb86756e0200e41a75c8f86603f104f02c856983d2783116be13", // active_ongoing
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -50,19 +50,19 @@ func TestValidatorStatus_Nominal(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
stateValidatorsProvider: stateValidatorsProvider,
|
stateValidatorsProvider: stateValidatorsProvider,
|
||||||
prysmChainClient: prysmChainClient{
|
prysmChainClient: prysmChainClient{
|
||||||
nodeClient: &beaconApiNodeClient{
|
nodeClient: &beaconApiNodeClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// Expect node version endpoint call.
|
// Expect node version endpoint call.
|
||||||
var nodeVersionResponse structs.GetVersionResponse
|
var nodeVersionResponse structs.GetVersionResponse
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/node/version",
|
"/eth/v1/node/version",
|
||||||
&nodeVersionResponse,
|
&nodeVersionResponse,
|
||||||
@@ -165,11 +165,11 @@ func TestMultipleValidatorStatus_Nominal(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
// Expect node version endpoint call.
|
// Expect node version endpoint call.
|
||||||
var nodeVersionResponse structs.GetVersionResponse
|
var nodeVersionResponse structs.GetVersionResponse
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/node/version",
|
"/eth/v1/node/version",
|
||||||
&nodeVersionResponse,
|
&nodeVersionResponse,
|
||||||
@@ -181,7 +181,7 @@ func TestMultipleValidatorStatus_Nominal(t *testing.T) {
|
|||||||
stateValidatorsProvider: stateValidatorsProvider,
|
stateValidatorsProvider: stateValidatorsProvider,
|
||||||
prysmChainClient: prysmChainClient{
|
prysmChainClient: prysmChainClient{
|
||||||
nodeClient: &beaconApiNodeClient{
|
nodeClient: &beaconApiNodeClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -317,11 +317,11 @@ func TestGetValidatorsStatusResponse_Nominal_SomeActiveValidators(t *testing.T)
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
// Expect node version endpoint call.
|
// Expect node version endpoint call.
|
||||||
var nodeVersionResponse structs.GetVersionResponse
|
var nodeVersionResponse structs.GetVersionResponse
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/node/version",
|
"/eth/v1/node/version",
|
||||||
&nodeVersionResponse,
|
&nodeVersionResponse,
|
||||||
@@ -333,7 +333,7 @@ func TestGetValidatorsStatusResponse_Nominal_SomeActiveValidators(t *testing.T)
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
var validatorCountResponse structs.GetValidatorCountResponse
|
var validatorCountResponse structs.GetValidatorCountResponse
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/states/head/validator_count?",
|
"/eth/v1/beacon/states/head/validator_count?",
|
||||||
&validatorCountResponse,
|
&validatorCountResponse,
|
||||||
@@ -420,9 +420,9 @@ func TestGetValidatorsStatusResponse_Nominal_SomeActiveValidators(t *testing.T)
|
|||||||
stateValidatorsProvider: stateValidatorsProvider,
|
stateValidatorsProvider: stateValidatorsProvider,
|
||||||
prysmChainClient: prysmChainClient{
|
prysmChainClient: prysmChainClient{
|
||||||
nodeClient: &beaconApiNodeClient{
|
nodeClient: &beaconApiNodeClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
actualValidatorsPubKey, actualValidatorsIndex, actualValidatorsStatusResponse, err := validatorClient.validatorsStatusResponse(ctx, validatorsPubKey, validatorsIndex)
|
actualValidatorsPubKey, actualValidatorsIndex, actualValidatorsStatusResponse, err := validatorClient.validatorsStatusResponse(ctx, validatorsPubKey, validatorsIndex)
|
||||||
@@ -465,11 +465,11 @@ func TestGetValidatorsStatusResponse_Nominal_NoActiveValidators(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
// Expect node version endpoint call.
|
// Expect node version endpoint call.
|
||||||
var nodeVersionResponse structs.GetVersionResponse
|
var nodeVersionResponse structs.GetVersionResponse
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/node/version",
|
"/eth/v1/node/version",
|
||||||
&nodeVersionResponse,
|
&nodeVersionResponse,
|
||||||
@@ -490,9 +490,9 @@ func TestGetValidatorsStatusResponse_Nominal_NoActiveValidators(t *testing.T) {
|
|||||||
stateValidatorsProvider: stateValidatorsProvider,
|
stateValidatorsProvider: stateValidatorsProvider,
|
||||||
prysmChainClient: prysmChainClient{
|
prysmChainClient: prysmChainClient{
|
||||||
nodeClient: &beaconApiNodeClient{
|
nodeClient: &beaconApiNodeClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
actualValidatorsPubKey, actualValidatorsIndex, actualValidatorsStatusResponse, err := validatorClient.validatorsStatusResponse(ctx, wantedValidatorsPubKey, nil)
|
actualValidatorsPubKey, actualValidatorsIndex, actualValidatorsStatusResponse, err := validatorClient.validatorsStatusResponse(ctx, wantedValidatorsPubKey, nil)
|
||||||
@@ -704,11 +704,11 @@ func TestValidatorStatusResponse_InvalidData(t *testing.T) {
|
|||||||
testCase.inputGetStateValidatorsInterface.outputErr,
|
testCase.inputGetStateValidatorsInterface.outputErr,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
// Expect node version endpoint call.
|
// Expect node version endpoint call.
|
||||||
var nodeVersionResponse structs.GetVersionResponse
|
var nodeVersionResponse structs.GetVersionResponse
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/node/version",
|
"/eth/v1/node/version",
|
||||||
&nodeVersionResponse,
|
&nodeVersionResponse,
|
||||||
@@ -720,9 +720,9 @@ func TestValidatorStatusResponse_InvalidData(t *testing.T) {
|
|||||||
stateValidatorsProvider: stateValidatorsProvider,
|
stateValidatorsProvider: stateValidatorsProvider,
|
||||||
prysmChainClient: prysmChainClient{
|
prysmChainClient: prysmChainClient{
|
||||||
nodeClient: &beaconApiNodeClient{
|
nodeClient: &beaconApiNodeClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ func (c *beaconApiValidatorClient) headSignedBeaconBlock(ctx context.Context) (*
|
|||||||
// Since we don't know yet what the json looks like, we unmarshal into an abstract structure that has only a version
|
// Since we don't know yet what the json looks like, we unmarshal into an abstract structure that has only a version
|
||||||
// and a blob of data
|
// and a blob of data
|
||||||
signedBlockResponseJson := abstractSignedBlockResponseJson{}
|
signedBlockResponseJson := abstractSignedBlockResponseJson{}
|
||||||
if err := c.jsonRestHandler.Get(ctx, "/eth/v2/beacon/blocks/head", &signedBlockResponseJson); err != nil {
|
if err := c.handler.Get(ctx, "/eth/v2/beacon/blocks/head", &signedBlockResponseJson); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ func TestStreamBlocks_UnsupportedConsensusVersion(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
&abstractSignedBlockResponseJson{},
|
&abstractSignedBlockResponseJson{},
|
||||||
@@ -36,7 +36,7 @@ func TestStreamBlocks_UnsupportedConsensusVersion(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
streamBlocksClient := validatorClient.streamBlocks(ctx, ð.StreamBlocksRequest{}, time.Millisecond*100)
|
streamBlocksClient := validatorClient.streamBlocks(ctx, ð.StreamBlocksRequest{}, time.Millisecond*100)
|
||||||
_, err := streamBlocksClient.Recv()
|
_, err := streamBlocksClient.Recv()
|
||||||
assert.ErrorContains(t, "unsupported consensus version `foo`", err)
|
assert.ErrorContains(t, "unsupported consensus version `foo`", err)
|
||||||
@@ -146,8 +146,8 @@ func TestStreamBlocks_Error(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
&abstractSignedBlockResponseJson{},
|
&abstractSignedBlockResponseJson{},
|
||||||
@@ -162,7 +162,7 @@ func TestStreamBlocks_Error(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
beaconBlockConverter := testSuite.generateBeaconBlockConverter(ctrl, testCase.conversionError)
|
beaconBlockConverter := testSuite.generateBeaconBlockConverter(ctrl, testCase.conversionError)
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler, beaconBlockConverter: beaconBlockConverter}
|
validatorClient := &beaconApiValidatorClient{handler: handler, beaconBlockConverter: beaconBlockConverter}
|
||||||
streamBlocksClient := validatorClient.streamBlocks(ctx, ð.StreamBlocksRequest{}, time.Millisecond*100)
|
streamBlocksClient := validatorClient.streamBlocks(ctx, ð.StreamBlocksRequest{}, time.Millisecond*100)
|
||||||
|
|
||||||
_, err := streamBlocksClient.Recv()
|
_, err := streamBlocksClient.Recv()
|
||||||
@@ -197,7 +197,7 @@ func TestStreamBlocks_Phase0Valid(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
signedBlockResponseJson := abstractSignedBlockResponseJson{}
|
signedBlockResponseJson := abstractSignedBlockResponseJson{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
beaconBlockConverter := mock.NewMockBeaconBlockConverter(ctrl)
|
beaconBlockConverter := mock.NewMockBeaconBlockConverter(ctrl)
|
||||||
|
|
||||||
// For the first call, return a block that satisfies the verifiedOnly condition. This block should be returned by the first Recv().
|
// For the first call, return a block that satisfies the verifiedOnly condition. This block should be returned by the first Recv().
|
||||||
@@ -212,7 +212,7 @@ func TestStreamBlocks_Phase0Valid(t *testing.T) {
|
|||||||
marshalledSignedBeaconBlockContainer1, err := json.Marshal(signedBeaconBlockContainer1)
|
marshalledSignedBeaconBlockContainer1, err := json.Marshal(signedBeaconBlockContainer1)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks/head",
|
"/eth/v2/beacon/blocks/head",
|
||||||
&signedBlockResponseJson,
|
&signedBlockResponseJson,
|
||||||
@@ -249,7 +249,7 @@ func TestStreamBlocks_Phase0Valid(t *testing.T) {
|
|||||||
marshalledSignedBeaconBlockContainer2, err := json.Marshal(signedBeaconBlockContainer2)
|
marshalledSignedBeaconBlockContainer2, err := json.Marshal(signedBeaconBlockContainer2)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks/head",
|
"/eth/v2/beacon/blocks/head",
|
||||||
&signedBlockResponseJson,
|
&signedBlockResponseJson,
|
||||||
@@ -276,7 +276,7 @@ func TestStreamBlocks_Phase0Valid(t *testing.T) {
|
|||||||
|
|
||||||
// The fourth call is only necessary when verifiedOnly == true since the previous block was optimistic
|
// The fourth call is only necessary when verifiedOnly == true since the previous block was optimistic
|
||||||
if testCase.verifiedOnly {
|
if testCase.verifiedOnly {
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks/head",
|
"/eth/v2/beacon/blocks/head",
|
||||||
&signedBlockResponseJson,
|
&signedBlockResponseJson,
|
||||||
@@ -299,7 +299,7 @@ func TestStreamBlocks_Phase0Valid(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler, beaconBlockConverter: beaconBlockConverter}
|
validatorClient := &beaconApiValidatorClient{handler: handler, beaconBlockConverter: beaconBlockConverter}
|
||||||
streamBlocksClient := validatorClient.streamBlocks(ctx, ð.StreamBlocksRequest{VerifiedOnly: testCase.verifiedOnly}, time.Millisecond*100)
|
streamBlocksClient := validatorClient.streamBlocks(ctx, ð.StreamBlocksRequest{VerifiedOnly: testCase.verifiedOnly}, time.Millisecond*100)
|
||||||
|
|
||||||
// Get the first block
|
// Get the first block
|
||||||
@@ -358,7 +358,7 @@ func TestStreamBlocks_AltairValid(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
signedBlockResponseJson := abstractSignedBlockResponseJson{}
|
signedBlockResponseJson := abstractSignedBlockResponseJson{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
beaconBlockConverter := mock.NewMockBeaconBlockConverter(ctrl)
|
beaconBlockConverter := mock.NewMockBeaconBlockConverter(ctrl)
|
||||||
|
|
||||||
// For the first call, return a block that satisfies the verifiedOnly condition. This block should be returned by the first Recv().
|
// For the first call, return a block that satisfies the verifiedOnly condition. This block should be returned by the first Recv().
|
||||||
@@ -373,7 +373,7 @@ func TestStreamBlocks_AltairValid(t *testing.T) {
|
|||||||
marshalledSignedBeaconBlockContainer1, err := json.Marshal(signedBeaconBlockContainer1)
|
marshalledSignedBeaconBlockContainer1, err := json.Marshal(signedBeaconBlockContainer1)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks/head",
|
"/eth/v2/beacon/blocks/head",
|
||||||
&signedBlockResponseJson,
|
&signedBlockResponseJson,
|
||||||
@@ -410,7 +410,7 @@ func TestStreamBlocks_AltairValid(t *testing.T) {
|
|||||||
marshalledSignedBeaconBlockContainer2, err := json.Marshal(signedBeaconBlockContainer2)
|
marshalledSignedBeaconBlockContainer2, err := json.Marshal(signedBeaconBlockContainer2)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks/head",
|
"/eth/v2/beacon/blocks/head",
|
||||||
&signedBlockResponseJson,
|
&signedBlockResponseJson,
|
||||||
@@ -437,7 +437,7 @@ func TestStreamBlocks_AltairValid(t *testing.T) {
|
|||||||
|
|
||||||
// The fourth call is only necessary when verifiedOnly == true since the previous block was optimistic
|
// The fourth call is only necessary when verifiedOnly == true since the previous block was optimistic
|
||||||
if testCase.verifiedOnly {
|
if testCase.verifiedOnly {
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks/head",
|
"/eth/v2/beacon/blocks/head",
|
||||||
&signedBlockResponseJson,
|
&signedBlockResponseJson,
|
||||||
@@ -460,7 +460,7 @@ func TestStreamBlocks_AltairValid(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler, beaconBlockConverter: beaconBlockConverter}
|
validatorClient := &beaconApiValidatorClient{handler: handler, beaconBlockConverter: beaconBlockConverter}
|
||||||
streamBlocksClient := validatorClient.streamBlocks(ctx, ð.StreamBlocksRequest{VerifiedOnly: testCase.verifiedOnly}, time.Millisecond*100)
|
streamBlocksClient := validatorClient.streamBlocks(ctx, ð.StreamBlocksRequest{VerifiedOnly: testCase.verifiedOnly}, time.Millisecond*100)
|
||||||
|
|
||||||
// Get the first block
|
// Get the first block
|
||||||
@@ -519,7 +519,7 @@ func TestStreamBlocks_BellatrixValid(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
signedBlockResponseJson := abstractSignedBlockResponseJson{}
|
signedBlockResponseJson := abstractSignedBlockResponseJson{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
beaconBlockConverter := mock.NewMockBeaconBlockConverter(ctrl)
|
beaconBlockConverter := mock.NewMockBeaconBlockConverter(ctrl)
|
||||||
|
|
||||||
// For the first call, return a block that satisfies the verifiedOnly condition. This block should be returned by the first Recv().
|
// For the first call, return a block that satisfies the verifiedOnly condition. This block should be returned by the first Recv().
|
||||||
@@ -534,7 +534,7 @@ func TestStreamBlocks_BellatrixValid(t *testing.T) {
|
|||||||
marshalledSignedBeaconBlockContainer1, err := json.Marshal(signedBeaconBlockContainer1)
|
marshalledSignedBeaconBlockContainer1, err := json.Marshal(signedBeaconBlockContainer1)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks/head",
|
"/eth/v2/beacon/blocks/head",
|
||||||
&signedBlockResponseJson,
|
&signedBlockResponseJson,
|
||||||
@@ -571,7 +571,7 @@ func TestStreamBlocks_BellatrixValid(t *testing.T) {
|
|||||||
marshalledSignedBeaconBlockContainer2, err := json.Marshal(signedBeaconBlockContainer2)
|
marshalledSignedBeaconBlockContainer2, err := json.Marshal(signedBeaconBlockContainer2)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks/head",
|
"/eth/v2/beacon/blocks/head",
|
||||||
&signedBlockResponseJson,
|
&signedBlockResponseJson,
|
||||||
@@ -598,7 +598,7 @@ func TestStreamBlocks_BellatrixValid(t *testing.T) {
|
|||||||
|
|
||||||
// The fourth call is only necessary when verifiedOnly == true since the previous block was optimistic
|
// The fourth call is only necessary when verifiedOnly == true since the previous block was optimistic
|
||||||
if testCase.verifiedOnly {
|
if testCase.verifiedOnly {
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks/head",
|
"/eth/v2/beacon/blocks/head",
|
||||||
&signedBlockResponseJson,
|
&signedBlockResponseJson,
|
||||||
@@ -621,7 +621,7 @@ func TestStreamBlocks_BellatrixValid(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler, beaconBlockConverter: beaconBlockConverter}
|
validatorClient := &beaconApiValidatorClient{handler: handler, beaconBlockConverter: beaconBlockConverter}
|
||||||
streamBlocksClient := validatorClient.streamBlocks(ctx, ð.StreamBlocksRequest{VerifiedOnly: testCase.verifiedOnly}, time.Millisecond*100)
|
streamBlocksClient := validatorClient.streamBlocks(ctx, ð.StreamBlocksRequest{VerifiedOnly: testCase.verifiedOnly}, time.Millisecond*100)
|
||||||
|
|
||||||
// Get the first block
|
// Get the first block
|
||||||
@@ -680,7 +680,7 @@ func TestStreamBlocks_CapellaValid(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
signedBlockResponseJson := abstractSignedBlockResponseJson{}
|
signedBlockResponseJson := abstractSignedBlockResponseJson{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
beaconBlockConverter := mock.NewMockBeaconBlockConverter(ctrl)
|
beaconBlockConverter := mock.NewMockBeaconBlockConverter(ctrl)
|
||||||
|
|
||||||
// For the first call, return a block that satisfies the verifiedOnly condition. This block should be returned by the first Recv().
|
// For the first call, return a block that satisfies the verifiedOnly condition. This block should be returned by the first Recv().
|
||||||
@@ -695,7 +695,7 @@ func TestStreamBlocks_CapellaValid(t *testing.T) {
|
|||||||
marshalledSignedBeaconBlockContainer1, err := json.Marshal(signedBeaconBlockContainer1)
|
marshalledSignedBeaconBlockContainer1, err := json.Marshal(signedBeaconBlockContainer1)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks/head",
|
"/eth/v2/beacon/blocks/head",
|
||||||
&signedBlockResponseJson,
|
&signedBlockResponseJson,
|
||||||
@@ -732,7 +732,7 @@ func TestStreamBlocks_CapellaValid(t *testing.T) {
|
|||||||
marshalledSignedBeaconBlockContainer2, err := json.Marshal(signedBeaconBlockContainer2)
|
marshalledSignedBeaconBlockContainer2, err := json.Marshal(signedBeaconBlockContainer2)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks/head",
|
"/eth/v2/beacon/blocks/head",
|
||||||
&signedBlockResponseJson,
|
&signedBlockResponseJson,
|
||||||
@@ -759,7 +759,7 @@ func TestStreamBlocks_CapellaValid(t *testing.T) {
|
|||||||
|
|
||||||
// The fourth call is only necessary when verifiedOnly == true since the previous block was optimistic
|
// The fourth call is only necessary when verifiedOnly == true since the previous block was optimistic
|
||||||
if testCase.verifiedOnly {
|
if testCase.verifiedOnly {
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks/head",
|
"/eth/v2/beacon/blocks/head",
|
||||||
&signedBlockResponseJson,
|
&signedBlockResponseJson,
|
||||||
@@ -782,7 +782,7 @@ func TestStreamBlocks_CapellaValid(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler, beaconBlockConverter: beaconBlockConverter}
|
validatorClient := &beaconApiValidatorClient{handler: handler, beaconBlockConverter: beaconBlockConverter}
|
||||||
streamBlocksClient := validatorClient.streamBlocks(ctx, ð.StreamBlocksRequest{VerifiedOnly: testCase.verifiedOnly}, time.Millisecond*100)
|
streamBlocksClient := validatorClient.streamBlocks(ctx, ð.StreamBlocksRequest{VerifiedOnly: testCase.verifiedOnly}, time.Millisecond*100)
|
||||||
|
|
||||||
// Get the first block
|
// Get the first block
|
||||||
@@ -841,7 +841,7 @@ func TestStreamBlocks_DenebValid(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
signedBlockResponseJson := abstractSignedBlockResponseJson{}
|
signedBlockResponseJson := abstractSignedBlockResponseJson{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
beaconBlockConverter := mock.NewMockBeaconBlockConverter(ctrl)
|
beaconBlockConverter := mock.NewMockBeaconBlockConverter(ctrl)
|
||||||
|
|
||||||
// For the first call, return a block that satisfies the verifiedOnly condition. This block should be returned by the first Recv().
|
// For the first call, return a block that satisfies the verifiedOnly condition. This block should be returned by the first Recv().
|
||||||
@@ -856,7 +856,7 @@ func TestStreamBlocks_DenebValid(t *testing.T) {
|
|||||||
|
|
||||||
marshalledSignedBeaconBlockContainer1, err := json.Marshal(denebBlock)
|
marshalledSignedBeaconBlockContainer1, err := json.Marshal(denebBlock)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks/head",
|
"/eth/v2/beacon/blocks/head",
|
||||||
&signedBlockResponseJson,
|
&signedBlockResponseJson,
|
||||||
@@ -885,7 +885,7 @@ func TestStreamBlocks_DenebValid(t *testing.T) {
|
|||||||
marshalledSignedBeaconBlockContainer2, err := json.Marshal(denebBlock2)
|
marshalledSignedBeaconBlockContainer2, err := json.Marshal(denebBlock2)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks/head",
|
"/eth/v2/beacon/blocks/head",
|
||||||
&signedBlockResponseJson,
|
&signedBlockResponseJson,
|
||||||
@@ -902,7 +902,7 @@ func TestStreamBlocks_DenebValid(t *testing.T) {
|
|||||||
|
|
||||||
// The fourth call is only necessary when verifiedOnly == true since the previous block was optimistic
|
// The fourth call is only necessary when verifiedOnly == true since the previous block was optimistic
|
||||||
if testCase.verifiedOnly {
|
if testCase.verifiedOnly {
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks/head",
|
"/eth/v2/beacon/blocks/head",
|
||||||
&signedBlockResponseJson,
|
&signedBlockResponseJson,
|
||||||
@@ -918,7 +918,7 @@ func TestStreamBlocks_DenebValid(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler, beaconBlockConverter: beaconBlockConverter}
|
validatorClient := &beaconApiValidatorClient{handler: handler, beaconBlockConverter: beaconBlockConverter}
|
||||||
streamBlocksClient := validatorClient.streamBlocks(ctx, ð.StreamBlocksRequest{VerifiedOnly: testCase.verifiedOnly}, time.Millisecond*100)
|
streamBlocksClient := validatorClient.streamBlocks(ctx, ð.StreamBlocksRequest{VerifiedOnly: testCase.verifiedOnly}, time.Millisecond*100)
|
||||||
|
|
||||||
// Get the first block
|
// Get the first block
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ func (c *beaconApiValidatorClient) aggregateAttestation(
|
|||||||
endpoint := apiutil.BuildURL("/eth/v2/validator/aggregate_attestation", params)
|
endpoint := apiutil.BuildURL("/eth/v2/validator/aggregate_attestation", params)
|
||||||
|
|
||||||
var aggregateAttestationResponse structs.AggregateAttestationResponse
|
var aggregateAttestationResponse structs.AggregateAttestationResponse
|
||||||
err := c.jsonRestHandler.Get(ctx, endpoint, &aggregateAttestationResponse)
|
err := c.handler.Get(ctx, endpoint, &aggregateAttestationResponse)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -150,7 +150,7 @@ func (c *beaconApiValidatorClient) aggregateAttestationElectra(
|
|||||||
endpoint := apiutil.BuildURL("/eth/v2/validator/aggregate_attestation", params)
|
endpoint := apiutil.BuildURL("/eth/v2/validator/aggregate_attestation", params)
|
||||||
|
|
||||||
var aggregateAttestationResponse structs.AggregateAttestationResponse
|
var aggregateAttestationResponse structs.AggregateAttestationResponse
|
||||||
if err := c.jsonRestHandler.Get(ctx, endpoint, &aggregateAttestationResponse); err != nil {
|
if err := c.handler.Get(ctx, endpoint, &aggregateAttestationResponse); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -94,10 +94,10 @@ func TestSubmitAggregateSelectionProof(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
// Call node syncing endpoint to check if head is optimistic.
|
// Call node syncing endpoint to check if head is optimistic.
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
syncingEndpoint,
|
syncingEndpoint,
|
||||||
&structs.SyncStatusResponse{},
|
&structs.SyncStatusResponse{},
|
||||||
@@ -113,7 +113,7 @@ func TestSubmitAggregateSelectionProof(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
// Call attestation data to get attestation data root to query aggregate attestation.
|
// Call attestation data to get attestation data root to query aggregate attestation.
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s?committee_index=%d&slot=%d", attestationDataEndpoint, committeeIndex, slot),
|
fmt.Sprintf("%s?committee_index=%d&slot=%d", attestationDataEndpoint, committeeIndex, slot),
|
||||||
&structs.GetAttestationDataResponse{},
|
&structs.GetAttestationDataResponse{},
|
||||||
@@ -128,7 +128,7 @@ func TestSubmitAggregateSelectionProof(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// Call attestation data to get attestation data root to query aggregate attestation.
|
// Call attestation data to get attestation data root to query aggregate attestation.
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s?attestation_data_root=%s&committee_index=%d&slot=%d", aggregateAttestationEndpoint, hexutil.Encode(attestationDataRootBytes[:]), committeeIndex, slot),
|
fmt.Sprintf("%s?attestation_data_root=%s&committee_index=%d&slot=%d", aggregateAttestationEndpoint, hexutil.Encode(attestationDataRootBytes[:]), committeeIndex, slot),
|
||||||
&structs.AggregateAttestationResponse{},
|
&structs.AggregateAttestationResponse{},
|
||||||
@@ -156,12 +156,12 @@ func TestSubmitAggregateSelectionProof(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{
|
validatorClient := &beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
stateValidatorsProvider: beaconApiStateValidatorsProvider{
|
stateValidatorsProvider: beaconApiStateValidatorsProvider{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
dutiesProvider: beaconApiDutiesProvider{
|
dutiesProvider: beaconApiDutiesProvider{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -263,10 +263,10 @@ func TestSubmitAggregateSelectionProofElectra(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
// Call node syncing endpoint to check if head is optimistic.
|
// Call node syncing endpoint to check if head is optimistic.
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
syncingEndpoint,
|
syncingEndpoint,
|
||||||
&structs.SyncStatusResponse{},
|
&structs.SyncStatusResponse{},
|
||||||
@@ -282,7 +282,7 @@ func TestSubmitAggregateSelectionProofElectra(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
// Call attestation data to get attestation data root to query aggregate attestation.
|
// Call attestation data to get attestation data root to query aggregate attestation.
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s?committee_index=%d&slot=%d", attestationDataEndpoint, committeeIndex, slot),
|
fmt.Sprintf("%s?committee_index=%d&slot=%d", attestationDataEndpoint, committeeIndex, slot),
|
||||||
&structs.GetAttestationDataResponse{},
|
&structs.GetAttestationDataResponse{},
|
||||||
@@ -297,7 +297,7 @@ func TestSubmitAggregateSelectionProofElectra(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// Call attestation data to get attestation data root to query aggregate attestation.
|
// Call attestation data to get attestation data root to query aggregate attestation.
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s?attestation_data_root=%s&committee_index=%d&slot=%d", aggregateAttestationEndpoint, hexutil.Encode(attestationDataRootBytes[:]), committeeIndex, slot),
|
fmt.Sprintf("%s?attestation_data_root=%s&committee_index=%d&slot=%d", aggregateAttestationEndpoint, hexutil.Encode(attestationDataRootBytes[:]), committeeIndex, slot),
|
||||||
&structs.AggregateAttestationResponse{},
|
&structs.AggregateAttestationResponse{},
|
||||||
@@ -325,12 +325,12 @@ func TestSubmitAggregateSelectionProofElectra(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{
|
validatorClient := &beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
stateValidatorsProvider: beaconApiStateValidatorsProvider{
|
stateValidatorsProvider: beaconApiStateValidatorsProvider{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
dutiesProvider: beaconApiDutiesProvider{
|
dutiesProvider: beaconApiDutiesProvider{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ func (c *beaconApiValidatorClient) submitSignedAggregateSelectionProof(ctx conte
|
|||||||
return nil, errors.Wrap(err, "failed to marshal SignedAggregateAttestationAndProof")
|
return nil, errors.Wrap(err, "failed to marshal SignedAggregateAttestationAndProof")
|
||||||
}
|
}
|
||||||
headers := map[string]string{"Eth-Consensus-Version": version.String(in.SignedAggregateAndProof.Version())}
|
headers := map[string]string{"Eth-Consensus-Version": version.String(in.SignedAggregateAndProof.Version())}
|
||||||
err = c.jsonRestHandler.Post(ctx, "/eth/v2/validator/aggregate_and_proofs", headers, bytes.NewBuffer(body), nil)
|
err = c.handler.Post(ctx, "/eth/v2/validator/aggregate_and_proofs", headers, bytes.NewBuffer(body), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -39,7 +39,7 @@ func (c *beaconApiValidatorClient) submitSignedAggregateSelectionProofElectra(ct
|
|||||||
dataSlot := in.SignedAggregateAndProof.Message.Aggregate.Data.Slot
|
dataSlot := in.SignedAggregateAndProof.Message.Aggregate.Data.Slot
|
||||||
consensusVersion := version.String(slots.ToForkVersion(dataSlot))
|
consensusVersion := version.String(slots.ToForkVersion(dataSlot))
|
||||||
headers := map[string]string{"Eth-Consensus-Version": consensusVersion}
|
headers := map[string]string{"Eth-Consensus-Version": consensusVersion}
|
||||||
if err = c.jsonRestHandler.Post(ctx, "/eth/v2/validator/aggregate_and_proofs", headers, bytes.NewBuffer(body), nil); err != nil {
|
if err = c.handler.Post(ctx, "/eth/v2/validator/aggregate_and_proofs", headers, bytes.NewBuffer(body), nil); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ func TestSubmitSignedAggregateSelectionProof_Valid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
headers := map[string]string{"Eth-Consensus-Version": version.String(signedAggregateAndProof.Message.Version())}
|
headers := map[string]string{"Eth-Consensus-Version": version.String(signedAggregateAndProof.Message.Version())}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/validator/aggregate_and_proofs",
|
"/eth/v2/validator/aggregate_and_proofs",
|
||||||
headers,
|
headers,
|
||||||
@@ -42,7 +42,7 @@ func TestSubmitSignedAggregateSelectionProof_Valid(t *testing.T) {
|
|||||||
attestationDataRoot, err := signedAggregateAndProof.Message.Aggregate.Data.HashTreeRoot()
|
attestationDataRoot, err := signedAggregateAndProof.Message.Aggregate.Data.HashTreeRoot()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
resp, err := validatorClient.submitSignedAggregateSelectionProof(ctx, ðpb.SignedAggregateSubmitRequest{
|
resp, err := validatorClient.submitSignedAggregateSelectionProof(ctx, ðpb.SignedAggregateSubmitRequest{
|
||||||
SignedAggregateAndProof: signedAggregateAndProof,
|
SignedAggregateAndProof: signedAggregateAndProof,
|
||||||
})
|
})
|
||||||
@@ -60,8 +60,8 @@ func TestSubmitSignedAggregateSelectionProof_BadRequest(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
headers := map[string]string{"Eth-Consensus-Version": version.String(signedAggregateAndProof.Message.Version())}
|
headers := map[string]string{"Eth-Consensus-Version": version.String(signedAggregateAndProof.Message.Version())}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/validator/aggregate_and_proofs",
|
"/eth/v2/validator/aggregate_and_proofs",
|
||||||
headers,
|
headers,
|
||||||
@@ -71,7 +71,7 @@ func TestSubmitSignedAggregateSelectionProof_BadRequest(t *testing.T) {
|
|||||||
errors.New("bad request"),
|
errors.New("bad request"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err = validatorClient.submitSignedAggregateSelectionProof(ctx, ðpb.SignedAggregateSubmitRequest{
|
_, err = validatorClient.submitSignedAggregateSelectionProof(ctx, ðpb.SignedAggregateSubmitRequest{
|
||||||
SignedAggregateAndProof: signedAggregateAndProof,
|
SignedAggregateAndProof: signedAggregateAndProof,
|
||||||
})
|
})
|
||||||
@@ -93,8 +93,8 @@ func TestSubmitSignedAggregateSelectionProofElectra_Valid(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
expectedVersion := version.String(slots.ToForkVersion(signedAggregateAndProofElectra.Message.Aggregate.Data.Slot))
|
expectedVersion := version.String(slots.ToForkVersion(signedAggregateAndProofElectra.Message.Aggregate.Data.Slot))
|
||||||
headers := map[string]string{"Eth-Consensus-Version": expectedVersion}
|
headers := map[string]string{"Eth-Consensus-Version": expectedVersion}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/validator/aggregate_and_proofs",
|
"/eth/v2/validator/aggregate_and_proofs",
|
||||||
headers,
|
headers,
|
||||||
@@ -107,7 +107,7 @@ func TestSubmitSignedAggregateSelectionProofElectra_Valid(t *testing.T) {
|
|||||||
attestationDataRoot, err := signedAggregateAndProofElectra.Message.Aggregate.Data.HashTreeRoot()
|
attestationDataRoot, err := signedAggregateAndProofElectra.Message.Aggregate.Data.HashTreeRoot()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
resp, err := validatorClient.submitSignedAggregateSelectionProofElectra(ctx, ðpb.SignedAggregateSubmitElectraRequest{
|
resp, err := validatorClient.submitSignedAggregateSelectionProofElectra(ctx, ðpb.SignedAggregateSubmitElectraRequest{
|
||||||
SignedAggregateAndProof: signedAggregateAndProofElectra,
|
SignedAggregateAndProof: signedAggregateAndProofElectra,
|
||||||
})
|
})
|
||||||
@@ -130,8 +130,8 @@ func TestSubmitSignedAggregateSelectionProofElectra_BadRequest(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
expectedVersion := version.String(slots.ToForkVersion(signedAggregateAndProofElectra.Message.Aggregate.Data.Slot))
|
expectedVersion := version.String(slots.ToForkVersion(signedAggregateAndProofElectra.Message.Aggregate.Data.Slot))
|
||||||
headers := map[string]string{"Eth-Consensus-Version": expectedVersion}
|
headers := map[string]string{"Eth-Consensus-Version": expectedVersion}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/validator/aggregate_and_proofs",
|
"/eth/v2/validator/aggregate_and_proofs",
|
||||||
headers,
|
headers,
|
||||||
@@ -141,7 +141,7 @@ func TestSubmitSignedAggregateSelectionProofElectra_BadRequest(t *testing.T) {
|
|||||||
errors.New("bad request"),
|
errors.New("bad request"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err = validatorClient.submitSignedAggregateSelectionProofElectra(ctx, ðpb.SignedAggregateSubmitElectraRequest{
|
_, err = validatorClient.submitSignedAggregateSelectionProofElectra(ctx, ðpb.SignedAggregateSubmitElectraRequest{
|
||||||
SignedAggregateAndProof: signedAggregateAndProofElectra,
|
SignedAggregateAndProof: signedAggregateAndProofElectra,
|
||||||
})
|
})
|
||||||
@@ -163,8 +163,8 @@ func TestSubmitSignedAggregateSelectionProofElectra_FuluVersion(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
expectedVersion := version.String(slots.ToForkVersion(signedAggregateAndProofElectra.Message.Aggregate.Data.Slot))
|
expectedVersion := version.String(slots.ToForkVersion(signedAggregateAndProofElectra.Message.Aggregate.Data.Slot))
|
||||||
headers := map[string]string{"Eth-Consensus-Version": expectedVersion}
|
headers := map[string]string{"Eth-Consensus-Version": expectedVersion}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/validator/aggregate_and_proofs",
|
"/eth/v2/validator/aggregate_and_proofs",
|
||||||
headers,
|
headers,
|
||||||
@@ -177,7 +177,7 @@ func TestSubmitSignedAggregateSelectionProofElectra_FuluVersion(t *testing.T) {
|
|||||||
attestationDataRoot, err := signedAggregateAndProofElectra.Message.Aggregate.Data.HashTreeRoot()
|
attestationDataRoot, err := signedAggregateAndProofElectra.Message.Aggregate.Data.HashTreeRoot()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
resp, err := validatorClient.submitSignedAggregateSelectionProofElectra(ctx, ðpb.SignedAggregateSubmitElectraRequest{
|
resp, err := validatorClient.submitSignedAggregateSelectionProofElectra(ctx, ðpb.SignedAggregateSubmitElectraRequest{
|
||||||
SignedAggregateAndProof: signedAggregateAndProofElectra,
|
SignedAggregateAndProof: signedAggregateAndProofElectra,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ func (c *beaconApiValidatorClient) submitSignedContributionAndProof(ctx context.
|
|||||||
return errors.Wrap(err, "failed to marshall signed contribution and proof")
|
return errors.Wrap(err, "failed to marshall signed contribution and proof")
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.jsonRestHandler.Post(
|
return c.handler.Post(
|
||||||
ctx,
|
ctx,
|
||||||
"/eth/v1/validator/contribution_and_proofs",
|
"/eth/v1/validator/contribution_and_proofs",
|
||||||
nil,
|
nil,
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ func TestSubmitSignedContributionAndProof_Valid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
submitSignedContributionAndProofTestEndpoint,
|
submitSignedContributionAndProofTestEndpoint,
|
||||||
nil,
|
nil,
|
||||||
@@ -69,7 +69,7 @@ func TestSubmitSignedContributionAndProof_Valid(t *testing.T) {
|
|||||||
Signature: []byte{8},
|
Signature: []byte{8},
|
||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
err = validatorClient.submitSignedContributionAndProof(ctx, contributionAndProof)
|
err = validatorClient.submitSignedContributionAndProof(ctx, contributionAndProof)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
@@ -117,9 +117,9 @@ func TestSubmitSignedContributionAndProof_Error(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
if testCase.httpRequestExpected {
|
if testCase.httpRequestExpected {
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
submitSignedContributionAndProofTestEndpoint,
|
submitSignedContributionAndProofTestEndpoint,
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -130,7 +130,7 @@ func TestSubmitSignedContributionAndProof_Error(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
err := validatorClient.submitSignedContributionAndProof(ctx, testCase.data)
|
err := validatorClient.submitSignedContributionAndProof(ctx, testCase.data)
|
||||||
assert.ErrorContains(t, testCase.expectedErrorMessage, err)
|
assert.ErrorContains(t, testCase.expectedErrorMessage, err)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ func (c *beaconApiValidatorClient) subscribeCommitteeSubnets(ctx context.Context
|
|||||||
return errors.Wrap(err, "failed to marshal committees subscriptions")
|
return errors.Wrap(err, "failed to marshal committees subscriptions")
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.jsonRestHandler.Post(
|
return c.handler.Post(
|
||||||
ctx,
|
ctx,
|
||||||
"/eth/v1/validator/beacon_committee_subscriptions",
|
"/eth/v1/validator/beacon_committee_subscriptions",
|
||||||
nil,
|
nil,
|
||||||
|
|||||||
@@ -44,8 +44,8 @@ func TestSubscribeCommitteeSubnets_Valid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
subscribeCommitteeSubnetsTestEndpoint,
|
subscribeCommitteeSubnetsTestEndpoint,
|
||||||
nil,
|
nil,
|
||||||
@@ -66,7 +66,7 @@ func TestSubscribeCommitteeSubnets_Valid(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{
|
validatorClient := &beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
err = validatorClient.subscribeCommitteeSubnets(
|
err = validatorClient.subscribeCommitteeSubnets(
|
||||||
ctx,
|
ctx,
|
||||||
@@ -205,9 +205,9 @@ func TestSubscribeCommitteeSubnets_Error(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
if testCase.expectSubscribeRestCall {
|
if testCase.expectSubscribeRestCall {
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
subscribeCommitteeSubnetsTestEndpoint,
|
subscribeCommitteeSubnetsTestEndpoint,
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -219,7 +219,7 @@ func TestSubscribeCommitteeSubnets_Error(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{
|
validatorClient := &beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
err := validatorClient.subscribeCommitteeSubnets(ctx, testCase.subscribeRequest, testCase.duties)
|
err := validatorClient.subscribeCommitteeSubnets(ctx, testCase.subscribeRequest, testCase.duties)
|
||||||
assert.ErrorContains(t, testCase.expectedErrorMessage, err)
|
assert.ErrorContains(t, testCase.expectedErrorMessage, err)
|
||||||
|
|||||||
@@ -31,13 +31,13 @@ func (c *beaconApiValidatorClient) submitSyncMessage(ctx context.Context, syncMe
|
|||||||
return errors.Wrap(err, "failed to marshal sync committee message")
|
return errors.Wrap(err, "failed to marshal sync committee message")
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.jsonRestHandler.Post(ctx, endpoint, nil, bytes.NewBuffer(marshalledJsonSyncCommitteeMessage), nil)
|
return c.handler.Post(ctx, endpoint, nil, bytes.NewBuffer(marshalledJsonSyncCommitteeMessage), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *beaconApiValidatorClient) syncMessageBlockRoot(ctx context.Context) (*ethpb.SyncMessageBlockRootResponse, error) {
|
func (c *beaconApiValidatorClient) syncMessageBlockRoot(ctx context.Context) (*ethpb.SyncMessageBlockRootResponse, error) {
|
||||||
// Get head beacon block root.
|
// Get head beacon block root.
|
||||||
var resp structs.BlockRootResponse
|
var resp structs.BlockRootResponse
|
||||||
if err := c.jsonRestHandler.Get(ctx, "/eth/v1/beacon/blocks/head/root", &resp); err != nil {
|
if err := c.handler.Get(ctx, "/eth/v1/beacon/blocks/head/root", &resp); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,7 +82,7 @@ func (c *beaconApiValidatorClient) syncCommitteeContribution(
|
|||||||
params.Add("beacon_block_root", blockRoot)
|
params.Add("beacon_block_root", blockRoot)
|
||||||
|
|
||||||
var resp structs.ProduceSyncCommitteeContributionResponse
|
var resp structs.ProduceSyncCommitteeContributionResponse
|
||||||
if err = c.jsonRestHandler.Get(ctx, apiutil.BuildURL("/eth/v1/validator/sync_committee_contribution", params), &resp); err != nil {
|
if err = c.handler.Get(ctx, apiutil.BuildURL("/eth/v1/validator/sync_committee_contribution", params), &resp); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ func (c *beaconApiValidatorClient) aggregatedSyncSelections(ctx context.Context,
|
|||||||
}
|
}
|
||||||
|
|
||||||
var resp aggregatedSyncSelectionResponse
|
var resp aggregatedSyncSelectionResponse
|
||||||
err = c.jsonRestHandler.Post(ctx, "/eth/v1/validator/sync_committee_selections", nil, bytes.NewBuffer(body), &resp)
|
err = c.handler.Post(ctx, "/eth/v1/validator/sync_committee_selections", nil, bytes.NewBuffer(body), &resp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "error calling post endpoint")
|
return nil, errors.Wrap(err, "error calling post endpoint")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,13 +96,13 @@ func TestGetAggregatedSyncSelections(t *testing.T) {
|
|||||||
for _, test := range testcases {
|
for _, test := range testcases {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
reqBody, err := json.Marshal(test.req)
|
reqBody, err := json.Marshal(test.req)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/validator/sync_committee_selections",
|
"/eth/v1/validator/sync_committee_selections",
|
||||||
nil,
|
nil,
|
||||||
@@ -115,7 +115,7 @@ func TestGetAggregatedSyncSelections(t *testing.T) {
|
|||||||
test.endpointError,
|
test.endpointError,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
res, err := validatorClient.AggregatedSyncSelections(ctx, test.req)
|
res, err := validatorClient.AggregatedSyncSelections(ctx, test.req)
|
||||||
if test.expectedErrorMessage != "" {
|
if test.expectedErrorMessage != "" {
|
||||||
require.ErrorContains(t, test.expectedErrorMessage, err)
|
require.ErrorContains(t, test.expectedErrorMessage, err)
|
||||||
|
|||||||
@@ -44,8 +44,8 @@ func TestSubmitSyncMessage_Valid(t *testing.T) {
|
|||||||
marshalledJsonRegistrations, err := json.Marshal([]*structs.SyncCommitteeMessage{jsonSyncCommitteeMessage})
|
marshalledJsonRegistrations, err := json.Marshal([]*structs.SyncCommitteeMessage{jsonSyncCommitteeMessage})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/pool/sync_committees",
|
"/eth/v1/beacon/pool/sync_committees",
|
||||||
nil,
|
nil,
|
||||||
@@ -62,7 +62,7 @@ func TestSubmitSyncMessage_Valid(t *testing.T) {
|
|||||||
Signature: decodedSignature,
|
Signature: decodedSignature,
|
||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
res, err := validatorClient.SubmitSyncMessage(t.Context(), &protoSyncCommitteeMessage)
|
res, err := validatorClient.SubmitSyncMessage(t.Context(), &protoSyncCommitteeMessage)
|
||||||
|
|
||||||
assert.DeepEqual(t, new(empty.Empty), res)
|
assert.DeepEqual(t, new(empty.Empty), res)
|
||||||
@@ -73,8 +73,8 @@ func TestSubmitSyncMessage_BadRequest(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/pool/sync_committees",
|
"/eth/v1/beacon/pool/sync_committees",
|
||||||
nil,
|
nil,
|
||||||
@@ -84,7 +84,7 @@ func TestSubmitSyncMessage_BadRequest(t *testing.T) {
|
|||||||
errors.New("foo error"),
|
errors.New("foo error"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.SubmitSyncMessage(t.Context(), ðpb.SyncCommitteeMessage{})
|
_, err := validatorClient.SubmitSyncMessage(t.Context(), ðpb.SyncCommitteeMessage{})
|
||||||
assert.ErrorContains(t, "foo error", err)
|
assert.ErrorContains(t, "foo error", err)
|
||||||
}
|
}
|
||||||
@@ -137,8 +137,8 @@ func TestGetSyncMessageBlockRoot(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/blocks/head/root",
|
"/eth/v1/beacon/blocks/head/root",
|
||||||
&structs.BlockRootResponse{},
|
&structs.BlockRootResponse{},
|
||||||
@@ -149,7 +149,7 @@ func TestGetSyncMessageBlockRoot(t *testing.T) {
|
|||||||
test.endpointError,
|
test.endpointError,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
actualResponse, err := validatorClient.syncMessageBlockRoot(ctx)
|
actualResponse, err := validatorClient.syncMessageBlockRoot(ctx)
|
||||||
if test.expectedErrorMessage != "" {
|
if test.expectedErrorMessage != "" {
|
||||||
require.ErrorContains(t, test.expectedErrorMessage, err)
|
require.ErrorContains(t, test.expectedErrorMessage, err)
|
||||||
@@ -207,8 +207,8 @@ func TestGetSyncCommitteeContribution(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/blocks/head/root",
|
"/eth/v1/beacon/blocks/head/root",
|
||||||
&structs.BlockRootResponse{},
|
&structs.BlockRootResponse{},
|
||||||
@@ -223,7 +223,7 @@ func TestGetSyncCommitteeContribution(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v1/validator/sync_committee_contribution?beacon_block_root=%s&slot=%d&subcommittee_index=%d",
|
fmt.Sprintf("/eth/v1/validator/sync_committee_contribution?beacon_block_root=%s&slot=%d&subcommittee_index=%d",
|
||||||
blockRoot, uint64(request.Slot), request.SubnetId),
|
blockRoot, uint64(request.Slot), request.SubnetId),
|
||||||
@@ -235,7 +235,7 @@ func TestGetSyncCommitteeContribution(t *testing.T) {
|
|||||||
test.endpointErr,
|
test.endpointErr,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
actualResponse, err := validatorClient.syncCommitteeContribution(ctx, request)
|
actualResponse, err := validatorClient.syncCommitteeContribution(ctx, request)
|
||||||
if test.expectedErrMsg != "" {
|
if test.expectedErrMsg != "" {
|
||||||
require.ErrorContains(t, test.expectedErrMsg, err)
|
require.ErrorContains(t, test.expectedErrMsg, err)
|
||||||
@@ -314,8 +314,8 @@ func TestGetSyncSubCommitteeIndex(t *testing.T) {
|
|||||||
}
|
}
|
||||||
valsReqBytes, err := json.Marshal(valsReq)
|
valsReqBytes, err := json.Marshal(valsReq)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
validatorsEndpoint,
|
validatorsEndpoint,
|
||||||
nil,
|
nil,
|
||||||
@@ -350,7 +350,7 @@ func TestGetSyncSubCommitteeIndex(t *testing.T) {
|
|||||||
|
|
||||||
query := apiutil.BuildURL("/eth/v1/beacon/states/head/validators", queryParams)
|
query := apiutil.BuildURL("/eth/v1/beacon/states/head/validators", queryParams)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
query,
|
query,
|
||||||
&structs.GetValidatorsResponse{},
|
&structs.GetValidatorsResponse{},
|
||||||
@@ -367,7 +367,7 @@ func TestGetSyncSubCommitteeIndex(t *testing.T) {
|
|||||||
syncDutiesCalled = 1
|
syncDutiesCalled = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("%s/%d", syncDutiesEndpoint, slots.ToEpoch(slot)),
|
fmt.Sprintf("%s/%d", syncDutiesEndpoint, slots.ToEpoch(slot)),
|
||||||
nil,
|
nil,
|
||||||
@@ -386,12 +386,12 @@ func TestGetSyncSubCommitteeIndex(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{
|
validatorClient := &beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
stateValidatorsProvider: beaconApiStateValidatorsProvider{
|
stateValidatorsProvider: beaconApiStateValidatorsProvider{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
dutiesProvider: beaconApiDutiesProvider{
|
dutiesProvider: beaconApiDutiesProvider{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
actualResponse, err := validatorClient.syncSubcommitteeIndex(ctx, ðpb.SyncSubcommitteeIndexRequest{
|
actualResponse, err := validatorClient.syncSubcommitteeIndex(ctx, ðpb.SyncSubcommitteeIndexRequest{
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ func TestWaitForChainStart_ValidGenesis(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
genesisResponseJson := structs.GetGenesisResponse{}
|
genesisResponseJson := structs.GetGenesisResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/genesis",
|
"/eth/v1/beacon/genesis",
|
||||||
&genesisResponseJson,
|
&genesisResponseJson,
|
||||||
@@ -38,7 +38,7 @@ func TestWaitForChainStart_ValidGenesis(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
genesisProvider := beaconApiGenesisProvider{jsonRestHandler: jsonRestHandler}
|
genesisProvider := beaconApiGenesisProvider{handler: handler}
|
||||||
validatorClient := beaconApiValidatorClient{genesisProvider: &genesisProvider}
|
validatorClient := beaconApiValidatorClient{genesisProvider: &genesisProvider}
|
||||||
resp, err := validatorClient.WaitForChainStart(ctx, &emptypb.Empty{})
|
resp, err := validatorClient.WaitForChainStart(ctx, &emptypb.Empty{})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
@@ -88,8 +88,8 @@ func TestWaitForChainStart_BadGenesis(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
genesisResponseJson := structs.GetGenesisResponse{}
|
genesisResponseJson := structs.GetGenesisResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/genesis",
|
"/eth/v1/beacon/genesis",
|
||||||
&genesisResponseJson,
|
&genesisResponseJson,
|
||||||
@@ -102,7 +102,7 @@ func TestWaitForChainStart_BadGenesis(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
genesisProvider := beaconApiGenesisProvider{jsonRestHandler: jsonRestHandler}
|
genesisProvider := beaconApiGenesisProvider{handler: handler}
|
||||||
validatorClient := beaconApiValidatorClient{genesisProvider: &genesisProvider}
|
validatorClient := beaconApiValidatorClient{genesisProvider: &genesisProvider}
|
||||||
_, err := validatorClient.WaitForChainStart(ctx, &emptypb.Empty{})
|
_, err := validatorClient.WaitForChainStart(ctx, &emptypb.Empty{})
|
||||||
assert.ErrorContains(t, testCase.errorMessage, err)
|
assert.ErrorContains(t, testCase.errorMessage, err)
|
||||||
@@ -116,8 +116,8 @@ func TestWaitForChainStart_JsonResponseError(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
genesisResponseJson := structs.GetGenesisResponse{}
|
genesisResponseJson := structs.GetGenesisResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/genesis",
|
"/eth/v1/beacon/genesis",
|
||||||
&genesisResponseJson,
|
&genesisResponseJson,
|
||||||
@@ -125,7 +125,7 @@ func TestWaitForChainStart_JsonResponseError(t *testing.T) {
|
|||||||
errors.New("some specific json error"),
|
errors.New("some specific json error"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
genesisProvider := beaconApiGenesisProvider{jsonRestHandler: jsonRestHandler}
|
genesisProvider := beaconApiGenesisProvider{handler: handler}
|
||||||
validatorClient := beaconApiValidatorClient{genesisProvider: &genesisProvider}
|
validatorClient := beaconApiValidatorClient{genesisProvider: &genesisProvider}
|
||||||
_, err := validatorClient.WaitForChainStart(ctx, &emptypb.Empty{})
|
_, err := validatorClient.WaitForChainStart(ctx, &emptypb.Empty{})
|
||||||
assert.ErrorContains(t, "failed to get genesis data", err)
|
assert.ErrorContains(t, "failed to get genesis data", err)
|
||||||
@@ -139,10 +139,10 @@ func TestWaitForChainStart_JsonResponseError404(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
genesisResponseJson := structs.GetGenesisResponse{}
|
genesisResponseJson := structs.GetGenesisResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
// First, mock a request that receives a 404 error (which means that the genesis data is not available yet)
|
// First, mock a request that receives a 404 error (which means that the genesis data is not available yet)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/genesis",
|
"/eth/v1/beacon/genesis",
|
||||||
&genesisResponseJson,
|
&genesisResponseJson,
|
||||||
@@ -154,7 +154,7 @@ func TestWaitForChainStart_JsonResponseError404(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
// After receiving a 404 error, mock a request that actually has genesis data available
|
// After receiving a 404 error, mock a request that actually has genesis data available
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/beacon/genesis",
|
"/eth/v1/beacon/genesis",
|
||||||
&genesisResponseJson,
|
&genesisResponseJson,
|
||||||
@@ -170,7 +170,7 @@ func TestWaitForChainStart_JsonResponseError404(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
genesisProvider := beaconApiGenesisProvider{jsonRestHandler: jsonRestHandler}
|
genesisProvider := beaconApiGenesisProvider{handler: handler}
|
||||||
validatorClient := beaconApiValidatorClient{genesisProvider: &genesisProvider}
|
validatorClient := beaconApiValidatorClient{genesisProvider: &genesisProvider}
|
||||||
resp, err := validatorClient.WaitForChainStart(ctx, &emptypb.Empty{})
|
resp, err := validatorClient.WaitForChainStart(ctx, &emptypb.Empty{})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ go_library(
|
|||||||
deps = [
|
deps = [
|
||||||
"//api/client:go_default_library",
|
"//api/client:go_default_library",
|
||||||
"//api/client/event:go_default_library",
|
"//api/client/event:go_default_library",
|
||||||
|
"//api/fallback:go_default_library",
|
||||||
"//api/server/structs:go_default_library",
|
"//api/server/structs:go_default_library",
|
||||||
"//beacon-chain/rpc/eth/helpers:go_default_library",
|
"//beacon-chain/rpc/eth/helpers:go_default_library",
|
||||||
"//beacon-chain/state/state-native:go_default_library",
|
"//beacon-chain/state/state-native:go_default_library",
|
||||||
@@ -49,6 +50,7 @@ go_test(
|
|||||||
embed = [":go_default_library"],
|
embed = [":go_default_library"],
|
||||||
deps = [
|
deps = [
|
||||||
"//api/client/event:go_default_library",
|
"//api/client/event:go_default_library",
|
||||||
|
"//api/grpc:go_default_library",
|
||||||
"//api/server/structs:go_default_library",
|
"//api/server/structs:go_default_library",
|
||||||
"//config/params:go_default_library",
|
"//config/params:go_default_library",
|
||||||
"//consensus-types/primitives:go_default_library",
|
"//consensus-types/primitives:go_default_library",
|
||||||
|
|||||||
@@ -10,11 +10,11 @@ import (
|
|||||||
// grpcClientManager handles dynamic gRPC client recreation when the connection changes.
|
// grpcClientManager handles dynamic gRPC client recreation when the connection changes.
|
||||||
// It uses generics to work with any gRPC client type.
|
// It uses generics to work with any gRPC client type.
|
||||||
type grpcClientManager[T any] struct {
|
type grpcClientManager[T any] struct {
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
conn validatorHelpers.NodeConnection
|
conn validatorHelpers.NodeConnection
|
||||||
client T
|
client T
|
||||||
lastHost string
|
lastConnCounter uint64 // connection counter when client was last created; compared to detect host switches
|
||||||
newClient func(grpc.ClientConnInterface) T
|
newClient func(grpc.ClientConnInterface) T
|
||||||
}
|
}
|
||||||
|
|
||||||
// newGrpcClientManager creates a new client manager with the given connection and client constructor.
|
// newGrpcClientManager creates a new client manager with the given connection and client constructor.
|
||||||
@@ -23,22 +23,25 @@ func newGrpcClientManager[T any](
|
|||||||
newClient func(grpc.ClientConnInterface) T,
|
newClient func(grpc.ClientConnInterface) T,
|
||||||
) *grpcClientManager[T] {
|
) *grpcClientManager[T] {
|
||||||
return &grpcClientManager[T]{
|
return &grpcClientManager[T]{
|
||||||
conn: conn,
|
conn: conn,
|
||||||
newClient: newClient,
|
newClient: newClient,
|
||||||
client: newClient(conn.GetGrpcClientConn()),
|
client: newClient(conn.GetGrpcClientConn()),
|
||||||
lastHost: conn.GetGrpcConnectionProvider().CurrentHost(),
|
lastConnCounter: conn.GetGrpcConnectionProvider().ConnectionCounter(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// getClient returns the current client, recreating it if the connection has changed.
|
// getClient returns the current client, recreating it if the connection has changed.
|
||||||
|
// It uses the provider's connection counter rather than the host string to detect changes,
|
||||||
|
// which correctly handles host bounces (e.g., host0 → host1 → host0) where the host
|
||||||
|
// string returns to its original value but the underlying connection has been replaced.
|
||||||
func (m *grpcClientManager[T]) getClient() T {
|
func (m *grpcClientManager[T]) getClient() T {
|
||||||
m.mu.Lock()
|
m.mu.Lock()
|
||||||
defer m.mu.Unlock()
|
defer m.mu.Unlock()
|
||||||
|
|
||||||
currentHost := m.conn.GetGrpcConnectionProvider().CurrentHost()
|
currentCounter := m.conn.GetGrpcConnectionProvider().ConnectionCounter()
|
||||||
if m.lastHost != currentHost {
|
if m.lastConnCounter != currentCounter {
|
||||||
m.client = m.newClient(m.conn.GetGrpcClientConn())
|
m.client = m.newClient(m.conn.GetGrpcClientConn())
|
||||||
m.lastHost = currentHost
|
m.lastConnCounter = currentCounter
|
||||||
}
|
}
|
||||||
return m.client
|
return m.client
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import (
|
|||||||
type mockProvider struct {
|
type mockProvider struct {
|
||||||
hosts []string
|
hosts []string
|
||||||
currentIndex int
|
currentIndex int
|
||||||
|
connCounter uint64
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,14 +32,22 @@ func (m *mockProvider) SwitchHost(index int) error {
|
|||||||
m.mu.Lock()
|
m.mu.Lock()
|
||||||
defer m.mu.Unlock()
|
defer m.mu.Unlock()
|
||||||
m.currentIndex = index
|
m.currentIndex = index
|
||||||
|
m.connCounter++
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *mockProvider) ConnectionCounter() uint64 {
|
||||||
|
m.mu.Lock()
|
||||||
|
defer m.mu.Unlock()
|
||||||
|
return m.connCounter
|
||||||
|
}
|
||||||
|
|
||||||
// nextHost is a test helper for round-robin simulation (not part of the interface).
|
// nextHost is a test helper for round-robin simulation (not part of the interface).
|
||||||
func (m *mockProvider) nextHost() {
|
func (m *mockProvider) nextHost() {
|
||||||
m.mu.Lock()
|
m.mu.Lock()
|
||||||
defer m.mu.Unlock()
|
defer m.mu.Unlock()
|
||||||
m.currentIndex = (m.currentIndex + 1) % len(m.hosts)
|
m.currentIndex = (m.currentIndex + 1) % len(m.hosts)
|
||||||
|
m.connCounter++
|
||||||
}
|
}
|
||||||
|
|
||||||
// testClient is a simple type for testing the generic client manager.
|
// testClient is a simple type for testing the generic client manager.
|
||||||
@@ -61,11 +70,11 @@ func testManager(t *testing.T, provider *mockProvider) (*grpcClientManager[*test
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestGrpcClientManager(t *testing.T) {
|
func TestGrpcClientManager(t *testing.T) {
|
||||||
t.Run("tracks host", func(t *testing.T) {
|
t.Run("tracks connection counter", func(t *testing.T) {
|
||||||
provider := &mockProvider{hosts: []string{"host1:4000", "host2:4000"}}
|
provider := &mockProvider{hosts: []string{"host1:4000", "host2:4000"}}
|
||||||
manager, count := testManager(t, provider)
|
manager, count := testManager(t, provider)
|
||||||
assert.Equal(t, 1, *count)
|
assert.Equal(t, 1, *count)
|
||||||
assert.Equal(t, "host1:4000", manager.lastHost)
|
assert.Equal(t, uint64(0), manager.lastConnCounter)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("same host returns same client", func(t *testing.T) {
|
t.Run("same host returns same client", func(t *testing.T) {
|
||||||
@@ -96,6 +105,30 @@ func TestGrpcClientManager(t *testing.T) {
|
|||||||
assert.Equal(t, c2, c3)
|
assert.Equal(t, c2, c3)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("host bounce recreates client", func(t *testing.T) {
|
||||||
|
// Regression test: when host bounces (host0 → host1 → host0), the client
|
||||||
|
// must be recreated even though the host string returns to its original value,
|
||||||
|
// because the underlying *grpc.ClientConn was destroyed and replaced.
|
||||||
|
provider := &mockProvider{hosts: []string{"host1:4000", "host2:4000"}}
|
||||||
|
manager, count := testManager(t, provider)
|
||||||
|
|
||||||
|
c1 := manager.getClient()
|
||||||
|
assert.Equal(t, 1, c1.id)
|
||||||
|
|
||||||
|
// Switch to host2
|
||||||
|
provider.nextHost()
|
||||||
|
c2 := manager.getClient()
|
||||||
|
assert.Equal(t, 2, *count)
|
||||||
|
assert.Equal(t, 2, c2.id)
|
||||||
|
|
||||||
|
// Switch back to host1 — same host string but new connection
|
||||||
|
provider.nextHost()
|
||||||
|
assert.Equal(t, "host1:4000", provider.CurrentHost())
|
||||||
|
c3 := manager.getClient()
|
||||||
|
assert.Equal(t, 3, *count, "client should be recreated on host bounce")
|
||||||
|
assert.Equal(t, 3, c3.id)
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("multiple host switches", func(t *testing.T) {
|
t.Run("multiple host switches", func(t *testing.T) {
|
||||||
provider := &mockProvider{hosts: []string{"host1:4000", "host2:4000", "host3:4000"}}
|
provider := &mockProvider{hosts: []string{"host1:4000", "host2:4000", "host3:4000"}}
|
||||||
manager, count := testManager(t, provider)
|
manager, count := testManager(t, provider)
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ func (c *grpcNodeClient) IsReady(ctx context.Context) bool {
|
|||||||
// otherwise it will throw an error
|
// otherwise it will throw an error
|
||||||
_, err := c.getClient().GetHealth(ctx, ðpb.HealthRequest{})
|
_, err := c.getClient().GetHealth(ctx, ðpb.HealthRequest{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.WithError(err).Debug("Node is not ready")
|
log.WithError(err).WithField("url", c.conn.GetGrpcConnectionProvider().CurrentHost()).Debug("Node is not ready")
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
|||||||
@@ -58,10 +58,10 @@ func TestGrpcNodeClient_IsReady(t *testing.T) {
|
|||||||
// Create client with injected mock
|
// Create client with injected mock
|
||||||
client := &grpcNodeClient{
|
client := &grpcNodeClient{
|
||||||
grpcClientManager: &grpcClientManager[ethpb.NodeClient]{
|
grpcClientManager: &grpcClientManager[ethpb.NodeClient]{
|
||||||
conn: conn,
|
conn: conn,
|
||||||
client: mockNodeClient,
|
client: mockNodeClient,
|
||||||
lastHost: "host1:4000",
|
lastConnCounter: 0,
|
||||||
newClient: func(grpc.ClientConnInterface) ethpb.NodeClient { return mockNodeClient },
|
newClient: func(grpc.ClientConnInterface) ethpb.NodeClient { return mockNodeClient },
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
|
|
||||||
"github.com/OffchainLabs/prysm/v7/api/client"
|
"github.com/OffchainLabs/prysm/v7/api/client"
|
||||||
eventClient "github.com/OffchainLabs/prysm/v7/api/client/event"
|
eventClient "github.com/OffchainLabs/prysm/v7/api/client/event"
|
||||||
|
"github.com/OffchainLabs/prysm/v7/api/fallback"
|
||||||
"github.com/OffchainLabs/prysm/v7/api/server/structs"
|
"github.com/OffchainLabs/prysm/v7/api/server/structs"
|
||||||
"github.com/OffchainLabs/prysm/v7/config/features"
|
"github.com/OffchainLabs/prysm/v7/config/features"
|
||||||
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
||||||
@@ -24,6 +25,7 @@ import (
|
|||||||
|
|
||||||
type grpcValidatorClient struct {
|
type grpcValidatorClient struct {
|
||||||
*grpcClientManager[ethpb.BeaconNodeValidatorClient]
|
*grpcClientManager[ethpb.BeaconNodeValidatorClient]
|
||||||
|
nodeClient *grpcNodeClient
|
||||||
isEventStreamRunning bool
|
isEventStreamRunning bool
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -282,6 +284,9 @@ func (*grpcValidatorClient) AggregatedSyncSelections(context.Context, []iface.Sy
|
|||||||
func NewGrpcValidatorClient(conn validatorHelpers.NodeConnection) iface.ValidatorClient {
|
func NewGrpcValidatorClient(conn validatorHelpers.NodeConnection) iface.ValidatorClient {
|
||||||
return &grpcValidatorClient{
|
return &grpcValidatorClient{
|
||||||
grpcClientManager: newGrpcClientManager(conn, ethpb.NewBeaconNodeValidatorClient),
|
grpcClientManager: newGrpcClientManager(conn, ethpb.NewBeaconNodeValidatorClient),
|
||||||
|
nodeClient: &grpcNodeClient{
|
||||||
|
grpcClientManager: newGrpcClientManager(conn, ethpb.NewNodeClient),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -382,16 +387,7 @@ func (c *grpcValidatorClient) Host() string {
|
|||||||
return c.grpcClientManager.conn.GetGrpcConnectionProvider().CurrentHost()
|
return c.grpcClientManager.conn.GetGrpcConnectionProvider().CurrentHost()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *grpcValidatorClient) SwitchHost(host string) {
|
func (c *grpcValidatorClient) EnsureReady(ctx context.Context) bool {
|
||||||
provider := c.grpcClientManager.conn.GetGrpcConnectionProvider()
|
provider := c.grpcClientManager.conn.GetGrpcConnectionProvider()
|
||||||
// Find the index of the requested host and switch to it
|
return fallback.EnsureReady(ctx, provider, c.nodeClient)
|
||||||
for i, h := range provider.Hosts() {
|
|
||||||
if h == host {
|
|
||||||
if err := provider.SwitchHost(i); err != nil {
|
|
||||||
log.WithError(err).WithField("host", host).Error("Failed to set gRPC host")
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log.WithField("host", host).Warn("Requested gRPC host not found in configured endpoints")
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,12 +8,14 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
eventClient "github.com/OffchainLabs/prysm/v7/api/client/event"
|
eventClient "github.com/OffchainLabs/prysm/v7/api/client/event"
|
||||||
|
grpcutil "github.com/OffchainLabs/prysm/v7/api/grpc"
|
||||||
"github.com/OffchainLabs/prysm/v7/api/server/structs"
|
"github.com/OffchainLabs/prysm/v7/api/server/structs"
|
||||||
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
||||||
eth "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1"
|
eth "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1"
|
||||||
"github.com/OffchainLabs/prysm/v7/testing/assert"
|
"github.com/OffchainLabs/prysm/v7/testing/assert"
|
||||||
mock2 "github.com/OffchainLabs/prysm/v7/testing/mock"
|
mock2 "github.com/OffchainLabs/prysm/v7/testing/mock"
|
||||||
"github.com/OffchainLabs/prysm/v7/testing/require"
|
"github.com/OffchainLabs/prysm/v7/testing/require"
|
||||||
|
validatorHelpers "github.com/OffchainLabs/prysm/v7/validator/helpers"
|
||||||
validatorTesting "github.com/OffchainLabs/prysm/v7/validator/testing"
|
validatorTesting "github.com/OffchainLabs/prysm/v7/validator/testing"
|
||||||
logTest "github.com/sirupsen/logrus/hooks/test"
|
logTest "github.com/sirupsen/logrus/hooks/test"
|
||||||
"go.uber.org/mock/gomock"
|
"go.uber.org/mock/gomock"
|
||||||
@@ -253,3 +255,94 @@ func TestStartEventStream(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEnsureReady(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
hosts []string
|
||||||
|
healthResults []error // one per GetHealth call in order
|
||||||
|
expectedResult bool
|
||||||
|
expectedIndex int // expected provider index after EnsureReady
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "Single host ready",
|
||||||
|
hosts: []string{"host1:4000"},
|
||||||
|
healthResults: []error{nil},
|
||||||
|
expectedResult: true,
|
||||||
|
expectedIndex: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Single host not ready",
|
||||||
|
hosts: []string{"host1:4000"},
|
||||||
|
healthResults: []error{errors.New("not synced")},
|
||||||
|
expectedResult: false,
|
||||||
|
expectedIndex: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Multiple hosts first ready",
|
||||||
|
hosts: []string{"host1:4000", "host2:4000", "host3:4000"},
|
||||||
|
healthResults: []error{nil},
|
||||||
|
expectedResult: true,
|
||||||
|
expectedIndex: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Failover to second host",
|
||||||
|
hosts: []string{"host1:4000", "host2:4000", "host3:4000"},
|
||||||
|
healthResults: []error{errors.New("not synced"), nil},
|
||||||
|
expectedResult: true,
|
||||||
|
expectedIndex: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Failover to third host",
|
||||||
|
hosts: []string{"host1:4000", "host2:4000", "host3:4000"},
|
||||||
|
healthResults: []error{errors.New("not synced"), errors.New("not synced"), nil},
|
||||||
|
expectedResult: true,
|
||||||
|
expectedIndex: 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "All hosts down",
|
||||||
|
hosts: []string{"host1:4000", "host2:4000", "host3:4000"},
|
||||||
|
healthResults: []error{errors.New("not synced"), errors.New("not synced"), errors.New("not synced")},
|
||||||
|
expectedResult: false,
|
||||||
|
expectedIndex: 2,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
ctrl := gomock.NewController(t)
|
||||||
|
|
||||||
|
mockProvider := &grpcutil.MockGrpcProvider{
|
||||||
|
MockHosts: tt.hosts,
|
||||||
|
}
|
||||||
|
conn, err := validatorHelpers.NewNodeConnection(
|
||||||
|
validatorHelpers.WithGRPCProvider(mockProvider),
|
||||||
|
)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
mockNodeClient := mock2.NewMockNodeClient(ctrl)
|
||||||
|
for _, healthErr := range tt.healthResults {
|
||||||
|
if healthErr != nil {
|
||||||
|
mockNodeClient.EXPECT().GetHealth(gomock.Any(), gomock.Any()).Return(nil, healthErr)
|
||||||
|
} else {
|
||||||
|
mockNodeClient.EXPECT().GetHealth(gomock.Any(), gomock.Any()).Return(&emptypb.Empty{}, nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
client := &grpcValidatorClient{
|
||||||
|
grpcClientManager: newGrpcClientManager(conn, func(_ grpc.ClientConnInterface) eth.BeaconNodeValidatorClient {
|
||||||
|
return mock2.NewMockBeaconNodeValidatorClient(ctrl)
|
||||||
|
}),
|
||||||
|
nodeClient: &grpcNodeClient{
|
||||||
|
grpcClientManager: newGrpcClientManager(conn, func(_ grpc.ClientConnInterface) eth.NodeClient {
|
||||||
|
return mockNodeClient
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
result := client.EnsureReady(t.Context())
|
||||||
|
assert.Equal(t, tt.expectedResult, result)
|
||||||
|
assert.Equal(t, tt.expectedIndex, mockProvider.CurrentIndex)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ func (m *healthMonitor) IsHealthy() bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *healthMonitor) performHealthCheck() {
|
func (m *healthMonitor) performHealthCheck() {
|
||||||
ishealthy := m.v.FindHealthyHost(m.ctx)
|
ishealthy := m.v.EnsureReady(m.ctx)
|
||||||
m.Lock()
|
m.Lock()
|
||||||
defer m.Unlock()
|
defer m.Unlock()
|
||||||
if ishealthy {
|
if ishealthy {
|
||||||
@@ -58,22 +58,30 @@ func (m *healthMonitor) performHealthCheck() {
|
|||||||
log.WithFields(logrus.Fields{
|
log.WithFields(logrus.Fields{
|
||||||
"fails": m.fails,
|
"fails": m.fails,
|
||||||
"maxFails": m.maxFails,
|
"maxFails": m.maxFails,
|
||||||
|
"url": m.v.Host(),
|
||||||
}).Warn("Failed health check, beacon node is unresponsive")
|
}).Warn("Failed health check, beacon node is unresponsive")
|
||||||
m.fails++
|
m.fails++
|
||||||
} else if m.maxFails > 0 && m.fails >= m.maxFails {
|
} else if m.maxFails > 0 && m.fails >= m.maxFails {
|
||||||
log.WithField("maxFails", m.maxFails).Warn("Maximum health checks reached. Stopping health check routine")
|
log.WithFields(logrus.Fields{
|
||||||
|
"maxFails": m.maxFails,
|
||||||
|
"url": m.v.Host(),
|
||||||
|
}).Warn("Maximum health checks reached. Stopping health check routine")
|
||||||
m.isHealthy = ishealthy
|
m.isHealthy = ishealthy
|
||||||
m.cancel()
|
m.cancel()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if ishealthy == m.isHealthy {
|
if ishealthy == m.isHealthy {
|
||||||
// is not a new status so skip update
|
// is not a new status so skip update
|
||||||
log.WithField("isHealthy", m.isHealthy).Debug("Health status did not change")
|
log.WithFields(logrus.Fields{
|
||||||
|
"isHealthy": m.isHealthy,
|
||||||
|
"url": m.v.Host(),
|
||||||
|
}).Debug("Health status did not change")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.WithFields(logrus.Fields{
|
log.WithFields(logrus.Fields{
|
||||||
"healthy": ishealthy,
|
"current": ishealthy,
|
||||||
"previously": m.isHealthy,
|
"previous": m.isHealthy,
|
||||||
|
"url": m.v.Host(),
|
||||||
}).Info("Health status changed")
|
}).Info("Health status changed")
|
||||||
m.isHealthy = ishealthy
|
m.isHealthy = ishealthy
|
||||||
go m.healthEventFeed.Send(ishealthy) // non blocking send
|
go m.healthEventFeed.Send(ishealthy) // non blocking send
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user