Full Code of berachain/beacon-kit for AI

main a70a4f306da0 cached
804 files
53.1 MB
1.8M tokens
4272 symbols
1 requests
Download .txt
Showing preview only (7,086K chars total). Download the full file or copy to clipboard to get everything.
Repository: berachain/beacon-kit
Branch: main
Commit: a70a4f306da0
Files: 804
Total size: 53.1 MB

Directory structure:
gitextract_6zu1j5o0/

├── .dockerignore
├── .gitattributes
├── .github/
│   └── workflows/
│       ├── berachain_release.asc
│       ├── docker-nightly-preconf.yml
│       ├── pipeline.yml
│       ├── release.yaml
│       └── vuln-and-dep-check.yml
├── .gitignore
├── .gitmodules
├── .golangci.yaml
├── .mockery.yaml
├── .vscode/
│   ├── launch.json
│   └── tasks.json
├── CLAUDE.md
├── CODEOWNERS
├── Dockerfile
├── LICENSE
├── LICENSE.header
├── Makefile
├── README.md
├── beacon/
│   ├── blockchain/
│   │   ├── common.go
│   │   ├── deposit.go
│   │   ├── errors.go
│   │   ├── execution_engine.go
│   │   ├── finalize_block.go
│   │   ├── init_chain.go
│   │   ├── interfaces.go
│   │   ├── metrics.go
│   │   ├── mocks/
│   │   │   ├── genesis_state_processor.mock.go
│   │   │   ├── local_builder.mock.go
│   │   │   └── storage_backend.mock.go
│   │   ├── payload.go
│   │   ├── payload_test.go
│   │   ├── process_proposal.go
│   │   ├── pruning.go
│   │   └── service.go
│   ├── payload-time/
│   │   ├── time.go
│   │   └── time_test.go
│   └── validator/
│       ├── block_builder.go
│       ├── config.go
│       ├── errors.go
│       ├── interfaces.go
│       ├── metrics.go
│       └── service.go
├── chain/
│   ├── chain_ids.go
│   ├── data.go
│   ├── errors.go
│   ├── helpers.go
│   ├── helpers_test.go
│   ├── spec.go
│   └── spec_test.go
├── cli/
│   ├── builder/
│   │   ├── builder.go
│   │   ├── config.go
│   │   └── options.go
│   ├── commands/
│   │   ├── deposit/
│   │   │   ├── commands.go
│   │   │   ├── commands_test.go
│   │   │   ├── create.go
│   │   │   ├── db_check.go
│   │   │   ├── errors.go
│   │   │   ├── interfaces.go
│   │   │   ├── keys.go
│   │   │   ├── utils.go
│   │   │   └── validate.go
│   │   ├── genesis/
│   │   │   ├── collect.go
│   │   │   ├── deposit.go
│   │   │   ├── deposit_test.go
│   │   │   ├── genesis.go
│   │   │   ├── interfaces.go
│   │   │   ├── payload.go
│   │   │   ├── root.go
│   │   │   ├── storage.go
│   │   │   ├── storage_test.go
│   │   │   └── types/
│   │   │       ├── constants.go
│   │   │       └── json.go
│   │   ├── initialize/
│   │   │   └── initialize.go
│   │   ├── jwt/
│   │   │   ├── errors.go
│   │   │   ├── jwt.go
│   │   │   └── jwt_test.go
│   │   ├── root.go
│   │   ├── server/
│   │   │   ├── cmd/
│   │   │   │   └── execute.go
│   │   │   ├── pruning.go
│   │   │   ├── rollback.go
│   │   │   ├── start.go
│   │   │   └── types/
│   │   │       └── types.go
│   │   └── setup.go
│   ├── components/
│   │   ├── client_context.go
│   │   ├── defaults.go
│   │   └── logger.go
│   ├── config/
│   │   ├── app.go
│   │   ├── client.go
│   │   ├── comet.go
│   │   ├── errors.go
│   │   └── server.go
│   ├── context/
│   │   ├── cmd.go
│   │   └── keys.go
│   ├── flags/
│   │   └── flags.go
│   └── utils/
│       ├── genesis/
│       │   ├── interfaces.go
│       │   ├── root.go
│       │   └── root_test.go
│       └── parser/
│           ├── errors.go
│           └── validator.go
├── cmd/
│   └── beacond/
│       ├── defaults.go
│       └── main.go
├── codecov.yml
├── config/
│   ├── config/
│   │   ├── config.go
│   │   ├── config.toml.tpl
│   │   └── toml.go
│   ├── config.go
│   ├── spec/
│   │   ├── creator.go
│   │   ├── creator_test.go
│   │   ├── defaults.go
│   │   ├── defaults_test.go
│   │   ├── devnet.go
│   │   ├── mainnet.go
│   │   └── testnet.go
│   ├── template/
│   │   └── template.go
│   └── viper/
│       └── parser.go
├── consensus/
│   ├── cometbft/
│   │   ├── cli/
│   │   │   └── commands.go
│   │   └── service/
│   │       ├── abci.go
│   │       ├── abci_utils.go
│   │       ├── cache/
│   │       │   ├── cache.go
│   │       │   ├── cache_test.go
│   │       │   └── state.go
│   │       ├── commit.go
│   │       ├── configs.go
│   │       ├── configs_test.go
│   │       ├── delay/
│   │       │   ├── config.go
│   │       │   ├── delay.go
│   │       │   ├── delay_test.go
│   │       │   └── errors.go
│   │       ├── encoding/
│   │       │   ├── encoding.go
│   │       │   ├── errors.go
│   │       │   └── interfaces.go
│   │       ├── finalize_block.go
│   │       ├── genesis.go
│   │       ├── init_chain.go
│   │       ├── interfaces.go
│   │       ├── log/
│   │       │   ├── cmt_logger.go
│   │       │   └── sdk_logger.go
│   │       ├── node_api_support.go
│   │       ├── options.go
│   │       ├── prepare_proposal.go
│   │       ├── process_proposal.go
│   │       ├── service.go
│   │       └── state/
│   │           └── state.go
│   └── types/
│       ├── common.go
│       ├── consensus_block.go
│       └── slot_data.go
├── consensus-types/
│   └── types/
│       ├── attestation_data.go
│       ├── attestation_data_test.go
│       ├── attester_slashings.go
│       ├── attestions.go
│       ├── block.go
│       ├── block_test.go
│       ├── bls_to_execution_changes.go
│       ├── body.go
│       ├── body_test.go
│       ├── consolidation_request.go
│       ├── consolidation_request_test.go
│       ├── deposit.go
│       ├── deposit_message.go
│       ├── deposit_message_test.go
│       ├── deposit_request.go
│       ├── deposit_request_test.go
│       ├── deposit_test.go
│       ├── deposits.go
│       ├── errors.go
│       ├── eth1data.go
│       ├── eth1data_test.go
│       ├── execution_requests.go
│       ├── execution_requests_test.go
│       ├── fork.go
│       ├── fork_data.go
│       ├── fork_data_test.go
│       ├── fork_test.go
│       ├── genesis.go
│       ├── genesis_test.go
│       ├── header.go
│       ├── header_test.go
│       ├── interfaces.go
│       ├── mocks/
│       │   ├── blobs_bundle.mock.go
│       │   ├── built_execution_payload_env.mock.go
│       │   ├── new_payload_request.mock.go
│       │   ├── proposer_domain.mock.go
│       │   └── unused_enforcer.mock.go
│       ├── payload.go
│       ├── payload_env.go
│       ├── payload_header.go
│       ├── payload_header_test.go
│       ├── payload_requests.go
│       ├── payload_requests_test.go
│       ├── payload_test.go
│       ├── pending_partial_withdrawal.go
│       ├── pending_partial_withdrawal_test.go
│       ├── proposer_slashings.go
│       ├── signed_beacon_block.go
│       ├── signed_beacon_block_header.go
│       ├── signed_beacon_block_header_test.go
│       ├── signed_beacon_block_test.go
│       ├── signing_data.go
│       ├── signing_data_test.go
│       ├── slashing_info.go
│       ├── slashing_info_test.go
│       ├── state.go
│       ├── state_test.go
│       ├── sync_aggregate.go
│       ├── validator.go
│       ├── validator_test.go
│       ├── validators.go
│       ├── versionable.go
│       ├── voluntary_exits.go
│       ├── withdrawal_credentials.go
│       ├── withdrawal_credentials_test.go
│       ├── withdrawal_request.go
│       └── withdrawals_request_test.go
├── contracts/
│   ├── .gas-snapshot
│   ├── Makefile
│   ├── README.md
│   ├── foundry.toml
│   ├── remappings.txt
│   ├── slither.config.json
│   ├── src/
│   │   ├── brip0004/
│   │   │   ├── MockPoL.sol
│   │   │   ├── MockPoLGasEnforcer.sol
│   │   │   ├── MockPoLReverting.sol
│   │   │   └── MockValidatorRegistry.sol
│   │   ├── eip4399/
│   │   │   └── RandaoTester.sol
│   │   ├── eip4788/
│   │   │   ├── README.md
│   │   │   ├── SSZ.sol
│   │   │   └── deployment.json
│   │   └── staking/
│   │       ├── DepositContract.sol
│   │       ├── IDepositContract.sol
│   │       └── IERC165.sol
│   └── test/
│       └── staking/
│           └── DepositContract.t.sol
├── da/
│   ├── blob/
│   │   ├── factory.go
│   │   ├── factory_metrics.go
│   │   ├── factory_test.go
│   │   ├── interfaces.go
│   │   ├── processor.go
│   │   ├── processor_metrics.go
│   │   ├── verifier.go
│   │   └── verifier_metrics.go
│   ├── kzg/
│   │   ├── config.go
│   │   ├── config_test.go
│   │   ├── errors.go
│   │   ├── gokzg/
│   │   │   ├── gokzg.go
│   │   │   └── gokzg_test.go
│   │   ├── noop/
│   │   │   ├── noop.go
│   │   │   └── noop_test.go
│   │   ├── proof.go
│   │   ├── proof_test.go
│   │   └── types/
│   │       └── args.go
│   ├── store/
│   │   ├── errors.go
│   │   ├── interfaces.go
│   │   ├── store.go
│   │   └── store_test.go
│   └── types/
│       ├── errors.go
│       ├── sidecar.go
│       ├── sidecar_test.go
│       ├── sidecars.go
│       └── sidecars_test.go
├── docs/
│   └── .gitkeep
├── engine-primitives/
│   ├── engine-primitives/
│   │   ├── attributes.go
│   │   ├── attributes_test.go
│   │   ├── blobs_bundle.go
│   │   ├── blobs_bundle_test.go
│   │   ├── engine.go
│   │   ├── engine_test.go
│   │   ├── errors.go
│   │   ├── mocks/
│   │   │   ├── blobs_bundle.mock.go
│   │   │   └── payload_attributer.mock.go
│   │   ├── transactions.go
│   │   ├── transactions_test.go
│   │   ├── withdrawal.go
│   │   ├── withdrawal_ssz_test.go
│   │   ├── withdrawal_test.go
│   │   ├── withdrawals.go
│   │   └── withdrawals_test.go
│   └── errors/
│       └── errors.go
├── errors/
│   └── mod.go
├── execution/
│   ├── README.md
│   ├── client/
│   │   ├── client.go
│   │   ├── config.go
│   │   ├── engine.go
│   │   ├── errors.go
│   │   ├── ethclient/
│   │   │   ├── constants.go
│   │   │   ├── engine.go
│   │   │   ├── engine_test.go
│   │   │   ├── errors.go
│   │   │   ├── eth.go
│   │   │   ├── ethclient.go
│   │   │   └── rpc/
│   │   │       ├── client.go
│   │   │       ├── errors.go
│   │   │       ├── header.go
│   │   │       └── types.go
│   │   ├── helpers.go
│   │   ├── interfaces.go
│   │   └── metrics.go
│   ├── deposit/
│   │   ├── contract.go
│   │   └── interfaces.go
│   ├── engine/
│   │   ├── engine.go
│   │   ├── errors.go
│   │   ├── interfaces.go
│   │   └── metrics.go
│   └── requests/
│       ├── eip7002/
│       │   ├── interfaces.go
│       │   ├── withdrawal.go
│       │   └── withdrawal_test.go
│       └── eip7251/
│           ├── consolidation.go
│           └── interfaces.go
├── gethlib/
│   ├── deposit/
│   │   ├── contract.abigen.go
│   │   └── contract.go
│   ├── ethclient/
│   │   ├── ethclient.go
│   │   └── ethclient_test.go
│   ├── ssztest/
│   │   ├── contract.abigen.go
│   │   └── contract.go
│   └── types/
│       ├── block.go
│       ├── config.go
│       ├── genesis.go
│       ├── header.go
│       ├── pubkey.go
│       ├── transaction.go
│       ├── transaction_marshalling.go
│       ├── tx_types.go
│       └── utils.go
├── go.mod
├── go.sum
├── kurtosis/
│   ├── Makefile
│   ├── README.md
│   ├── beaconkit-cloud.yaml
│   ├── beaconkit-local.yaml
│   ├── kurtosis-params.yaml
│   ├── kurtosis.yml
│   ├── main.star
│   └── src/
│       ├── constants.star
│       ├── lib/
│       │   ├── bash.star
│       │   ├── builtins.star
│       │   ├── helpers.star
│       │   ├── port_spec.star
│       │   └── service_config.star
│       ├── networks/
│       │   ├── kurtosis-devnet/
│       │   │   ├── README.md
│       │   │   └── network-configs/
│       │   │       └── genesis.json.template
│       │   ├── networks.star
│       │   └── private-testnet-1/
│       │       └── .gitkeep
│       ├── nodes/
│       │   ├── consensus/
│       │   │   ├── beacond/
│       │   │   │   ├── launcher.star
│       │   │   │   ├── node.star
│       │   │   │   └── scripts/
│       │   │   │       ├── modify-genesis-with-deposits.sh
│       │   │   │       └── multiple-premined-deposits-cl.sh
│       │   │   └── types.star
│       │   ├── execution/
│       │   │   ├── config.star
│       │   │   ├── execution.star
│       │   │   └── reth/
│       │   │       ├── config.star
│       │   │       └── reth-config.toml
│       │   ├── jwt-secret.hex
│       │   ├── kzg-trusted-setup.json
│       │   └── nodes.star
│       ├── observability/
│       │   ├── grafana/
│       │   │   ├── dashboard-providers.yml.tmpl
│       │   │   ├── datasource.yml.tmpl
│       │   │   └── grafana.star
│       │   ├── prometheus/
│       │   │   └── prometheus.star
│       │   └── pyroscope/
│       │       └── pyroscope.star
│       └── services/
│           ├── blockscout/
│           │   └── launcher.star
│           ├── service.star
│           ├── spamoor/
│           │   └── launcher.star
│           └── tx_fuzz/
│               └── launcher.star
├── log/
│   ├── mod.go
│   ├── noop/
│   │   ├── noop.go
│   │   └── noop_test.go
│   └── phuslu/
│       ├── buffer.go
│       ├── config.go
│       ├── formatter.go
│       ├── logger.go
│       ├── style.go
│       └── time.go
├── node-api/
│   ├── backend/
│   │   ├── backend.go
│   │   ├── backend_test.go
│   │   ├── getters.go
│   │   ├── interface.go
│   │   └── mocks/
│   │       └── genesis_state_processor.mock.go
│   ├── handlers/
│   │   ├── beacon/
│   │   │   ├── backend.go
│   │   │   ├── blob_test.go
│   │   │   ├── blobs.go
│   │   │   ├── block.go
│   │   │   ├── genesis.go
│   │   │   ├── genesis_test.go
│   │   │   ├── handler.go
│   │   │   ├── header.go
│   │   │   ├── header_test.go
│   │   │   ├── historical.go
│   │   │   ├── mocks/
│   │   │   │   └── backend.mock.go
│   │   │   ├── randao.go
│   │   │   ├── randao_test.go
│   │   │   ├── routes.go
│   │   │   ├── types/
│   │   │   │   ├── conversions.go
│   │   │   │   ├── request.go
│   │   │   │   └── response.go
│   │   │   ├── validators.go
│   │   │   ├── validators_balances.go
│   │   │   ├── validators_balances_test.go
│   │   │   ├── validators_filters.go
│   │   │   ├── validators_filters_test.go
│   │   │   ├── validators_test.go
│   │   │   ├── withdrawal.go
│   │   │   └── withdrawal_test.go
│   │   ├── builder/
│   │   │   ├── handler.go
│   │   │   └── routes.go
│   │   ├── cometbft/
│   │   │   ├── backend.go
│   │   │   ├── block.go
│   │   │   ├── cometbft_test.go
│   │   │   ├── handler.go
│   │   │   ├── mocks/
│   │   │   │   └── backend.mock.go
│   │   │   ├── routes.go
│   │   │   ├── signed_header.go
│   │   │   └── types.go
│   │   ├── config/
│   │   │   ├── handler.go
│   │   │   ├── routes.go
│   │   │   ├── spec.go
│   │   │   └── types/
│   │   │       └── response.go
│   │   ├── debug/
│   │   │   ├── backend.go
│   │   │   ├── handler.go
│   │   │   ├── routes.go
│   │   │   └── state.go
│   │   ├── error.go
│   │   ├── events/
│   │   │   ├── handler.go
│   │   │   └── routes.go
│   │   ├── handlers.go
│   │   ├── node/
│   │   │   ├── backend.go
│   │   │   ├── handler.go
│   │   │   ├── mocks/
│   │   │   │   └── backend.mock.go
│   │   │   ├── node.go
│   │   │   ├── node_test.go
│   │   │   ├── routes.go
│   │   │   └── types/
│   │   │       └── response.go
│   │   ├── proof/
│   │   │   ├── backend.go
│   │   │   ├── block_proposer.go
│   │   │   ├── handler.go
│   │   │   ├── merkle/
│   │   │   │   ├── beacon_state.go
│   │   │   │   ├── beacon_state_test.go
│   │   │   │   ├── generalized_indexes.go
│   │   │   │   ├── generalized_indexes_test.go
│   │   │   │   ├── merkle_test.go
│   │   │   │   ├── mock/
│   │   │   │   │   └── beacon_state.go
│   │   │   │   ├── proposer_index.go
│   │   │   │   ├── proposer_index_test.go
│   │   │   │   ├── testdata/
│   │   │   │   │   ├── empty_state_proof.json
│   │   │   │   │   ├── many_validators_proposer_index_proof.json
│   │   │   │   │   ├── many_validators_proposer_pubkey_proof_deneb.json
│   │   │   │   │   ├── many_validators_proposer_pubkey_proof_electra.json
│   │   │   │   │   ├── many_validators_validator_balance_proof.json
│   │   │   │   │   ├── many_validators_validator_credentials_proof.json
│   │   │   │   │   ├── non_empty_state_proof.json
│   │   │   │   │   ├── one_validator_proposer_index_proof.json
│   │   │   │   │   ├── one_validator_proposer_pubkey_proof_deneb.json
│   │   │   │   │   ├── one_validator_proposer_pubkey_proof_electra.json
│   │   │   │   │   ├── one_validator_validator_balance_proof.json
│   │   │   │   │   └── one_validator_validator_credentials_proof.json
│   │   │   │   ├── validator_balance.go
│   │   │   │   ├── validator_balance_test.go
│   │   │   │   ├── validator_credentials.go
│   │   │   │   ├── validator_credentials_test.go
│   │   │   │   ├── validator_pubkey.go
│   │   │   │   └── validator_pubkey_test.go
│   │   │   ├── routes.go
│   │   │   ├── types/
│   │   │   │   ├── interfaces.go
│   │   │   │   ├── request.go
│   │   │   │   └── response.go
│   │   │   ├── validator_balance.go
│   │   │   ├── validator_credentials.go
│   │   │   └── validator_pubkey.go
│   │   ├── routes.go
│   │   ├── types/
│   │   │   ├── errors.go
│   │   │   └── request.go
│   │   ├── utils/
│   │   │   ├── constants.go
│   │   │   ├── context.go
│   │   │   └── mappings.go
│   │   └── validator/
│   │       ├── handler.go
│   │       └── routes.go
│   ├── middleware/
│   │   ├── middleware.go
│   │   ├── request.go
│   │   └── response.go
│   └── server/
│       ├── config.go
│       └── server.go
├── node-core/
│   ├── builder/
│   │   ├── baseapp_options.go
│   │   ├── builder.go
│   │   └── options.go
│   ├── components/
│   │   ├── api.go
│   │   ├── attributes_factory.go
│   │   ├── availability_store.go
│   │   ├── backend.go
│   │   ├── blobs.go
│   │   ├── block_store.go
│   │   ├── chain_service.go
│   │   ├── cometbft_service.go
│   │   ├── config.go
│   │   ├── config_server.go
│   │   ├── deposit_contract.go
│   │   ├── deposit_store.go
│   │   ├── engine.go
│   │   ├── interfaces.go
│   │   ├── jwt_secret.go
│   │   ├── metrics/
│   │   │   └── sink.go
│   │   ├── node.go
│   │   ├── payload_builder.go
│   │   ├── reporting_service.go
│   │   ├── service_registry.go
│   │   ├── shutdown_service.go
│   │   ├── sidecars.go
│   │   ├── signer/
│   │   │   ├── errors.go
│   │   │   ├── legacy.go
│   │   │   └── signer.go
│   │   ├── signer.go
│   │   ├── state_processor.go
│   │   ├── storage/
│   │   │   └── storage.go
│   │   ├── store.go
│   │   ├── telemetry_service.go
│   │   ├── telemetry_sink.go
│   │   ├── trusted_setup.go
│   │   ├── types.go
│   │   └── validator_service.go
│   ├── node/
│   │   └── node.go
│   ├── services/
│   │   ├── registry/
│   │   │   ├── errors.go
│   │   │   ├── mocks/
│   │   │   │   ├── basic.mock.go
│   │   │   │   ├── commit_multistore_accessor.mock.go
│   │   │   │   ├── dispatcher.mock.go
│   │   │   │   └── registry_option.mock.go
│   │   │   ├── options.go
│   │   │   ├── registry.go
│   │   │   └── registry_test.go
│   │   ├── shutdown/
│   │   │   └── service..go
│   │   └── version/
│   │       ├── interfaces.go
│   │       └── version.go
│   └── types/
│       ├── mocks/
│       │   └── consensus_service.mock.go
│       └── node.go
├── observability/
│   └── telemetry/
│       └── service.go
├── payload/
│   ├── README.md
│   ├── attributes/
│   │   ├── factory.go
│   │   └── interfaces.go
│   ├── builder/
│   │   ├── builder.go
│   │   ├── config.go
│   │   ├── errors.go
│   │   ├── interfaces.go
│   │   ├── payload.go
│   │   └── payload_test.go
│   └── cache/
│       ├── payload_id.go
│       ├── payload_id_fuzz_test.go
│       └── payload_id_test.go
├── primitives/
│   ├── bytes/
│   │   ├── b.go
│   │   ├── b20.go
│   │   ├── b20_test.go
│   │   ├── b256.go
│   │   ├── b32.go
│   │   ├── b32_test.go
│   │   ├── b4.go
│   │   ├── b48.go
│   │   ├── b48_test.go
│   │   ├── b4_test.go
│   │   ├── b8.go
│   │   ├── b8_test.go
│   │   ├── b96.go
│   │   ├── b96_test.go
│   │   ├── b_test.go
│   │   ├── buffer/
│   │   │   ├── buffer.go
│   │   │   └── buffer_test.go
│   │   └── utils.go
│   ├── common/
│   │   ├── consensus.go
│   │   ├── consensus_test.go
│   │   ├── execution.go
│   │   ├── execution_test.go
│   │   ├── interfaces.go
│   │   ├── unused_type.go
│   │   └── unused_type_test.go
│   ├── constants/
│   │   ├── bls12_381.go
│   │   ├── constants.go
│   │   ├── eip4844.go
│   │   ├── misc.go
│   │   ├── operations_per_block.go
│   │   ├── payload.go
│   │   └── validator.go
│   ├── constraints/
│   │   └── ssz.go
│   ├── crypto/
│   │   ├── bls.go
│   │   ├── mocks/
│   │   │   └── bls_signer.mock.go
│   │   └── sha256/
│   │       └── sha256.go
│   ├── eip4844/
│   │   ├── blob.go
│   │   ├── blob_test.go
│   │   ├── kzg_commitment.go
│   │   ├── kzg_commitment_test.go
│   │   └── kzg_proof.go
│   ├── encoding/
│   │   ├── hex/
│   │   │   ├── bytes.go
│   │   │   ├── bytes_test.go
│   │   │   ├── const.go
│   │   │   ├── errors.go
│   │   │   ├── format.go
│   │   │   ├── format_test.go
│   │   │   ├── nibble.go
│   │   │   ├── u64.go
│   │   │   └── u64_test.go
│   │   ├── json/
│   │   │   └── json.go
│   │   └── ssz/
│   │       ├── schema/
│   │       │   ├── common.go
│   │       │   ├── definitions.go
│   │       │   ├── field.go
│   │       │   └── id.go
│   │       └── utils.go
│   ├── math/
│   │   ├── errors.go
│   │   ├── log/
│   │   │   ├── log.go
│   │   │   └── log_test.go
│   │   ├── pow/
│   │   │   ├── pow.go
│   │   │   └── pow_test.go
│   │   ├── u256.go
│   │   ├── u64.go
│   │   └── u64_test.go
│   ├── merkle/
│   │   ├── errors.go
│   │   ├── hasher.go
│   │   ├── hasher_fuzz_test.go
│   │   ├── hasher_test.go
│   │   ├── index.go
│   │   ├── index_test.go
│   │   ├── object_path.go
│   │   ├── object_path_test.go
│   │   ├── proof.go
│   │   ├── root_hasher.go
│   │   ├── root_hasher_test.go
│   │   ├── tree.go
│   │   ├── tree_fuzz_test.go
│   │   ├── tree_test.go
│   │   ├── utils.go
│   │   └── zero/
│   │       └── zero.go
│   ├── net/
│   │   ├── http/
│   │   │   └── errors.go
│   │   ├── json-rpc/
│   │   │   └── errors.go
│   │   ├── jwt/
│   │   │   ├── errors.go
│   │   │   ├── jwt.go
│   │   │   └── jwt_test.go
│   │   └── url/
│   │       └── url.go
│   ├── transition/
│   │   ├── context.go
│   │   ├── validator_update.go
│   │   └── validator_update_test.go
│   └── version/
│       ├── comparable.go
│       ├── comparable_test.go
│       ├── name.go
│       ├── supported.go
│       └── versions.go
├── scripts/
│   ├── build/
│   │   ├── build.mk
│   │   ├── codegen.mk
│   │   ├── constants.mk
│   │   ├── devtools.mk
│   │   ├── golines.sh
│   │   ├── help.mk
│   │   ├── linting.mk
│   │   ├── proto_generate_pulsar.sh
│   │   ├── protobuf.mk
│   │   ├── release.mk
│   │   └── testing.mk
│   └── rollback_cl.sh
├── state-transition/
│   └── core/
│       ├── README.md
│       ├── core_test.go
│       ├── errors.go
│       ├── interfaces.go
│       ├── metrics.go
│       ├── mocks/
│       │   └── execution_engine.mock.go
│       ├── state/
│       │   ├── constants.go
│       │   ├── interfaces.go
│       │   ├── metrics.go
│       │   ├── parent_proposer_pubkey.go
│       │   ├── statedb.go
│       │   └── statedb_test.go
│       ├── state_processor.go
│       ├── state_processor_exits.go
│       ├── state_processor_fixes.go
│       ├── state_processor_forks.go
│       ├── state_processor_genesis.go
│       ├── state_processor_genesis_test.go
│       ├── state_processor_payload.go
│       ├── state_processor_payload_test.go
│       ├── state_processor_randao.go
│       ├── state_processor_signature.go
│       ├── state_processor_staking.go
│       ├── state_processor_staking_test.go
│       ├── state_processor_test.go
│       ├── state_processor_validators.go
│       ├── state_processor_withdrawals.go
│       ├── state_processor_withdrawals_test.go
│       ├── validation_deposits.go
│       └── validation_deposits_test.go
├── storage/
│   ├── beacondb/
│   │   ├── eth1.go
│   │   ├── fork.go
│   │   ├── history.go
│   │   ├── index/
│   │   │   ├── validator.go
│   │   │   └── validator_test.go
│   │   ├── keys/
│   │   │   └── keys.go
│   │   ├── kvstore.go
│   │   ├── randao.go
│   │   ├── registry.go
│   │   ├── registry_test.go
│   │   ├── slashing.go
│   │   ├── staking_test.go
│   │   ├── versioning.go
│   │   └── withdrawals.go
│   ├── block/
│   │   ├── config.go
│   │   ├── interfaces.go
│   │   ├── store.go
│   │   └── store_test.go
│   ├── db/
│   │   └── db.go
│   ├── deposit/
│   │   ├── common/
│   │   │   └── synced_db.go
│   │   ├── store.go
│   │   └── v1/
│   │       ├── provider.go
│   │       ├── store.go
│   │       └── store_test.go
│   ├── encoding/
│   │   ├── ssz.go
│   │   └── u64.go
│   ├── errors.go
│   ├── filedb/
│   │   ├── db.go
│   │   ├── db_options.go
│   │   ├── db_test.go
│   │   ├── range_db.go
│   │   └── range_db_test.go
│   ├── interfaces/
│   │   ├── db.go
│   │   └── mocks/
│   │       └── db.mock.go
│   └── kv_store_service.go
└── testing/
    ├── benchmarks/
    │   └── logger_benchmark_test.go
    ├── e2e/
    │   ├── .gitignore
    │   ├── README.md
    │   ├── config/
    │   │   ├── config.go
    │   │   └── defaults.go
    │   ├── standard/
    │   │   ├── beacon_api_test.go
    │   │   ├── blob_test.go
    │   │   ├── comet_api_test.go
    │   │   ├── inflation_test.go
    │   │   ├── proofs_test.go
    │   │   ├── setup_test.go
    │   │   ├── staking_test.go
    │   │   └── withdrawal_test.go
    │   └── suite/
    │       ├── constants.go
    │       ├── errors.go
    │       ├── options.go
    │       ├── setup.go
    │       ├── suite.go
    │       └── types/
    │           ├── account.go
    │           ├── account_test.go
    │           ├── beacon_client.go
    │           ├── consensus_client.go
    │           ├── errors.go
    │           ├── execution_client.go
    │           └── tx/
    │               └── eip4844.go
    ├── files/
    │   ├── entrypoint.sh
    │   ├── eth-genesis.json
    │   ├── jwt.hex
    │   ├── kzg-trusted-setup.json
    │   ├── spec.toml
    │   ├── test_data.json
    │   ├── test_data_batch.json
    │   └── test_data_incorrect_proof.json
    ├── forge-script/
    │   ├── Makefile
    │   ├── README.md
    │   ├── dependency/
    │   │   └── dependency.sh
    │   ├── forge-config.yaml
    │   ├── kurtosis.yml
    │   └── main.star
    ├── networks/
    │   ├── 80069/
    │   │   ├── app.toml
    │   │   ├── cl-seeds.txt
    │   │   ├── client.toml
    │   │   ├── config.toml
    │   │   ├── el-bootnodes.txt
    │   │   ├── el-peers.txt
    │   │   ├── eth-genesis.json
    │   │   ├── genesis.json
    │   │   ├── kzg-trusted-setup.json
    │   │   └── spec.toml
    │   └── 80094/
    │       ├── app.toml
    │       ├── client.toml
    │       ├── config.toml
    │       ├── el-bootnodes.txt
    │       ├── el-peers.txt
    │       ├── eth-genesis.json
    │       ├── genesis.json
    │       ├── kzg-trusted-setup.json
    │       └── spec.toml
    ├── quick/
    │   ├── compare_test.go
    │   └── execution_payload_test.go
    ├── simulated/
    │   ├── chaos_test.go
    │   ├── components.go
    │   ├── el-genesis-files/
    │   │   ├── eth-genesis.json
    │   │   ├── pectra-eth-genesis.json
    │   │   └── pectra-fork-genesis.json
    │   ├── execution/
    │   │   ├── execnode.go
    │   │   ├── geth.go
    │   │   ├── resource.go
    │   │   ├── reth.go
    │   │   └── simulation_client.go
    │   ├── homedir.go
    │   ├── malicious_consensus_test.go
    │   ├── malicious_proposer_test.go
    │   ├── orphaned_blobs_test.go
    │   ├── payload_cache_test.go
    │   ├── pectra_fork_test.go
    │   ├── pectra_genesis_test.go
    │   ├── pectra_withdrawal_test.go
    │   ├── rpc_errors_test.go
    │   ├── simcomet.go
    │   ├── simulated_test.go
    │   ├── testnode.go
    │   ├── transformers.go
    │   ├── utils.go
    │   └── valid_chain_test.go
    ├── state-transition/
    │   ├── README.md
    │   └── state-transition.go
    └── utils/
        ├── .gitkeep
        └── generate.go

================================================
FILE CONTENTS
================================================

================================================
FILE: .dockerignore
================================================
assets/
build/
bin/
docs/
networks/
proto/
tools/
kurtosis/
testing/
.github/
.git/
.vscode/
*.md
contracts/
docs/
scripts/


================================================
FILE: .gitattributes
================================================
docs/** linguist-vendored

================================================
FILE: .github/workflows/berachain_release.asc
================================================
-----BEGIN PGP PUBLIC KEY BLOCK-----

mDMEaIky1hYJKwYBBAHaRw8BAQdAnxP3mNWC+miF0OKvOg4+BzzswbrTWLbluSJU
+NBib3q0H2NhbGJlcmEgPGNhbGJlcmFAYmVyYWNoYWluLmNvbT6ImQQTFgoAQQIb
AwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgBYhBPzFjSePGuMIYGS4P/GUiPGD
4kvxBQJpr+YaBQkBnVpEAAoJEPGUiPGD4kvxil4A/jJqgaUlW7Yk1G4joQnAE7FS
1RotqI2olJa2f7Vt33VEAP99Bi4TkSUwQpx6pKHRggrJ0aBEJg2eZXQd7AeTPWmL
ALg4BGiJMtYSCisGAQQBl1UBBQEBB0A6onCspxjhXI7X13LHlUYQxYVyzUDamgVP
hXYTLZ1QEAMBCAeIfgQYFgoAJhYhBPzFjSePGuMIYGS4P/GUiPGD4kvxBQJoiTLW
AhsMBQkAdqcAAAoJEPGUiPGD4kvxWOAA/0IedfbPuCJU/IWo+gxCZMl9Fb7oVA4L
v9lMBtnspGsxAQDRX3fFP/Bv96wHlUWQHg01TSaWNyTQa5dTpjEcLxnXCQ==
=EVlI
-----END PGP PUBLIC KEY BLOCK-----


================================================
FILE: .github/workflows/docker-nightly-preconf.yml
================================================
# SPDX-License-Identifier: MIT
#
# Copyright (c) 2025 Berachain Foundation
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the "Software"), to deal in the Software without
# restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following
# conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.

name: Docker Nightly Preconf

on:
  schedule:
    - cron: "0 1 * * *"
  workflow_dispatch:

env:
  GHCR_REGISTRY: ghcr.io
  VERSION: nightly-preconf

jobs:
  build-and-push:
    runs-on:
      labels: ubuntu-24.04-beacon-kit
    permissions:
      id-token: write
      contents: read
      packages: write
      attestations: write
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          ref: preconf-dev

      - name: Build Docker image
        run: |
          make build-docker VERSION=${{ env.VERSION }}

      - name: Authenticate to GitHub Container Registry
        uses: docker/login-action@v3
        with:
          registry: ${{ env.GHCR_REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Push Docker image
        run: |
          make push-docker-github VERSION=${{ env.VERSION }}


================================================
FILE: .github/workflows/pipeline.yml
================================================
# SPDX-License-Identifier: MIT
#
# Copyright (c) 2025 Berachain Foundation
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the "Software"), to deal in the Software without
# restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following
# conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.

name: pipeline

on:
  push:
    branches:
      - main
      - preconf-dev
    tags:
      - "v*"
  pull_request:
  merge_group:

concurrency:
  group: ci-${{ github.ref }}-tests
  # We don't want to cancel in progress on main. This is to allow
  # us to debug main if a bad commit is pushed.
  # Case 1: The base branch is main and the event triggered via merge group => we DO NOT want to cancel in progress
  # Case 2: The reference branch is not main => we want to cancel in progress
  cancel-in-progress: ${{ !(github.base_ref == 'refs/heads/main' && github.event_name == 'merge_group') || github.ref != 'refs/heads/main' }}

env:
  GHCR_REGISTRY: ghcr.io
  PUSH_DOCKER_IMAGE: ${{ (github.base_ref == github.head_ref && github.event_name == 'push') || github.ref == 'refs/tags/v*'}}
  VERSION: ${{ github.ref_name }}

jobs:
  # -------------------------------------------------------------------------- #
  #                                Main Pipeline                               #
  # -------------------------------------------------------------------------- #

  ci:
    strategy:
      matrix:
        args:
          - "build"
          - "lint"
          - "slither"
          - "gosec"
          - "nilaway"
          - "vulncheck"
          - "markdownlint"
          - "generate-check"
          - "tidy-sync-check"
          - "test-unit-cover"
          - "test-unit-bench"
          - "test-unit-fuzz"
          - "test-forge-cover"
          - "test-forge-fuzz"
        os:
          - ubuntu-24.04-beacon-kit
    name: ${{ matrix.args }}
    runs-on:
      labels: ${{ matrix.os }}
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: Install Foundry
        uses: foundry-rs/foundry-toolchain@v1
        with:
          version: v1.3.1
        if: ${{ matrix.args == 'lint' || matrix.args == 'generate-check' || matrix.args == 'test-forge-cover' || matrix.args == 'test-forge-fuzz' }}

      - name: Setup Golang
        uses: actions/setup-go@v5
        with:
          go-version-file: go.mod
          check-latest: true
          cache-dependency-path: "**/*.sum"
        if: ${{ !(matrix.args == 'test-forge-cover' || matrix.args == 'test-forge-fuzz') }}

      - name: Run ${{ matrix.args }}
        run: |
          make ${{ matrix.args }}
        env:
          GOPATH: /home/runner/go

      # If running unit test coverage, merge the two coverage files
      - name: Merge Coverage Reports for Unit Tests
        if: ${{ matrix.args == 'test-unit-cover' }}
        run: |
          # Install gocovmerge
          go install github.com/wadey/gocovmerge@latest
          # Merge the two coverage files
          gocovmerge test-unit-cover.txt test-simulated.txt > coverage-merged.txt

      # Upload merged coverage for unit tests
      - name: Upload Unit Test Coverage to Codecov
        if: ${{ matrix.args == 'test-unit-cover' }}
        uses: codecov/codecov-action@v2
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          files: coverage-merged.txt

  # -------------------------------------------------------------------------- #
  #                                 E2E Testing                                #
  # -------------------------------------------------------------------------- #

  ci-e2e:
    strategy:
      fail-fast: false
      matrix:
        args:
          - "test-e2e-standard"
        os:
          - ubuntu-24.04-e2e
    name: ${{ matrix.args }}
    runs-on:
      labels: ${{ matrix.os }}
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          submodules: recursive
      - name: Check if Docker Hub credentials exist
        id: check-docker-credentials
        run: |
          if [ "${{ secrets.DOCKERHUB_USERNAME }}" != "" ] && [ "${{ secrets.DOCKERHUB_TOKEN }}" != "" ]; then
            echo "has_credentials=true" >> $GITHUB_OUTPUT
          fi
        shell: bash
      - name: Login to Docker Hub
        uses: docker/login-action@v3.4.0
        if: steps.check-docker-credentials.outputs.has_credentials == 'true'
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: Login to GHCR
        uses: docker/login-action@v3.4.0
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Setup Golang
        uses: actions/setup-go@v5
        with:
          go-version-file: go.mod
          check-latest: true
          cache-dependency-path: "**/*.sum"
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      - name: Install Kurtosis
        run: |
          KURTOSIS_VERSION=$(go list -m -f '{{.Version}}' github.com/kurtosis-tech/kurtosis/api/golang | sed 's/^v//')
          echo "Installing kurtosis-cli ${KURTOSIS_VERSION}"
          curl -sL "https://github.com/kurtosis-tech/kurtosis-cli-release-artifacts/releases/download/${KURTOSIS_VERSION}/kurtosis-cli_${KURTOSIS_VERSION}_linux_amd64.tar.gz" | tar xz -C /tmp
          sudo mv /tmp/kurtosis /usr/local/bin/kurtosis
          kurtosis version
          docker info
          for img in kurtosistech/engine:1.4.3 timberio/vector:0.31.0-debian traefik:2.10.6 alpine:3.17; do
            docker pull $img
          done
          kurtosis engine start
      - name: Run ${{ matrix.args }}
        run: |
          make ${{ matrix.args }}
        env:
          GOPATH: /home/runner/go

  # -------------------------------------------------------------------------- #
  #                       Docker Container Build and Push                      #
  # -------------------------------------------------------------------------- #

  build-and-push-container:
    runs-on:
      labels: ubuntu-24.04-beacon-kit
    permissions:
      id-token: write
      contents: read
      packages: write
      attestations: write
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Echo GitHub Context Variables
        env:
          GITHUB_ACTOR: ${{ github.actor }}
          GITHUB_REPOSITORY: ${{ github.repository }}
          GITHUB_EVENT_NAME: ${{ github.event_name }}
          GITHUB_SHA: ${{ github.sha }}
          GITHUB_REF: ${{ github.ref }}
          GITHUB_WORKFLOW: ${{ github.workflow }}
          GITHUB_ACTION: ${{ github.action }}
          GITHUB_RUN_ID: ${{ github.run_id }}
          GITHUB_RUN_NUMBER: ${{ github.run_number }}
          GITHUB_JOB: ${{ github.job }}
          GITHUB_SERVER_URL: ${{ github.server_url }}
          GITHUB_API_URL: ${{ github.api_url }}
          GITHUB_GRAPHQL_URL: ${{ github.graphql_url }}
          GITHUB_HEAD_REF: ${{ github.head_ref }}
          GITHUB_BASE_REF: ${{ github.base_ref }}
          PUSH_DOCKER_IMAGE: ${{ env.PUSH_DOCKER_IMAGE }}
          VERSION: ${{ env.VERSION }}
        run: |
          echo "GitHub Actor: \"$GITHUB_ACTOR\""
          echo "GitHub Repository: \"$GITHUB_REPOSITORY\""
          echo "GitHub Event Name: \"$GITHUB_EVENT_NAME\""
          echo "GitHub SHA: \"$GITHUB_SHA\""
          echo "GitHub Ref: \"$GITHUB_REF\""
          echo "GitHub Workflow: \"$GITHUB_WORKFLOW\""
          echo "GitHub Action: \"$GITHUB_ACTION\""
          echo "GitHub Run ID: \"$GITHUB_RUN_ID\""
          echo "GitHub Run Number: \"$GITHUB_RUN_NUMBER\""
          echo "GitHub Job: \"$GITHUB_JOB\""
          echo "GitHub Server URL: \"$GITHUB_SERVER_URL\""
          echo "GitHub API URL: \"$GITHUB_API_URL\""
          echo "GitHub GraphQL URL: \"$GITHUB_GRAPHQL_URL\""
          echo "GitHub Head Ref: \"$GITHUB_HEAD_REF\""
          echo "GitHub Base Ref: \"$GITHUB_BASE_REF\""
          echo "PUSH_DOCKER_IMAGE: \"$PUSH_DOCKER_IMAGE\""
          echo "VERSION: \"$VERSION\""
      - name: Build Docker image
        run: |
          make build-docker

      - if: ${{ env.PUSH_DOCKER_IMAGE == 'true' }}
        name: Authenticate to GitHub Container Registry
        uses: docker/login-action@v3
        with:
          registry: ${{ env.GHCR_REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - if: ${{ env.PUSH_DOCKER_IMAGE == 'true' }}
        name: Push Docker image
        run: |
          make push-docker-github


================================================
FILE: .github/workflows/release.yaml
================================================
# SPDX-License-Identifier: MIT
#
# Copyright (c) 2025 Berachain Foundation
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the "Software"), to deal in the Software without
# restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following
# conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.

name: release

on:
  push:
    tags:
      - "v*" 

env:
  REPO_NAME: ${{ github.repository }} 
  IMAGE_NAME: ${{ github.repository }}
  GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

jobs:
  # Job to extract version
  extract-version:
    name: extract version
    runs-on: ubuntu-latest
    steps:
      - name: Extract version
        run: echo "VERSION=$(echo ${GITHUB_REF#refs/tags/})" >> $GITHUB_OUTPUT
        id: extract_version
    outputs:
      VERSION: ${{ steps.extract_version.outputs.VERSION }}
  
  # Job to build release
  build:
    name: build release
    needs: extract-version
    strategy:
      matrix:
        configs:
          - arch: arm64
            target-os: linux
            runs-on: ubuntu-24.04-arm
          - arch: amd64
            target-os: linux
            runs-on: ubuntu-latest
          - arch: arm64
            target-os: darwin
            runs-on: macos-14
        build:
          - binary: beacond
    runs-on: ${{ matrix.configs.runs-on }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-go@v5
        with:
          go-version-file: go.mod
        env:
          GOOS: ${{ matrix.configs.target-os }}
          GOARCH: ${{ matrix.configs.arch }}

      - name: Import GPG key
        run: |
          mkdir -p ~/.gnupg
          chmod 700 ~/.gnupg
          echo "allow-loopback-pinentry" >> ~/.gnupg/gpg-agent.conf
          echo "$GPG_KEY" | gpg --batch --import
          gpg-connect-agent reloadagent /bye || true
        env:
          GPG_KEY: ${{ secrets.GPG_KEY }}

      - name: Build ${{ matrix.build.binary }}
        run: |
          make build-${{ matrix.configs.target-os }}-${{ matrix.configs.arch }}-${{ needs.extract-version.outputs.VERSION }}
          tar -czvf ${{ matrix.build.binary }}-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.configs.target-os }}-${{ matrix.configs.arch }}.tar.gz -C build/bin .

      - name: Sign binary archive
        run: gpg --batch --yes --pinentry-mode=loopback --passphrase "$GPG_KEY_PASSPHRASE" --detach-sign ${{ matrix.build.binary }}-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.configs.target-os }}-${{ matrix.configs.arch }}.tar.gz
        env:
          GPG_KEY_PASSPHRASE: ${{ secrets.GPG_KEY_PASSPHRASE }}
      
      # Upload archives and signatures
      - name: Upload archive
        uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.build.binary }}-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.configs.target-os }}-${{ matrix.configs.arch }}.tar.gz
          path: |
            ${{ matrix.build.binary }}-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.configs.target-os }}-${{ matrix.configs.arch }}.tar.gz
      - name: Upload archive signature
        uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.build.binary }}-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.configs.target-os }}-${{ matrix.configs.arch }}.tar.gz.sig
          path: |
            ${{ matrix.build.binary }}-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.configs.target-os }}-${{ matrix.configs.arch }}.tar.gz.sig

  # Job to draft release
  draft-release:
    name: draft release
    needs: [build, extract-version]
    runs-on: ubuntu-latest
    env:
      VERSION: ${{ needs.extract-version.outputs.VERSION }}
    permissions:
      contents: write # Required to post the release
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0 # This is necessary for generating the changelog. It has to come before "Download Artifacts" or else it deletes the artifacts.
      - name: Download artifacts
        uses: actions/download-artifact@v4
      - name: Generate full changelog
        id: changelog
        run: |
          echo "CHANGELOG<<EOF" >> $GITHUB_OUTPUT
          echo "$(git log --pretty=format:"- %s" $(git describe --tags --abbrev=0 ${{ env.VERSION }}^)..${{ env.VERSION }})" >> $GITHUB_OUTPUT
          echo "EOF" >> $GITHUB_OUTPUT
      - name: Create release draft
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        # The formatting here is borrowed from Reth (which is borrowed from Lighthouse (which is borrowed from OpenEthereum)):
        # https://github.com/openethereum/openethereum/blob/6c2d392d867b058ff867c4373e40850ca3f96969/.github/workflows/build.yml
        run: |
          body=$(cat <<- "ENDBODY"
          ![image](https://res.cloudinary.com/duv0g402y/image/upload/v1718034312/BeaconKitBanner.png)
          ## Testing Checklist (DELETE ME)

          - [ ] Run on testnet for 1-3 days.
          - [ ] Resync a mainnet node.
          - [ ] Ensure all CI checks pass.

          ## Release Checklist (DELETE ME)

          - [ ] Ensure all crates have had their versions bumped.
          - [ ] Write the summary.
          - [ ] Fill out the update priority.
          - [ ] Ensure all binaries have been added.
          - [ ] Prepare release posts (Twitter, ...).

          ## Summary

          Add a summary, including:

          - Critical bug fixes
          - New features
          - Any breaking changes (and what to expect)

          ## Update Priority

          This table provides priorities for which classes of users should update particular components.

          | User Class           | Priority        |
          |----------------------|-----------------|
          | Payload Builders     | <TODO>          |
          | Non-Payload Builders | <TODO>          |

          ## All Changes

          ${{ steps.changelog.outputs.CHANGELOG }}

          ## Binaries

          | System | Architecture | Binary | PGP Signature |
          |:---:|:---:|:---:|:---|
          | <img src="https://simpleicons.org/icons/linux.svg" style="width: 32px;"/> | amd64 | [beacond-${{ env.VERSION }}-linux-amd64](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/beacond-${{ env.VERSION }}-linux-amd64.tar.gz) | [Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/beacond-${{ env.VERSION }}-linux-amd64.tar.gz.sig) |
          | <img src="https://simpleicons.org/icons/linux.svg" style="width: 32px;"/> | arm64 | [beacond-${{ env.VERSION }}-linux-arm64](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/beacond-${{ env.VERSION }}-linux-arm64.tar.gz) | [Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/beacond-${{ env.VERSION }}-linux-arm64.tar.gz.sig) |
          | <img src="https://simpleicons.org/icons/apple.svg" style="width: 32px;"/> | arm64 | [beacond-${{ env.VERSION }}-darwin-arm64](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/beacond-${{ env.VERSION }}-darwin-arm64.tar.gz) | [Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/beacond-${{ env.VERSION }}-darwin-arm64.tar.gz.sig) |          
          | **System** | **Option** | - | **Resource** |
          | <img src="https://simpleicons.org/icons/docker.svg" style="width: 32px;"/> | Docker | | [${{ env.IMAGE_NAME }}](https://ghcr.io/berachain/beacon-kit) |
          
          ### Verifying signatures
          Use gpg to verify the signature on these binary archives. This is important to make sure that the content you\'ve downloaded is legitimate. gpg can be installed with most package managers. For example:
          - `brew install gpg` on mac
          - `apt install gpg` on Ubuntu/Debian

          Once gpg is installed, import our public key into its database and verify:
          - [Download signing public key from here](https://raw.githubusercontent.com/${{ github.repository }}/${{ github.ref_name }}/.github/workflows/berachain_release.asc).
          - Run `gpg --import berachain_release.asc`
          - Verify with `gpg --verify {signature}.sig {binary}.tar.gz`
          - This message is expected: `WARNING: This key is not certified with a trusted signature!`
          - To resolve the warning, trust the key by signing with your own keypair. `gpg --lsign-key <keyid>`

          ENDBODY
          )
          assets=()
          for asset in ./*beacond-*.tar.gz*; do
              assets+=("$asset/$asset")
          done
          tag_name="${{ env.VERSION }}"
          echo "$body" | gh release create --draft -t "BeaconKit $tag_name" -F "-" "$tag_name" "${assets[@]}"


================================================
FILE: .github/workflows/vuln-and-dep-check.yml
================================================
# SPDX-License-Identifier: MIT
#
# Copyright (c) 2025 Berachain Foundation
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the "Software"), to deal in the Software without
# restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following
# conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.

name: deps

on:
  schedule:
    - cron: '0 8 * * *' # daily at 08:00 UTC
  workflow_dispatch:

# Cancel any in-progress run if a new one starts on the same branch.
concurrency:
  group: vuln-and-dep-check-${{ github.ref }}
  cancel-in-progress: true

permissions:
  contents: read

jobs:
  # Catch newly published vulnerabilities in dependencies via symbol-level analysis.
  govulncheck:
    runs-on:
      labels: ubuntu-24.04-beacon-kit
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
      - uses: actions/setup-go@v5
        with:
          go-version-file: go.mod
          check-latest: true
          cache-dependency-path: "**/*.sum"
      - run: make vulncheck

  # Run tests with locked and latest deps to catch breakage from both.
  test-deps:
    runs-on:
      labels: ubuntu-24.04-beacon-kit
    strategy:
      fail-fast: false # Always run both variants so one failure doesn't hide the other.
      matrix:
        deps: [locked, latest]
    name: test-${{ matrix.deps }}-deps
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
      - uses: actions/setup-go@v5
        with:
          go-version-file: go.mod
          check-latest: true
          cache-dependency-path: "**/*.sum"
      - if: matrix.deps == 'latest'
        name: Update dependencies to latest (skip replace-pinned modules)
        run: |
          go list -m -f '{{if not .Indirect}}{{.Path}}{{end}}' all \
            | grep -vE 'berachain/beacon-kit|cosmossdk\.io/|cosmos/cosmos-sdk|cometbft/|karalabe/ssz|kurtosis-tech/' \
            | xargs go get -u -t
          go mod tidy
      - run: make test-unit
        env:
          GOPATH: /home/runner/go


================================================
FILE: .gitignore
================================================
###########
# Project #
###########

# Outputs
bin/
./out/
data/
site/
contracts/cache
contracts/out
tmp/
cscope.files

##########
# Golang #
##########

# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
*.info

# Test binary, built with `go test -c`
*.test

# Output of the go coverage tool, specifically when used with LiteIDE
*.out

# Dependency directories (remove the comment below to include it)
go.work.sum

##########
# Linux  #
##########

*~

# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*

# KDE directory preferences
.directory

# Linux trash folder which might appear on any partition or disk
.Trash-*

# .nfs files are created when an open file is removed but is still being accessed
.nfs*

# Version files created during code generation
v*.*.*

###########
# Windows #
###########

# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db

# Dump file
*.stackdump

# Folder config file
[Dd]esktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp

# Windows shortcuts
*.lnk

#########
# macOS #
#########

# General
.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon

# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

##########
# VSCODE #
##########

.vscode/*
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace

# Local History for Visual Studio Code
.history/

#############
# JetBrains #
#############

.idea
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf

# AWS User-specific
.idea/**/aws.xml

# Generated files
.idea/**/contentModel.xml

# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml

# Mongo Explorer plugin
.idea/**/mongoSettings.xml

# File-based project format
*.iws

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Cursive Clojure plugin
.idea/replstate.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

# Editor-based Rest Client
.idea/httpRequests

# general
vue/node_modules
vue/dist
release/
.idea/
data/
.DS_Store
*.pyc
.vscode/*.log

# upgrades
pkg/**/.*.yaml
*/**/.tmp/
.tmp/
/tmp

# forge
*/**/solidity-files-cache.json
contracts/out/
*/**/broadcast
contracts/out/**/*.bin

# e2e
e2e/**/*.txt

# hive
!e2e/hive/**/*.json

# geth
*.rlp

# cosmos
.testnets/
*.dot
*.log

# xml
*.xml

#next
node_modules
.next
next-env.d.ts
.env
out

# docker test
**/temp/

# testing coverage
coverage-test-unit-cover.txt
coverage-merged.txt
test-simulated.txt
test-unit-cover.txt
temp-test-simulated.txt
temp-test-unit-cover.txt
.vercel

# server dev env for Air
.air.toml


================================================
FILE: .gitmodules
================================================
[submodule "contracts/lib/solady"]
	path = contracts/lib/solady
	url = https://github.com/Vectorized/solady
[submodule "contracts/lib/forge-std"]
	path = contracts/lib/forge-std
	url = https://github.com/foundry-rs/forge-std


================================================
FILE: .golangci.yaml
================================================
# This code is licensed under the terms of the MIT license https://opensource.org/license/mit
# Copyright (c) 2021 Marat Reymers

## Golden config for golangci-lint v1.58.2
#
# This is the best config for golangci-lint based on my experience and opinion.
# It is very strict, but not extremely strict.
# Feel free to adapt and change it for your needs.

run:
  # Timeout for analysis, e.g. 30s, 5m.
  # Default: 1m
  timeout: 3m
  build-tags: ["test"]


# This file contains only configs which differ from defaults.
# All possible options can be found here https://github.com/golangci/golangci-lint/blob/master/.golangci.reference.yml
linters-settings:
  cyclop:
    # The maximal code complexity to report.
    # Default: 10
    max-complexity: 30
    # The maximal average package complexity.
    # If it's higher than 0.0 (float) the check is enabled
    # Default: 0.0
    package-average: 10.0

  errcheck:
    # Report about not checking of errors in type assertions: `a := b.(MyStruct)`.
    # Such cases aren't reported by default.
    # Default: false
    check-type-assertions: true

  paralleltest:
    # Ignore missing calls to `t.Parallel()` and only report incorrect uses of it.
    # Default: false
    ignore-missing: false
    # Ignore missing calls to `t.Parallel()` in subtests. Top-level tests are
    # still required to have `t.Parallel`, but subtests are allowed to skip it.
    # Default: false
    ignore-missing-subtests: true

  exhaustive:
    # Program elements to check for exhaustiveness.
    # Default: [ switch ]
    check:
      - switch
      - map
    # Presence of "default" case in switch statements satisfies exhaustiveness,
    # even if all enum members are not listed.
    # Default: false
    default-signifies-exhaustive: true

  exhaustruct:
    # List of regular expressions to exclude struct packages and their names from checks.
    # Regular expressions must match complete canonical struct package/name/structname.
    # Default: []
    exclude:
      # std libs
      - "^net/http.Client$"
      - "^net/http.Cookie$"
      - "^net/http.Request$"
      - "^net/http.Response$"
      - "^net/http.Server$"
      - "^net/http.Transport$"
      - "^net/url.URL$"
      - "^os/exec.Cmd$"
      - "^reflect.StructField$"
      # public libs
      - "^github.com/Shopify/sarama.Config$"
      - "^github.com/Shopify/sarama.ProducerMessage$"
      - "^github.com/mitchellh/mapstructure.DecoderConfig$"
      - "^github.com/prometheus/client_golang/.+Opts$"
      - "^github.com/spf13/cobra.Command$"
      - "^github.com/spf13/cobra.CompletionOptions$"
      - "^github.com/stretchr/testify/mock.Mock$"
      - "^github.com/testcontainers/testcontainers-go.+Request$"
      - "^github.com/testcontainers/testcontainers-go.FromDockerfile$"
      - "^golang.org/x/tools/go/analysis.Analyzer$"
      - "^google.golang.org/protobuf/.+Options$"
      - "^gopkg.in/yaml.v3.Node$"

  funlen:
    # Checks the number of lines in a function.
    # If lower than 0, disable the check.
    # Default: 60
    lines: 100
    # Checks the number of statements in a function.
    # If lower than 0, disable the check.
    # Default: 40
    statements: 50
    # Ignore comments when counting lines.
    # Default false
    ignore-comments: true

  gocognit:
    # Minimal code complexity to report.
    # Default: 30 (but we recommend 10-20)
    min-complexity: 20

  gocritic:
    # Settings passed to gocritic.
    # The settings key is the name of a supported gocritic checker.
    # The list of supported checkers can be find in https://go-critic.github.io/overview.
    settings:
      captLocal:
        # Whether to restrict checker to params only.
        # Default: true
        paramsOnly: false
      underef:
        # Whether to skip (*x).method() calls where x is a pointer receiver.
        # Default: true
        skipRecvDeref: false

  gomodguard:
    blocked:
      # List of blocked modules.
      # Default: []
      modules:
        - github.com/golang/protobuf:
            recommendations:
              - google.golang.org/protobuf
            reason: "see https://developers.google.com/protocol-buffers/docs/reference/go/faq#modules"
        - github.com/satori/go.uuid:
            recommendations:
              - github.com/google/uuid
            reason: "satori's package is not maintained"
        - github.com/gofrs/uuid:
            recommendations:
              - github.com/gofrs/uuid/v5
            reason: "gofrs' package was not go module before v5"


  govet:
    # Enable all analyzers.
    # Default: false
    enable-all: true
    # Disable analyzers by name.
    # Run `go tool vet help` to see all analyzers.
    # Default: []
    disable:
      - fieldalignment # too strict
    # Settings per analyzer.
    settings:
      shadow:
        # Whether to be strict about shadowing; can be noisy.
        # Default: false
        strict: true

  inamedparam:
    # Skips check for interface methods with only a single parameter.
    # Default: false
    skip-single-param: true

  lll:
    # Max line length, lines longer will be reported.
    # '\t' is counted as 1 character by default, and can be changed with the tab-width option.
    # Default: 120.
    line-length: 140
    # Tab width in spaces.
    # Default: 1
    tab-width: 1

  mnd:
    # List of function patterns to exclude from analysis.
    # Values always ignored: `time.Date`,
    # `strconv.FormatInt`, `strconv.FormatUint`, `strconv.FormatFloat`,
    # `strconv.ParseInt`, `strconv.ParseUint`, `strconv.ParseFloat`.
    # Default: []
    ignored-functions:
      - args.Error
      - flag.Arg
      - flag.Duration.*
      - flag.Float.*
      - flag.Int.*
      - flag.Uint.*
      - os.Chmod
      - os.Mkdir.*
      - os.OpenFile
      - os.WriteFile
      - prometheus.ExponentialBuckets.*
      - prometheus.LinearBuckets

  nakedret:
    # Make an issue if func has more lines of code than this setting, and it has naked returns.
    # Default: 30
    max-func-lines: 0

  nolintlint:
    # Exclude following linters from requiring an explanation.
    # Default: []
    allow-no-explanation: [ funlen, gocognit, lll ]
    # Enable to require an explanation of nonzero length after each nolint directive.
    # Default: false
    require-explanation: true
    # Enable to require nolint directives to mention the specific linter being suppressed.
    # Default: false
    require-specific: true

  perfsprint:
    # Optimizes into strings concatenation.
    # Default: true
    strconcat: true

  rowserrcheck:
    # database/sql is always checked
    # Default: []
    packages:
      - github.com/jmoiron/sqlx

  sloglint:
    # Enforce not using global loggers.
    # Values:
    # - "": disabled
    # - "all": report all global loggers
    # - "default": report only the default slog logger
    # Default: ""
    no-global: "all"
    # Enforce using methods that accept a context.
    # Values:
    # - "": disabled
    # - "all": report all contextless calls
    # - "scope": report only if a context exists in the scope of the outermost function
    # Default: ""
    context: "scope"

  tenv:
    # The option `all` will run against whole test files (`_test.go`) regardless of method/function signatures.
    # Otherwise, only methods that take `*testing.T`, `*testing.B`, and `testing.TB` as arguments are checked.
    # Default: false
    all: true


linters:
  disable-all: true
  enable:
    ## enabled by default
    - errcheck # checking for unchecked errors, these unchecked errors can be critical bugs in some cases
    - gosimple # specializes in simplifying a code
    - govet # reports suspicious constructs, such as Printf calls whose arguments do not align with the format string
    - ineffassign # detects when assignments to existing variables are not used
    - staticcheck # is a go vet on steroids, applying a ton of static analysis checks
    - typecheck # like the front-end of a Go compiler, parses and type-checks Go code
    - unused # checks for unused constants, variables, functions and types
    ## disabled by default
    - asasalint # checks for pass []any as any in variadic func(...any)
    - asciicheck # checks that your code does not contain non-ASCII identifiers
    - bidichk # checks for dangerous unicode character sequences
    - bodyclose # checks whether HTTP response body is closed successfully
    - canonicalheader # checks whether net/http.Header uses canonical header
    - cyclop # checks function and package cyclomatic complexity
    - dupl # tool for code clone detection
    - durationcheck # checks for two durations multiplied together
    - errname # checks that sentinel errors are prefixed with the Err and error types are suffixed with the Error
    - errorlint # finds code that will cause problems with the error wrapping scheme introduced in Go 1.13
    - exhaustive # checks exhaustiveness of enum switch statements
    - fatcontext # detects nested contexts in loops
    - forbidigo # forbids identifiers
    - funlen # tool for detection of long functions
    - gocheckcompilerdirectives # validates go compiler directive comments (//go:)
    - gochecknoglobals # checks that no global variables exist
    - gochecknoinits # checks that no init functions are present in Go code
    - gochecksumtype # checks exhaustiveness on Go "sum types"
    - gocognit # computes and checks the cognitive complexity of functions
    - goconst # finds repeated strings that could be replaced by a constant
    - gocritic # provides diagnostics that check for bugs, performance and style issues
    - gocyclo # computes and checks the cyclomatic complexity of functions
    - goimports # in addition to fixing imports, goimports also formats your code in the same style as gofmt
    # - gomoddirectives # manages the use of 'replace', 'retract', and 'excludes' directives in go.mod
    - gomodguard # allow and block lists linter for direct Go module dependencies. This is different from depguard where there are different block types for example version constraints and module recommendations
    - goprintffuncname # checks that printf-like functions are named with f at the end
    - gosec # inspects source code for security problems
    - intrange # finds places where for loops could make use of an integer range
    - lll # reports long lines
    - loggercheck # checks key value pairs for common logger libraries (kitlog,klog,logr,zap)
    - makezero # finds slice declarations with non-zero initial length
    - mirror # reports wrong mirror patterns of bytes/strings usage
    - mnd # detects magic numbers
    - musttag # enforces field tags in (un)marshaled structs
    - nakedret # finds naked returns in functions greater than a specified function length
    - nestif # reports deeply nested if statements
    - nilerr # finds the code that returns nil even if it checks that the error is not nil
    - nilnil # checks that there is no simultaneous return of nil error and an invalid value
    - noctx # finds sending http request without context.Context
    - nolintlint # reports ill-formed or insufficient nolint directives
    - nonamedreturns # reports all named returns
    - nosprintfhostport # checks for misuse of Sprintf to construct a host with port in a URL
    - perfsprint # checks that fmt.Sprintf can be replaced with a faster alternative
    - predeclared # finds code that shadows one of Go's predeclared identifiers
    - promlinter # checks Prometheus metrics naming via promlint
    - protogetter # reports direct reads from proto message fields when getters should be used
    - reassign # checks that package variables are not reassigned
    - revive # fast, configurable, extensible, flexible, and beautiful linter for Go, drop-in replacement of golint
    - rowserrcheck # checks whether Err of rows is checked successfully
    - sloglint # ensure consistent code style when using log/slog
    - spancheck # checks for mistakes with OpenTelemetry/Census spans
    - sqlclosecheck # checks that sql.Rows and sql.Stmt are closed
    - stylecheck # is a replacement for golint
    - testableexamples # checks if examples are testable (have an expected output)
    - usetesting # detects using os.Setenv instead of t.Setenv since Go1.17 (replaces deprecated tenv)
    - testifylint # checks usage of github.com/stretchr/testify
    - testpackage # makes you use a separate _test package
#    - tparallel # detects inappropriate usage of t.Parallel() method in your Go test codes. Replaced with paralleltest
    - unconvert # removes unnecessary type conversions
    - unparam # reports unused function parameters
    - usestdlibvars # detects the possibility to use variables/constants from the Go standard library
    - wastedassign # finds wasted assignment statements
    - whitespace # detects leading and trailing whitespace

    ## you may want to enable
    - decorder # checks declaration order and count of types, constants, variables and functions
    #- exhaustruct # [highly recommend to enable] checks if all structure fields are initialized
    - gci # controls golang package import order and makes it always deterministic
    #- ginkgolinter # [if you use ginkgo/gomega] enforces standards of using ginkgo and gomega
    #- godox # detects FIXME, TODO and other comment keywords
    - goheader # checks is file header matches to pattern
    #- inamedparam # [great idea, but too strict, need to ignore a lot of cases by default] reports interfaces with unnamed method parameters
    #- interfacebloat # checks the number of methods inside an interface
    #- ireturn # accept interfaces, return concrete types
    - prealloc # [premature optimization, but can be used in some cases] finds slice declarations that could potentially be preallocated
    #- tagalign # checks that struct tags are well aligned
    #- varnamelen # [great idea, but too many false positives] checks that the length of a variable's name matches its scope
    #- wrapcheck # checks that errors returned from external packages are wrapped
    - zerologlint # detects the wrong usage of zerolog that a user forgets to dispatch zerolog.Event

    ## disabled
    #- containedctx # detects struct contained context.Context field
    - contextcheck # [too many false positives] checks the function whether use a non-inherited context
    #- depguard # [replaced by gomodguard] checks if package imports are in a list of acceptable packages
    - dogsled # checks assignments with too many blank identifiers (e.g. x, _, _, _, := f())
    #- dupword # [useless without config] checks for duplicate words in the source code
    #- err113 # [too strict] checks the errors handling expressions
    #- errchkjson # [don't see profit + I'm against of omitting errors like in the first example https://github.com/breml/errchkjson] checks types passed to the json encoding functions. Reports unsupported types and optionally reports occasions, where the check for the returned error can be omitted
    #- execinquery # [deprecated] checks query string in Query function which reads your Go src files and warning it finds
    #- forcetypeassert # [replaced by errcheck] finds forced type assertions
    #- gofmt # [replaced by goimports] checks whether code was gofmt-ed
    #- gofumpt # [replaced by goimports, gofumports is not available yet] checks whether code was gofumpt-ed
    - gosmopolitan # reports certain i18n/l10n anti-patterns in your Go codebase
    - grouper # analyzes expression groups
    - importas # enforces consistent import aliases
    - maintidx # measures the maintainability index of each function
    - misspell # [useless] finds commonly misspelled English words in comments
    #- nlreturn # [too strict and mostly code is not more readable] checks for a new line before return and branch statements to increase code clarity
    - paralleltest # detects missing usage of t.Parallel() method in your Go test
    # - tagliatelle # checks the struct tags
    - thelper # detects golang test helpers without t.Helper() call and checks the consistency of test helpers
    #- wsl # [too strict and mostly code is not more readable] whitespace linter forces you to use empty lines


issues:
  # Maximum count of issues with the same text.
  # Set to 0 to disable.
  # Default: 3
  max-same-issues: 50

  exclude-rules:
    - source: "//noinspection"
      linters: [ gocritic ]
    - path: "_test\\.go"
      linters:
        - bodyclose
        - dupl
        - funlen
        - goconst
        - gosec
        - noctx
        - wrapcheck
        - gochecknoglobals
    # We exclude thelper for consensus types due to the usage of runForAllSupportedVersions where thelper falsely misses the usage of t.Helper()
    - path: "^consensus-types/types/.*\\.go$"
      linters:
        - thelper
  exclude-files:
    - "pkg/cometbft/cli/.*\\.go"
    - "pkg/cometbft/service/server/.*\\.go"
    # Copied/adapted from go-ethereum (geth); not worth linting.
    - "geth-primitives/types/.*\\.go"

================================================
FILE: .mockery.yaml
================================================
# SPDX-License-Identifier: MIT
#
# Copyright (c) 2025 Berachain Foundation
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the "Software"), to deal in the Software without
# restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following
# conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.

dir: "{{.InterfaceDir}}/mocks"
mockname: "{{.InterfaceNameCamel}}"
filename: "{{.InterfaceNameSnake}}.mock.go"
outpkg: "mocks"
resolve-type-alias: False # see https://vektra.github.io/mockery/latest/deprecations/#resolve-type-alias
issue-845-fix: True # see https://vektra.github.io/mockery/latest/deprecations/#issue-845-fix
packages:
  github.com/berachain/beacon-kit/execution/client/ethclient:
    config:
      recursive: True
      with-expecter: true
      include-regex: GethRPCClient
  github.com/berachain/beacon-kit/node-core/services/registry:
    config:
      recursive: True
      with-expecter: true
      all: True
  github.com/berachain/beacon-kit/storage/interfaces:
    config:
      recursive: False
      with-expecter: true
      all: True
  github.com/berachain/beacon-kit/consensus-types/types:
    config:
      recursive: False
      with-expecter: true
      all: True
  github.com/berachain/beacon-kit/storage/pruner:
    config:
      recursive: False
      with-expecter: true
      all: True
  github.com/berachain/beacon-kit/primitives/crypto:
    config:
      recursive: False
      with-expecter: true
      all: True
  github.com/berachain/beacon-kit/engine-primitives/engine-primitives:
    config:
      recursive: False
      with-expecter: true
      all: True
  github.com/berachain/beacon-kit/state-transition/core:
    config:
      recursive: False
      with-expecter: true
      include-regex: ExecutionEngine
  github.com/berachain/beacon-kit/beacon/blockchain:
    config:
      recursive: False
      with-expecter: true
      include-regex: LocalBuilder|StorageBackend
  github.com/berachain/beacon-kit/node-api/handlers/beacon:
    config:
      recursive: False
      with-expecter: true
      include-regex: ^Backend$
  github.com/berachain/beacon-kit/node-api/handlers/node:
    config:
      recursive: False
      with-expecter: true
      include-regex: ^Backend$
  github.com/berachain/beacon-kit/node-api/backend:
    config:
      recursive: False
      with-expecter: true
      include-regex: GenesisStateProcessor
  github.com/berachain/beacon-kit/node-core/types:
    config:
      recursive: False
      with-expecter: true
      include-regex: ConsensusService


================================================
FILE: .vscode/launch.json
================================================
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Init local devnet",
            "type": "go",
            "request": "launch",
            "preLaunchTask": "build",
            "mode": "exec",
            "program": "${workspaceFolder}/build/bin/beacond",
            "args": [
                "init",
                "localtestnet",
                "--beacon-kit.chain-spec=devnet",
                "--chain-id=beacond-2061",
                "--home=${workspaceFolder}/.tmp/beacond",
            ],
            "internalConsoleOptions": "openOnSessionStart",
            "presentation": {
                "group": "initialize",
                "order": 1
            },
        },
        {
            "name": "Add premined deposit",
            "type": "go",
            "request": "launch",
            "mode": "exec",
            "program": "${workspaceFolder}/build/bin/beacond",
            "preLaunchTask": "build",
            "args": [
                "genesis",
                "add-premined-deposit",
                "32000000000",
                "0x20f33ce90a13a4b5e7697e3544c3083b8f8a51d4",
                "--beacon-kit.chain-spec=devnet",
                "--home=${workspaceFolder}/.tmp/beacond",
            ],
            "internalConsoleOptions": "openOnSessionStart",
            "presentation": {
                "group": "initialize",
                "order": 2
            },
        },
        {
            "name": "Collect premined deposit",
            "type": "go",
            "request": "launch",
            "preLaunchTask": "build",
            "mode": "exec",
            "program": "${workspaceFolder}/build/bin/beacond",
            "args": [
                "genesis",
                "collect-premined-deposits",
                "--beacon-kit.chain-spec=devnet",
                "--home=${workspaceFolder}/.tmp/beacond",
            ],
            "internalConsoleOptions": "openOnSessionStart",
            "presentation": {
                "group": "initialize",
                "order": 3
            },
        },
        {
            "name": "Set deposit storage",
            "type": "go",
            "request": "launch",
            "preLaunchTask": "build",
            "mode": "exec",
            "program": "${workspaceFolder}/build/bin/beacond",
            "args": [
                "genesis",
                "set-deposit-storage",
                "${workspaceFolder}/testing/files/eth-genesis.json",
                "--beacon-kit.chain-spec=devnet",
                "--home=${workspaceFolder}/.tmp/beacond",
            ],
            "internalConsoleOptions": "openOnSessionStart",
            "presentation": {
                "group": "initialize",
                "order": 4
            },
        },
        {
            "name": "Genesis execution payload",
            "type": "go",
            "request": "launch",
            "preLaunchTask": "build",
            "mode": "exec",
            "program": "${workspaceFolder}/build/bin/beacond",
            "args": [
                "genesis",
                "execution-payload",
                "${workspaceFolder}/.tmp/beacond/eth-genesis.json",
                "--beacon-kit.chain-spec=devnet",
                "--home=${workspaceFolder}/.tmp/beacond",
            ],
            "internalConsoleOptions": "openOnSessionStart",
            "presentation": {
                "group": "initialize",
                "order": 5
            },
        },
        {
            "name": "Start beacond (mainnet)",
            "type": "go",
            "request": "launch",
            "preLaunchTask": "build",
            "mode": "exec",
            "program": "${workspaceFolder}/build/bin/beacond",
            "args": [
                "start",
                "--pruning=nothing",
                "--beacon-kit.chain-spec=mainnet",
                "--beacon-kit.logger.log-level=info",
                "--home=${workspaceFolder}/.tmp/beacond",
                "--beacon-kit.engine.jwt-secret-path=${workspaceFolder}/testing/files/jwt.hex",
                "--beacon-kit.node-api.enabled",
                "--beacon-kit.node-api.logging",
            ],
            "internalConsoleOptions": "openOnSessionStart",
            "presentation": {
                "group": "run",
                "order": 1
            },
            "suppressMultipleSessionWarning": true,
        },
        {
            "name": "Start beacond (devnet)",
            "type": "go",
            "request": "launch",
            "preLaunchTask": "build",
            "mode": "exec",
            "program": "${workspaceFolder}/build/bin/beacond",
            "args": [
                "start",
                "--pruning=nothing",
                "--beacon-kit.chain-spec=devnet",
                "--beacon-kit.logger.log-level=info",
                "--home=${workspaceFolder}/.tmp/beacond",
                "--beacon-kit.engine.jwt-secret-path=${workspaceFolder}/testing/files/jwt.hex",
                "--beacon-kit.node-api.enabled",
                "--beacon-kit.node-api.logging",
            ],
            "internalConsoleOptions": "openOnSessionStart",
            "presentation": {
                "group": "run",
                "order": 2
            },
            "suppressMultipleSessionWarning": true,
        }
    ]
}

================================================
FILE: .vscode/tasks.json
================================================
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "make build COSMOS_BUILD_OPTIONS=nostrip",
            "presentation": {
                "close": true
            }
        }
    ]
}

================================================
FILE: CLAUDE.md
================================================
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Introduction & Overview

BeaconKit is a modular consensus client implementation that uses a modified CometBFT (Tendermint) for consensus instead of the standard Ethereum beacon chain consensus. It implements the Ethereum consensus layer specification while supporting all major Ethereum execution clients through the Engine API.

### Key Differences from Standard Ethereum
- **Consensus**: Uses CometBFT's Tendermint consensus instead of Ethereum's LMD-GHOST + Casper FFG
- **Block Timing**: No fixed 12-second slots; uses timeout-based rounds
- **Validator Set**: Custom validator set cap implementation
- **Block Heights**: Sequential without gaps (CometBFT height = beacon slot)
- **No Missed Slots**: Every height produces a block eventually through round-based consensus

## Project Structure

### Key Directories
- `/beacon/` - Core beacon chain logic (blockchain service, validator service, payload coordination)
- `/chain/` - Chain specifications and helpers (spec interfaces, network configs, genesis generation)
- `/cli/` - CLI commands and configuration (all beacond commands, flag definitions)
- `/config/` - Configuration management (TOML templates, default configs)
- `/consensus-types/` - Consensus layer types (blocks, states, validators, SSZ serialization)
- `/contracts/` - Solidity contracts (deposit contract, staking, Go bindings)
- `/da/` - Data availability layer (blob management, KZG commitments, proofs)
- `/engine-primitives/` - Execution engine types (Engine API types, payloads, withdrawals)
- `/execution/` - Execution client integration (Engine API client, deposit syncing)
- `/node-api/` - REST API implementation (beacon API handlers, server setup)
- `/node-core/` - Core node infrastructure (DI components, service registry, node builder)
- `/primitives/` - Basic types and constants (Slot, Gwei, ValidatorIndex, crypto primitives)
- `/state-transition/` - State transition logic (state machine, fork transitions, operations)
- `/storage/` - Database and storage backends (beacon DB, block store, blob store, pruning)
- `/testing/` - Test utilities and networks (e2e tests, simulations, test fixtures)

### Configuration Files
- Home directory: `~/.beacond` (or `.tmp/beacond` for local testing)
- Config files: `config.toml`, `app.toml`, `client.toml`, `genesis.json`
- Configuration sections in `config.toml`:
  - `beacon-kit.engine` - Execution client settings
  - `beacon-kit.logger` - Logging configuration
  - `beacon-kit.kzg` - KZG trusted setup
  - `beacon-kit.payload-builder` - Block building
  - `beacon-kit.validator` - Validator settings
  - `beacon-kit.block-store-service` - Block storage
  - `beacon-kit.node-api` - API server settings

## Development Commands

### Building
```bash
make build                    # Build beacond binary to build/bin/beacond
make build-docker            # Build Docker image
make install                 # Install beacond to $GOPATH/bin
```

### Running
```bash
make start                   # Start ephemeral devnet node (chain ID: 80087)
make start-custom <spec>     # Start with custom chain spec TOML file
make start-<client>          # Start execution client (reth/geth/nethermind/besu/erigon/ethereumjs)
```
Note: Always start the beacon node before the execution client, as it generates the required genesis configuration.

### Testing
```bash
make test                    # Run all tests (unit + forge)
make test-unit               # Run unit tests with coverage
make test-unit-no-coverage   # Run unit tests without coverage
make test-unit-bench         # Run benchmarks
make test-unit-fuzz          # Run Go fuzz tests
make test-simulated          # Run simulation tests (chaos, forks)
make test-e2e                # Run e2e tests (builds Docker first)
make test-forge-cover        # Run Solidity tests with coverage
```

### Linting & Formatting
```bash
make lint                    # Run all linters
make format                  # Run all formatters
make golangci-fix            # Auto-fix linting issues
make gosec                   # Run security scanner
make nilaway                 # Run nil pointer checker
```

### Code Generation
```bash
make generate                # Run all code generation
make proto                   # Generate protobuf code
make generate-check          # Verify generated code is up to date
```

## Environment Variables

BeaconKit uses Viper for configuration management, which supports environment variables with automatic binding.

### Environment Variable Configuration
- **Prefix**: Configured per application (e.g., `BEACOND_` for the main beacon daemon)
- **Key Mapping**: Configuration keys are transformed for environment variables:
  - Dots (`.`) are replaced with underscores (`_`)
  - Hyphens (`-`) are replaced with underscores (`_`)
  - All keys are uppercased
- **Auto-binding**: Environment variables are automatically bound using `viper.AutomaticEnv()`

### Configuration Precedence
The configuration system follows this precedence order (highest to lowest):
1. **CLI flags** - Command-line arguments override everything
2. **Environment variables** - Override config file values
3. **Config file** - Values from `config.toml`, `app.toml`, etc.
4. **Default values** - Hardcoded defaults in the application

### Implementation Details

The environment variable system is initialized in `cli/commands/server/cmd/execute.go`:

```go
viper.SetEnvPrefix(envPrefix)
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_", "-", "_"))
viper.AutomaticEnv()
```

This setup ensures that:
- All environment variables with the configured prefix are automatically recognized
- Configuration keys are properly mapped to environment variable names
- Values from environment variables override configuration file values

## CLI Usage

### beacond Commands
```bash
beacond init                                    # Initialize a new node
beacond start                                   # Start the beacon node
beacond rollback                                # Rollback blockchain state
beacond genesis add-premined-deposit            # Add premined deposits to genesis
beacond genesis collect-premined-deposits       # Collect premined deposits
beacond genesis set-deposit-storage             # Set deposit contract storage
beacond genesis execution-payload               # Generate execution payload
beacond deposit create-validator                # Create validator deposit
```

### Key Flags
```bash
--beacon-kit.chain-spec <spec>                  # Chain spec: devnet/testnet/mainnet
--beacon-kit.chain-spec-file <path>             # Custom chain spec TOML file
--beacon-kit.engine.jwt-secret-path <path>      # JWT secret for EL auth
--beacon-kit.engine.rpc-dial-url <url>          # Execution client RPC URL
--beacon-kit.kzg.trusted-setup-path <path>      # KZG trusted setup file
--beacon-kit.node-api.enabled                   # Enable REST API
--home <path>                                   # Node home directory (default: ~/.beacond)
```

## Network Specifications

### Supported Networks
- **Devnet** - Chain ID: 80087 (local development)
- **Testnet/Bepolia** - Chain ID: 80069 (public testnet)
- **Mainnet** - Chain ID: 80094 (production)

Network configurations are in `testing/networks/<chain-id>/`

## Architecture Overview

BeaconKit implements a modular EVM consensus client using a modified CometBFT for consensus and supporting all major Ethereum execution clients through the Engine API.

### System Architecture

```
┌───────────────────────────────────────────────────────────────┐
│                      Service Registry                         │
│              (Lifecycle orchestrator for all services)        │
│  Startup Order:                                               │
│  1. ShutdownService → 2. ValidatorService → 3. NodeAPIServer  │
│  4. ReportingService → 5. TelemetryService → 6. EngineClient  │
│  7. ChainService → 8. CometBFTService                         │
└──────────────────────────────┬────────────────────────────────┘
                               │ manages lifecycle
                               ▼
                ┌─────────────────────────────────────┐
                │         CometBFT Service            │
                │  (Consensus orchestrator via P2P)   │
                │  ┌─────────────────────────────┐    │
                │  │ ABCI++ Interface:           │    │
                │  │ • Info                      │    │
                │  │ • InitChain                 │    │
                │  │ • PrepareProposal           │    │
                │  │ • ProcessProposal           │    │
                │  │ • FinalizeBlock             │    │
                │  │ • Commit                    │    │
                │  └─────────────────────────────┘    │
                └───────────────┬─────────────────────┘
                                │
            PrepareProposal     │    ProcessProposal/FinalizeBlock
                    ┌───────────┴─────────┐
                    ▼                     ▼
        ┌─────────────────────┐ ┌────────────────────┐
        │  Validator Service  │ │ Blockchain Service │
        │  (Block builder)    │ │ (Block processor)  │
        │ ┌─────────────────┐ │ │ ┌────────────────┐ │
        │ │ • StateProcessor│ │ │ │• StateProcessor│ │
        │ │ • BlobFactory   │ │ │ │• BlobProcessor │ │
        │ │ • PayloadBuilder│ │ │ │• LocalBuilder  │ │
        │ │ • Signer        │ │ │ │• DepositFetcher│ │
        │ └─────────────────┘ │ │ └────────────────┘ │
        └──────────┬──────────┘ └────────┬───────────┘
                   │                     │
                   │ both use            │ both use
                   ▼                     ▼
        ┌────────────────────────────────────────┐
        │         Execution Engine               │
        │   (Engine API client wrapper)          │
        │  • forkchoiceUpdate                    │
        │  • newPayload / getPayload             │
        └──────────────┬─────────────────────────┘
                       │ communicates with
                       ▼
                External EL Client
                (Geth/Reth/etc.)

┌───────────────────────────────────────────────────────────────┐
│                      Storage Backend                          │
│                 (Shared data layer - DI injected)             │
│  ┌────────────┐ ┌───────────┐ ┌─────────────────┐ ┌────────┐  │
│  │ BlockStore │ │ BeaconDB  │ │AvailabilityStore│ │Deposit │  │
│  │            │ │ (StateDB) │ │ (Blob storage)  │ │Store   │  │
│  └────────────┘ └───────────┘ └─────────────────┘ └────────┘  │
└────────────────────────┬──────────────────────────────────────┘
                         │ accessed by
     ┌───────────────────┼───────────────────┐
     │                   │                   │
     ▼                   ▼                   ▼
┌─────────────┐ ┌─────────────────┐ ┌───────────────┐
│ Node API    │ │ Validator       │ │ Blockchain    │
│ Server      │ │ Service         │ │ Service       │
│(REST/HTTP)  │ │                 │ │               │
└─────────────┘ └─────────────────┘ └───────────────┘

Async Background Process:
┌────────────────────────────────────────────────────┐
│            Deposit Monitoring Flow                 │
│  Execution Layer → Deposit Contract → DepositStore │
└────────────────────────────────────────────────────┘
```

**System Flow:**
1. **Service Registry** manages the lifecycle of all services in dependency order
2. **CometBFT Service** drives the entire system through ABCI callbacks
3. **Block Building**: CometBFT → PrepareProposal → Validator Service
4. **Block Processing**: CometBFT → ProcessProposal/FinalizeBlock → Blockchain Service
5. **State Updates**: Blockchain Service → State Processor → Storage Backend
6. **External Queries**: Node API → Storage Backend (independent of consensus flow)

**Key Facts:**
- Service Registry orchestrates startup/shutdown in correct order
- CometBFT is the consensus driver, not a middle layer
- Storage Backend is a passive resource, not an active service
- Node API runs independently, only queries storage
- Execution Engine communicates with external EL clients
- Services must wait for dependencies (e.g., EngineClient blocks until EL is ready)

### Core Components

**beacon/** - Consensus layer implementation
- `blockchain/`: Core service handling block processing, state transitions, fork choice
  - Integrates with execution engine via Engine API
  - Manages block and blob storage
  - Handles deposit processing from execution layer
- `validator/`: Block building and validation
  - Payload building coordination with execution client
  - Blob sidecar creation and bundling
  - Block proposal generation for CometBFT

**state-transition/** - Beacon chain state transitions
- Core state machine implementing Ethereum consensus specs
- Handles validator lifecycle: activation, exits, slashing
- Processes operations: deposits, withdrawals, attestations
- Fork transition logic (Deneb → Electra)
- Custom modifications: validator set cap, churn rules

**node-core/** - Infrastructure and dependency injection
- `components/`: All service providers for DI
  - Each component has a `Provide*` function
  - Dependencies declared via struct tags
- `services/registry/`: Service lifecycle management
  - Start/stop ordering based on dependencies
  - Graceful shutdown handling
- `builder/`: Node assembly and configuration

**execution/** - Execution client integration
- `client/`: Engine API implementation
  - JWT authenticated HTTP client
  - Retry logic with exponential backoff
  - Error classification (fatal vs retryable)
- `deposit/`: Deposit contract monitoring
  - Syncs deposits from execution layer
  - Manages deposit Merkle tree
- Supports all major EL clients via standard Engine API

**storage/** - Multi-layered persistence
- `beacondb/`: State storage with context management
  - Fork-aware state queries
  - Validator and balance lookups
- `blockstore/`: KV store for beacon blocks
  - Indexed by slot number
  - Range query support
- `availabilitystore/`: Blob sidecar storage
  - TTL-based pruning (availability window)
  - Indexed by block root and index
- `depositstore/`: Deposit event tracking
  - Synced from execution layer logs

**consensus-types/** - Core type definitions
- Beacon chain types: blocks, states, validators
- Fork-specific types with version handling
- SSZ serialization for all consensus types
- Generic interfaces for fork compatibility

**da/** - Data availability layer
- `blob/`: Blob and sidecar management
  - KZG commitment verification
  - Blob to sidecar transformation
- `kzg/`: KZG ceremony integration
  - Trusted setup loading
  - Proof generation and verification

### Data Flow Patterns

#### Block Production Flow
1. CometBFT calls `PrepareProposal` when node is proposer
2. Validator service initiates payload building:
   - Checks for cached FCU response first
   - If no cache: sends FCU with payload attributes to execution engine
   - Receives payload ID for tracking
3. Block assembly:
   - Waits briefly then calls `getPayload` to retrieve execution payload
   - Creates blob sidecars from blob transactions
   - Assembles beacon block with payload
4. Returns complete block to CometBFT for proposal

#### Block Processing Flow
1. CometBFT calls `ProcessProposal` with new block
2. Blockchain service validates block structure
3. Blob processor verifies:
   - KZG proofs for all blobs
   - Blob count within limits
4. State processor performs validation
5. Execution engine validates via `newPayload`
6. Vote to accept/reject returned to CometBFT

#### State Finalization Flow
1. CometBFT calls `FinalizeBlock` after consensus
2. State processor executes full state transition:
   - Process slots up to block slot
   - Apply block operations
   - Update validator balances
3. Storage backends persist:
   - Updated beacon state
   - Block and sidecars
   - State root mappings
4. Post-block FCU updates execution engine head

### Critical Paths

**Block Production (must complete in ~1s):**
1. Initiate payload building immediately
2. Parallel assembly of beacon block components
3. Timeout handling for slow execution clients

**Block Validation (must complete quickly):**
1. Structural validation first (fail fast)
2. Parallel blob verification
3. Execution payload validation last

**State Transitions (deterministic execution):**
1. Slot processing (RANDAO, proposer selection)
2. Block processing (operations in order)
3. Epoch processing (validator updates)

## Key Types and Interfaces

### Core Interfaces
- `ChainSpec` - Chain specification interface
- `BeaconState` - Beacon chain state
- `ExecutionPayload` - Execution layer payload
- `AvailabilityStore` - Blob storage interface
- `DepositStore` - Deposit storage interface
- `BlockStore` - Block storage interface
- `StateProcessor` - State transition processor

### Important Types
- `types.BeaconBlock` - Beacon block structure
- `types.Validator` - Validator information
- `types.Deposit` - Deposit data
- `engine.ExecutionEngine` - Execution engine client
- `payload.PayloadBuilder` - Local payload builder

### Key Abstractions

**StorageBackend Interface:**
```go
type StorageBackend interface {
    AvailabilityStore() AvailabilityStore
    BlockStore() BlockStore
    DepositStore() DepositStore
    StateFromContext(ctx context.Context) BeaconState
}
```

**StateProcessor Interface:**
```go
type StateProcessor interface {
    ProcessSlot(BeaconState) (TransitionResult, error)
    ProcessBlock(BeaconState, BeaconBlock) (BeaconState, error)
    ProcessEpoch(BeaconState) (TransitionResult, error)
}
```

**ExecutionEngine Interface:**
```go
type ExecutionEngine interface {
    NewPayload(ctx, payload, versionedHashes) (PayloadStatus, error)
    ForkchoiceUpdate(ctx, state, attrs) (ForkchoiceResponse, error)
    GetPayload(ctx, payloadID) (ExecutionPayload, error)
}
```

## Integration Patterns

### CometBFT Integration (ABCI++)

BeaconKit integrates with CometBFT through ABCI++ hooks:

```go
// Key integration points in beacon/blockchain/service.go
PrepareProposal(ctx, req) (*ProposalResponse, error)  // Build blocks
ProcessProposal(ctx, req) (*ProcessResponse, error)   // Validate blocks
FinalizeBlock(ctx, req) (*BlockResponse, error)      // Execute state transition
```

**Important:** BeaconKit maps 1 beacon slot = 1 CometBFT height (no missed slots)

### Execution Engine Integration

Communication with execution clients via Engine API:

```go
// Engine API flow for block production
1. forkchoiceUpdate(head, safe, finalized, payloadAttributes) → payloadId
2. getPayload(payloadId) → executionPayload + blobsBundle
3. newPayload(executionPayload) → status
4. forkchoiceUpdate(newHead, safe, finalized) → status
```

**Key Files:**
- `execution/client/client.go` - Main Engine API client
- `execution/client/errors.go` - Error handling and retries
- `execution/pkg/engine/helpers.go` - Request/response helpers

### State Management Integration

State transitions follow a specific pattern:

```go
// State transition pipeline
ctx := state.Context()
state = processSlots(state, targetSlot)
if isEpochEnd(slot) {
    state = processEpoch(state)
}
state = processBlock(state, block)
// Changes are cached and only flushed to disk on Finalize/Commit
storage.SetState(ctx, state)
```

**Context Usage:** All state queries use context for fork-awareness

### Storage Layer Integration

Multi-backend storage with clear interfaces:

```go
// Storage access pattern
backend := node.StorageBackend()
state := backend.StateFromContext(ctx)
block := backend.BlockStore().GetBySlot(slot)
blobs := backend.AvailabilityStore().Get(blockRoot)
deposits := backend.DepositStore().GetAll()
```

### Service Lifecycle Integration

Services follow a strict lifecycle pattern:

```go
type Service interface {
    Start(context.Context) error
    Stop() error
    Name() string
}
```

**Startup Order:**
1. Storage backends initialized
2. Core services created via DI
3. Services started in dependency order
4. CometBFT node started last

**Shutdown:** Reverse order with graceful termination

### Configuration Integration

Configuration flows through the system:

```toml
# config.toml structure
[beacon-kit]
  [beacon-kit.engine]
    jwt-secret-path = "path/to/jwt.hex"
    rpc-dial-url = "http://localhost:8551"

  [beacon-kit.payload-builder]
    enabled = true
```

**Environment Overrides:** CLI flags > env vars > config file > defaults

## Block Height Lifecycle

This section describes how BeaconKit processes blocks using CometBFT's Tendermint consensus algorithm.

### Key Differences from Ethereum
- **Timeout-Based Timing**: No fixed slot duration; block time depends on consensus timeouts and network conditions
- **Sequential Heights**: CometBFT maintains sequential block heights without gaps (unlike Ethereum's slot system)
- **Round-Based Consensus**: Multiple proposers per height if rounds fail
- **Height = Slot**: CometBFT height maps 1:1 to beacon slot number

### Consensus Timing Configuration
BeaconKit configures timeout values for CometBFT consensus:
- **TimeoutCommit**: 500ms minimum - Post-commit wait time (enforced minimum)
- **TimeoutPropose**: 2000ms maximum - Initial proposal timeout (enforced maximum)
- **TimeoutPrevote**: 2000ms maximum - Prevote collection timeout (enforced maximum)
- **TimeoutPrecommit**: 2000ms maximum - Precommit collection timeout (enforced maximum)

**Note**: Only TimeoutCommit has an enforced minimum. The other timeouts have enforced maximums. Actual block times depend on:
- Network latency and message propagation
- Number of consensus rounds needed (failed rounds extend time)
- Execution client response times
- Validator participation and vote collection speed

### CometBFT Round-Based Consensus

**Key Concept**: CometBFT uses rounds within each height. If consensus fails, it increments the round (not the height) and selects a new proposer.

```
Height N, Round 0: Proposer A fails/times out
Height N, Round 1: Proposer B tries
Height N, Round 2: Proposer C succeeds → Height N+1
```

### ABCI Method Flow

#### 1. Block Proposal (PrepareProposal)
**When**: Node is selected as proposer for current height/round
**Called on**: Proposer node only
**Can be called**: Multiple times per height (once per round if timeouts occur)

**Steps**:
1. CometBFT calls `PrepareProposal` with height and round info
2. State is reset if this is a subsequent round (handles timeouts)
3. `ValidatorService.BuildBlockAndSidecars()` executes:
   - Sends `forkchoiceUpdate` with attributes to execution client
   - Receives payload ID
   - Calls `getPayload()` to retrieve execution payload
   - `BlobFactory` creates blob sidecars
4. Returns proposed block to CometBFT

#### 2. Block Validation (ProcessProposal)
**When**: Any node (including proposer) receives a proposed block
**Called on**: ALL nodes
**Purpose**: Validate proposal before voting

**Steps**:
1. CometBFT calls `ProcessProposal` with proposed block
2. Resets `finalizeBlockState` in preparation
3. Blockchain Service validates:
   - Block structure and signatures
   - `BlobProcessor` verifies KZG proofs
   - Execution engine validates via `newPayload` (but doesn't commit)
4. Returns ACCEPT or REJECT to CometBFT

#### 3. Consensus Voting Rounds
**After ProcessProposal returns ACCEPT**:

1. **Prevote Phase**:
   - Validators broadcast prevotes for the proposal
   - Wait up to TimeoutPrevote for 2/3+ prevotes

2. **Precommit Phase**:
   - If 2/3+ prevotes received, broadcast precommit
   - Wait up to TimeoutPrecommit for 2/3+ precommits

3. **Commit Decision**:
   - If 2/3+ precommits received, block is decided
   - Wait TimeoutCommit before moving to next height

If any phase fails/times out → new round at same height

#### 4. Block Finalization (FinalizeBlock)
**When**: After consensus achieved (2/3+ precommits)
**Called on**: ALL nodes
**Called**: Exactly once per height (not per round)

**Steps**:
1. CometBFT calls `FinalizeBlock` with decided block
2. State Processor executes state transition:
   - Applies all block operations
   - Updates validator balances and registry
   - Processes epoch transitions if applicable
3. Commits to storage:
   - Beacon state → BeaconDB
   - Block → BlockStore
   - Blob sidecars → AvailabilityStore
4. Sends post-finalization `forkchoiceUpdate` to execution client
5. CometBFT advances to next height

### Important Characteristics

**Height Progression**:
- Heights only increment after successful FinalizeBlock
- Multiple rounds can occur at the same height
- Each round gets a new proposer (deterministic selection)

**State Management**:
- ProcessProposal validates but doesn't commit
- FinalizeBlock performs actual state mutations
- State can be reset between rounds at same height

**Sequential Block Heights**:
- BeaconKit's `ProcessSlots` called for every sequential height
- No gaps in block heights (unlike Ethereum's slot system)
- Failed proposals trigger new rounds at same height, not height skips

### Failure Scenarios

- **Proposer Timeout**: New round with different proposer at same height
- **Invalid Proposal**: Rejected in ProcessProposal, new round begins
- **Insufficient Votes**: Timeout triggers new round
- **Network Partition**: Consensus halts until 2/3+ validators connected
- **Execution Client Issues**: Proposal fails, new round attempted

This architecture ensures continuous block production through CometBFT's robust round-based consensus, maintaining Byzantine fault tolerance with up to 1/3 malicious validators.

### Critical Integration Points

1. **Block Production Timing:**
   - Must complete within slot duration
   - Timeout handling for slow execution clients
   - Parallel preparation of components

2. **State Consistency:**
   - CometBFT app hash = beacon state root
   - Execution payload state root verification
   - Fork choice alignment with execution client

3. **Deposit Bridge:**
   - Monitors execution layer deposit events
   - Maintains deposit Merkle tree
   - Synchronizes with beacon state

4. **Blob Handling:**
   - KZG verification in consensus layer
   - Blob propagation separate from blocks
   - Pruning after availability window

### Component Dependencies

The system uses `cosmossdk.io/depinject` for dependency injection:

```go
// Example component provider
func ProvideBlockchainService(
    in struct {
        depinject.In
        ChainSpec    chain.ChainSpec
        ExecutionEngine ExecutionEngine
        LocalBuilder    LocalBuilder
        StateProcessor  StateProcessor
        StorageBackend  StorageBackend
        TelemetrySink   TelemetrySink
    },
) *Service {
    // Component initialization
}
```

**Dependency Graph:**
- Node → CometBFT Service → Blockchain Service
- Blockchain → State Processor, Execution Engine, Storage
- State Processor → Chain Spec, Execution Engine
- All components → Logger, Metrics, Config

## Storage Architecture

**Multi-Backend Approach:**
1. **CometBFT State**: Application state via IAVL trees
2. **BeaconDB**: Beacon state indexed by StateRoot
3. **BlockStore**: Blocks indexed by slot
4. **AvailabilityStore**: Blobs with pruning
5. **FileDB**: Generic KV store implementation

**State Management:**
- StateDB provides high-level API
- Context-based forking for speculation
- Lazy loading for performance
- Cache layers for hot data

## Error Handling

- Custom error wrapper in `errors/mod.go`
- Fatal vs non-fatal errors with `IsFatal()` checks
- Consistent error wrapping with context
- Detailed error types for different failure modes

## Build Requirements

### Dependencies
- Go
- Docker (for running EL clients)
- Foundry (for Solidity contracts)
- Make (GNU Make)

### Build Tags
- `bls12381` - BLS cryptography
- `test` - Testing utilities
- `e2e` - End-to-end tests
- `simulated` - Simulation tests

### Key Constants
- `RootLength = 32` - Hash tree root length
- Default RPC timeout: 30s
- Default shutdown timeout: 5 minutes
- Block store availability window: configurable via chain spec

## Development Considerations

### Key Design Patterns

1. **Interface Segregation**: Small, focused interfaces for each concern
2. **Dependency Injection**: All wiring via DI container, no global state
3. **Context Propagation**: Request-scoped values and cancellation
4. **Error Wrapping**: Detailed context preservation with error chains
5. **Metrics-First**: Every operation instrumented with Prometheus
6. **Defensive Validation**: Validate early, validate often
7. **Fork Abstraction**: Generic types handle fork differences

### Testing Approach

- Unit tests alongside code files (`*_test.go`)
- Simulated tests for chaos/fork scenarios in `testing/`
- E2E tests with real execution clients in `testing/e2e/`
- Kurtosis for multi-node testing scenarios


================================================
FILE: CODEOWNERS
================================================
*     @berachain/core-admin


================================================
FILE: Dockerfile
================================================
# syntax=docker/dockerfile:1
#
# Copyright (C) 2022, Berachain Foundation. All rights reserved.
# See the file LICENSE for licensing terms.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

#######################################################
###           Stage 0 - Build Arguments             ###
#######################################################

ARG GO_VERSION
ARG RUNNER_IMAGE=alpine:3.20
ARG BUILD_TAGS="netgo,muslc,blst,bls12381,pebbledb"
ARG NAME=beacond
ARG APP_NAME=beacond
ARG DB_BACKEND=pebbledb
ARG CMD_PATH=./cmd/beacond

#######################################################
###         Stage 1 - Cache Go Modules              ###
#######################################################

FROM golang:${GO_VERSION}-alpine AS mod-cache

WORKDIR /workdir

RUN apk add --no-cache git

# Download Go modules
COPY ./go.mod ./go.sum ./
RUN --mount=type=cache,target=/root/.cache/go-build \
    --mount=type=cache,target=/root/go/pkg/mod \
    go mod download

#######################################################
###         Stage 2 - Build the Application         ###
#######################################################

FROM golang:${GO_VERSION}-alpine AS builder

ARG GIT_VERSION
ARG GIT_COMMIT
ARG BUILD_TAGS

# Set the working directory
WORKDIR /workdir

# Consolidate RUN commands to reduce layers
RUN apk add --no-cache --update \
    ca-certificates \
    build-base

# Copy the dependencies from the cache stage
COPY --from=mod-cache /go/pkg /go/pkg

# Copy all the source code (this will ignore files/dirs in .dockerignore)
COPY ./ ./

# Build args
ARG NAME
ARG APP_NAME
ARG DB_BACKEND
ARG CMD_PATH

# Build beacond
RUN --mount=type=cache,target=/root/.cache/go-build \
    --mount=type=cache,target=/root/go/pkg/mod \
    env NAME=${NAME} DB_BACKEND=${DB_BACKEND} APP_NAME=${APP_NAME} CGO_ENABLED=1 && \
    go build \
    -mod=readonly \
    -tags ${BUILD_TAGS} \
    -ldflags "-X github.com/cosmos/cosmos-sdk/version.Name=${NAME} \
    -X github.com/cosmos/cosmos-sdk/version.AppName=${APP_NAME} \
    -X github.com/cosmos/cosmos-sdk/version.Version=${GIT_VERSION} \
    -X github.com/cosmos/cosmos-sdk/version.Commit=${GIT_COMMIT} \
    -X github.com/cosmos/cosmos-sdk/version.BuildTags=${BUILD_TAGS} \
    -X github.com/cosmos/cosmos-sdk/types.DBBackend=$DB_BACKEND \
    -w -s -linkmode=external -extldflags '-Wl,-z,muldefs -static'" \
    -trimpath \
    -o /workdir/build/bin/beacond \
    ${CMD_PATH}

#######################################################
###        Stage 3 - Prepare the Final Image        ###
#######################################################

FROM ${RUNNER_IMAGE}

# Build args
ARG APP_NAME

# Copy over built executable into a fresh container
COPY --from=builder /workdir/build/bin/${APP_NAME} /usr/bin/${APP_NAME}

# TODO: We should un hood this part, its very specific
# to our kurtosis setup.
RUN mkdir -p /root/jwt /root/kzg && \
    apk add --no-cache bash sed curl jq

EXPOSE 26656
EXPOSE 26657

ENTRYPOINT [ "beacond" ]

================================================
FILE: LICENSE
================================================
Business Source License 1.1

License text copyright © 2023 MariaDB plc, All Rights Reserved.
“Business Source License” is a trademark of MariaDB plc.

-----------------------------------------------------------------------------

Parameters

Licensor:             Berachain Foundation

Licensed Work:        BeaconKit
                      The Licensed Work is (c) 2025 Berachain Foundation

Additional Use Grant: Please contact founders@berachain.com

Change Date:          2026-01-31

Change License:       MIT License

For information about alternative licensing arrangements for the Software,
please contact Berachain: https://berachain.com

-----------------------------------------------------------------------------

Terms

The Licensor hereby grants you the right to copy, modify, create derivative
works, redistribute, and make non-production use of the Licensed Work. The
Licensor may make an Additional Use Grant, above, permitting limited
production use.

Effective on the Change Date, or the fourth anniversary of the first publicly
available distribution of a specific version of the Licensed Work under this
License, whichever comes first, the Licensor hereby grants you rights under
the terms of the Change License, and the rights granted in the paragraph
above terminate.

If your use of the Licensed Work does not comply with the requirements
currently in effect as described in this License, you must purchase a
commercial license from the Licensor, its affiliated entities, or authorized
resellers, or you must refrain from using the Licensed Work.

All copies of the original and modified Licensed Work, and derivative works
of the Licensed Work, are subject to this License. This License applies
separately for each version of the Licensed Work and the Change Date may vary
for each version of the Licensed Work released by Licensor.

You must conspicuously display this License on each original or modified copy
of the Licensed Work. If you receive the Licensed Work in original or
modified form from a third party, the terms and conditions set forth in this
License apply to your use of that work.

Any use of the Licensed Work in violation of this License will automatically
terminate your rights under this License for the current and all other
versions of the Licensed Work.

This License does not grant you any right in any trademark or logo of
Licensor or its affiliates (provided that you may use a trademark or logo of
Licensor as expressly required by this License).

TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
TITLE.

MariaDB hereby grants you permission to use this License’s text to license
your works, and to refer to it using the trademark “Business Source License”,
as long as you comply with the Covenants of Licensor below.

-----------------------------------------------------------------------------

Covenants of Licensor

In consideration of the right to use this License’s text and the “Business
Source License” name and trademark, Licensor covenants to MariaDB, and to all
other recipients of the licensed work to be provided by Licensor:

1. To specify as the Change License the GPL Version 2.0 or any later version,
   or a license that is compatible with GPL Version 2.0 or a later version,
   where “compatible” means that software provided under the Change License can
   be included in a program with software provided under GPL Version 2.0 or a
   later version. Licensor may specify additional Change Licenses without
   limitation.

2. To either: (a) specify an additional grant of rights to use that does not
   impose any additional restriction on the right granted in this License, as
   the Additional Use Grant; or (b) insert the text “None”.

3. To specify a Change Date.

4. Not to modify this License in any other way.

-----------------------------------------------------------------------------

Notice

The Business Source License (this document, or the “License”) is not an Open 
Source license. However, the Licensed Work will eventually be made available 
under an Open Source License, as stated in this License.

For more information on the use of the Business Source License for MariaDB
products, please visit the MariaDB Business Source License FAQ at
https://mariadb.com/bsl-faq-mariadb.

For more information on the use of the Business Source License generally,
please visit the Adopting and Developing Business Source License FAQ at
https://mariadb.com/bsl-faq-adopting.

================================================
FILE: LICENSE.header
================================================
SPDX-License-Identifier: BUSL-1.1

Copyright (C) 2025, Berachain Foundation. All rights reserved.
Use of this software is governed by the Business Source License included 
in the LICENSE file of this repository and at www.mariadb.com/bsl11.

ANY USE OF THE LICENSED WORK IN VIOLATION OF THIS LICENSE WILL AUTOMATICALLY
TERMINATE YOUR RIGHTS UNDER THIS LICENSE FOR THE CURRENT AND ALL OTHER
VERSIONS OF THE LICENSED WORK.

THIS LICENSE DOES NOT GRANT YOU ANY RIGHT IN ANY TRADEMARK OR LOGO OF
LICENSOR OR ITS AFFILIATES (PROVIDED THAT YOU MAY USE A TRADEMARK OR LOGO OF
LICENSOR AS EXPRESSLY REQUIRED BY THIS LICENSE).

TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
TITLE.

================================================
FILE: Makefile
================================================
#!/usr/bin/make -f

include scripts/build/build.mk
include scripts/build/codegen.mk
include scripts/build/constants.mk
include scripts/build/devtools.mk
include scripts/build/linting.mk
include scripts/build/protobuf.mk
include scripts/build/release.mk
include scripts/build/testing.mk
include contracts/Makefile
include kurtosis/Makefile
include scripts/build/help.mk
include testing/forge-script/Makefile

# Specify the default target if none is provided
.DEFAULT_GOAL := build
ROOT_DIR := $(shell pwd)


##############################################################################
###                             Dependencies                                ###
###############################################################################

.PHONY: clean format lint \
	buf-install proto-clean \
	test-unit test-unit-cover test-simulated test-forge-cover test-forge-fuzz \
	forge-snapshot forge-snapshot-diff \
	test-e2e test-e2e-no-build \
	forge-lint-fix forge-lint golangci-install golangci golangci-fix \
	license license-fix \
	gosec vulncheck golines repo-rinse proto build




================================================
FILE: README.md
================================================
<div align="center">
  <a href="https://github.com/berachain/beacon-kit">
    <img alt="beacon-kit-banner" src=".github/assets/banner.png" width="auto" height="auto">
  </a>
</div>
<h2>
  Berachain's Consensus Client
</h2>

<div>

[![CI status](https://github.com/berachain/beacon-kit/workflows/pipeline/badge.svg)](https://github.com/berachain/beacon-kit/actions/workflows/pipeline.yml)
[![Deps status](https://github.com/berachain/beacon-kit/workflows/deps/badge.svg)](https://github.com/berachain/beacon-kit/actions/workflows/vuln-and-dep-check.yml)
[![CodeCov](https://codecov.io/gh/berachain/beacon-kit/graph/badge.svg?token=0l5iJ3ZbzV)](https://codecov.io/gh/berachain/beacon-kit)
[![Telegram Chat](https://img.shields.io/endpoint?color=neon&logo=telegram&label=chat&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Fbeacon_kit)](https://t.me/beacon_kit)
[![X Follow](https://img.shields.io/twitter/follow/berachain)](https://x.com/berachain)
[![Discord](https://img.shields.io/discord/924442927399313448?label=discord)](https://discord.gg/berachain)

</div>

## What is BeaconKit?

BeaconKit is Berachain's consensus client. It implements the Ethereum consensus layer specification with Berachain-specific modifications, using a modified [CometBFT](https://github.com/berachain/cometbft) for consensus instead of Ethereum's standard beacon chain consensus.

Berachain is a high-performance L1 blockchain powered by [Proof of Liquidity](https://docs.berachain.com/general/introduction/what-is-proof-of-liquidity) (PoL), an incentive mechanism that aligns validators, protocols, and users through its three-token system (BERA, BGT, HONEY).

BeaconKit communicates with [Bera-Reth](https://github.com/berachain/bera-reth) (the execution client) via the standard [Engine API](https://github.com/ethereum/execution-apis/blob/main/src/engine), forming the two-client architecture used by Berachain nodes.

### Key Differences from Ethereum

- **CometBFT Consensus** — Uses timeout-based rounds instead of fixed 12-second slots. If a proposer fails, a new round starts at the same height with a different proposer.
- **Single-Slot Finality** — Blocks are finalized immediately when 2/3+ validators commit, unlike Ethereum's ~13-minute finalization through Casper FFG checkpoints.
- **No Missed Slots** — Block heights are strictly sequential with no gaps. Every height eventually produces a block through round-based consensus.
- **No Attestations or Committees** — Consensus is driven by CometBFT's validator voting (prevotes/precommits) rather than Ethereum's attestation committees and sync committees.
- **Capped Validator Set** — The active validator set is capped (currently 69 validators) rather than being open-ended.
- **EVM Inflation Withdrawal** — Every block includes a mandatory EVM inflation withdrawal as its first withdrawal, a Berachain-specific economic mechanism.

## Networks

| Network | Chain ID | Description |
|---------|----------|-------------|
| **Mainnet** | 80094 | Production network |
| **Bepolia** | 80069 | Public testnet |
| **Devnet** | 80087 | Local development |

Network configurations are stored in `testing/networks/<chain-id>/`.

## Execution Client

BeaconKit requires [**Bera-Reth**](https://github.com/berachain/bera-reth), a Berachain-specific fork of [Reth](https://github.com/paradigmxyz/reth). Communication happens over the Engine API with JWT authentication.

## Quick Start

### Prerequisites

- [Docker](https://docs.docker.com/engine/install/)
- [Golang](https://go.dev/doc/install)
- [Foundry](https://book.getfoundry.sh/)

Open two terminals side by side.

**Terminal 1** — Start the consensus client:

```bash
make start
```

**Terminal 2** — Start the execution client (after `beacond` is running, since `make start` generates the execution genesis file):

```bash
make start-reth
```

The devnet runs with chain ID **80087**. The following dev account is preloaded with the native token:

```
Address:     0x20f33ce90a13a4b5e7697e3544c3083b8f8a51d4
Private Key: 0xfffdbb37105441e14b0ee6330d855d8504ff39e705c3afa8f859ac9865f99306
```

### Multinode Devnet (Kurtosis)

For running a multinode local devnet using [Kurtosis](https://www.kurtosis.com/):

```bash
make start-devnet
```

See the [Kurtosis README](kurtosis/README.md) for full details on configuration and usage.

## Project Structure

```
beacon/              Core beacon chain logic (blockchain service, validator service)
chain/               Chain specifications and network configs
cli/                 CLI commands and configuration
config/              Configuration templates (TOML)
consensus-types/     Consensus layer types (blocks, states, validators, SSZ)
contracts/           Solidity contracts (deposit contract, staking)
da/                  Data availability (blob management, KZG commitments)
engine-primitives/   Execution engine types (Engine API types, payloads)
execution/           Execution client integration (Engine API client, deposit syncing)
kurtosis/            Kurtosis multinode devnet deployment
node-api/            REST API implementation (beacon API handlers)
node-core/           Core infrastructure (dependency injection, service registry)
primitives/          Basic types and constants (Slot, Gwei, ValidatorIndex)
state-transition/    State transition logic (state machine, fork transitions)
storage/             Database backends (block store, blob store, beacon DB)
testing/             Test utilities, network configs, e2e and simulation tests
```

## Development

### Building

```bash
make build                # Build beacond binary to build/bin/beacond
make install              # Install beacond to $GOPATH/bin
make build-docker         # Build Docker image
```

### Testing

```bash
make test                 # Run all tests (unit + forge)
make test-unit            # Run unit tests with coverage
make test-unit-bench      # Run benchmarks
make test-unit-fuzz       # Run Go fuzz tests
make test-simulated       # Run simulation tests
make test-e2e             # Run e2e tests (builds Docker image first)
make test-forge-cover     # Run Solidity tests with coverage
```

### Linting & Formatting

```bash
make lint                 # Run all linters
make format               # Run all formatters
make golangci-fix         # Auto-fix Go linting issues
make gosec                # Run security scanner
make nilaway              # Run nil pointer checker
make vulncheck            # Run govulncheck vulnerability scanner
```

### Code Generation

```bash
make generate             # Run all code generation
make proto                # Generate protobuf code
make generate-check       # Verify generated code is up to date
```

## Documentation

- [Berachain Docs](https://docs.berachain.com/) — Official documentation
- [What is BeaconKit](https://docs.berachain.com/validators/beaconkit/overview) — Conceptual overview
- [Node Quickstart](https://docs.berachain.com/validators/operations/quickstart) — Deploy a mainnet or testnet node
- [Docker Devnet Guide](https://docs.berachain.com/validators/guides/local-devnet-docker) — Run a devnet with Docker
- [Kurtosis Guide](https://docs.berachain.com/validators/guides/local-devnet-kurtosis) — Multinode deployment with Kurtosis
- [Kurtosis README](kurtosis/README.md) — Local Kurtosis configuration and usage

## License

BeaconKit is licensed under [BUSL-1.1](LICENSE).


================================================
FILE: beacon/blockchain/common.go
================================================
// SPDX-License-Identifier: BUSL-1.1
//
// Copyright (C) 2025, Berachain Foundation. All rights reserved.
// Use of this software is governed by the Business Source License included
// in the LICENSE file of this repository and at www.mariadb.com/bsl11.
//
// ANY USE OF THE LICENSED WORK IN VIOLATION OF THIS LICENSE WILL AUTOMATICALLY
// TERMINATE YOUR RIGHTS UNDER THIS LICENSE FOR THE CURRENT AND ALL OTHER
// VERSIONS OF THE LICENSED WORK.
//
// THIS LICENSE DOES NOT GRANT YOU ANY RIGHT IN ANY TRADEMARK OR LOGO OF
// LICENSOR OR ITS AFFILIATES (PROVIDED THAT YOU MAY USE A TRADEMARK OR LOGO OF
// LICENSOR AS EXPRESSLY REQUIRED BY THIS LICENSE).
//
// TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
// AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
// EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
// TITLE.

package blockchain

import (
	"fmt"

	ctypes "github.com/berachain/beacon-kit/consensus-types/types"
	"github.com/berachain/beacon-kit/consensus/cometbft/service/encoding"
	"github.com/berachain/beacon-kit/da/types"
	"github.com/berachain/beacon-kit/primitives/math"
)

func (s *Service) ParseBeaconBlock(req encoding.ABCIRequest) (
	*ctypes.SignedBeaconBlock,
	types.BlobSidecars,
	error,
) {
	if countTx := len(req.GetTxs()); countTx > MaxConsensusTxsCount {
		return nil, nil, fmt.Errorf("max expected %d, got %d: %w",
			MaxConsensusTxsCount, countTx,
			ErrTooManyConsensusTxs,
		)
	}

	forkVersion := s.chainSpec.ActiveForkVersionForTimestamp(math.U64(req.GetTime().Unix())) //#nosec: G115
	// Decode signed block and sidecars.
	signedBlk, sidecars, err := encoding.ExtractBlobsAndBlockFromRequest(
		req,
		BeaconBlockTxIndex,
		BlobSidecarsTxIndex,
		forkVersion,
	)
	if err != nil {
		return nil, nil, err
	}
	if signedBlk == nil {
		s.logger.Warn(
			"Aborting block verification - beacon block not found in proposal",
		)
		return nil, nil, ErrNilBlk
	}
	if sidecars == nil {
		s.logger.Warn(
			"Aborting block verification - blob sidecars not found in proposal",
		)
		return nil, nil, ErrNilBlob
	}

	return signedBlk, sidecars, nil
}


================================================
FILE: beacon/blockchain/deposit.go
================================================
// SPDX-License-Identifier: BUSL-1.1
//
// Copyright (C) 2025, Berachain Foundation. All rights reserved.
// Use of this software is governed by the Business Source License included
// in the LICENSE file of this repository and at www.mariadb.com/bsl11.
//
// ANY USE OF THE LICENSED WORK IN VIOLATION OF THIS LICENSE WILL AUTOMATICALLY
// TERMINATE YOUR RIGHTS UNDER THIS LICENSE FOR THE CURRENT AND ALL OTHER
// VERSIONS OF THE LICENSED WORK.
//
// THIS LICENSE DOES NOT GRANT YOU ANY RIGHT IN ANY TRADEMARK OR LOGO OF
// LICENSOR OR ITS AFFILIATES (PROVIDED THAT YOU MAY USE A TRADEMARK OR LOGO OF
// LICENSOR AS EXPRESSLY REQUIRED BY THIS LICENSE).
//
// TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
// AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
// EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
// TITLE.

package blockchain

import (
	"context"
	"maps"
	"slices"
	"strconv"
	"time"

	"github.com/berachain/beacon-kit/primitives/math"
)

// defaultRetryInterval processes a deposit event.
const defaultRetryInterval = 20 * time.Second

func (s *Service) depositFetcher(
	ctx context.Context,
	blockNum math.U64,
) {
	if blockNum <= s.eth1FollowDistance {
		s.logger.Info(
			"depositFetcher, nothing to fetch",
			"block num", blockNum,
			"eth1FollowDistance", s.eth1FollowDistance,
		)
		return
	}

	s.fetchAndStoreDeposits(ctx, blockNum-s.eth1FollowDistance)
}

// fetchAndStoreDeposits processes all deposits at a particular EL block height.
// TODO: This could be optimized to process a contiguous range of blocks simultaneously to minimize EL RPC calls.
func (s *Service) fetchAndStoreDeposits(
	ctx context.Context,
	blockNum math.U64,
) {
	blockNumStr := strconv.FormatUint(blockNum.Unwrap(), 10)
	deposits, err := s.depositContract.ReadDeposits(ctx, blockNum, blockNum)
	if err != nil {
		s.logger.Error("Failed to read deposits", "error", err)
		s.metrics.sink.IncrementCounter(
			"beacon_kit.execution.deposit.failed_to_get_block_logs",
			"block_num",
			blockNumStr,
		)
		s.failedBlocksMu.Lock()
		s.failedBlocks[blockNum] = struct{}{}
		s.failedBlocksMu.Unlock()
		return
	}

	if len(deposits) > 0 {
		s.logger.Info(
			"Found deposits on execution layer",
			"block", blockNum, "deposits", len(deposits),
		)
	}

	if err = s.storageBackend.DepositStore().EnqueueDeposits(ctx, deposits); err != nil {
		s.logger.Error("Failed to store deposits", "error", err)
		s.metrics.sink.IncrementCounter(
			"beacon_kit.execution.deposit.failed_to_enqueue_deposits",
			"block_num",
			blockNumStr,
		)
		s.failedBlocksMu.Lock()
		s.failedBlocks[blockNum] = struct{}{}
		s.failedBlocksMu.Unlock()
		return
	}
	s.failedBlocksMu.Lock()
	delete(s.failedBlocks, blockNum)
	s.failedBlocksMu.Unlock()
}

func (s *Service) depositCatchupFetcher(ctx context.Context) {
	ticker := time.NewTicker(defaultRetryInterval)
	defer ticker.Stop()
	for {
		select {
		case <-ctx.Done():
			return
		case <-ticker.C:
			s.failedBlocksMu.RLock()
			failedBlks := slices.Collect(maps.Keys(s.failedBlocks))
			s.failedBlocksMu.RUnlock()
			if len(failedBlks) == 0 {
				continue
			}
			s.logger.Warn(
				"Failed to get deposits from block(s), retrying...",
				"num_blocks",
				failedBlks,
			)

			// Fetch deposits for blocks that failed to be processed.
			// TODO: This can be optimized to process all the blocks queried at once by utilizing log query ranges
			// for contiguous ranges of blocks
			for _, blockNum := range failedBlks {
				s.fetchAndStoreDeposits(ctx, blockNum)
			}
		}
	}
}


================================================
FILE: beacon/blockchain/errors.go
================================================
// SPDX-License-Identifier: BUSL-1.1
//
// Copyright (C) 2025, Berachain Foundation. All rights reserved.
// Use of this software is governed by the Business Source License included
// in the LICENSE file of this repository and at www.mariadb.com/bsl11.
//
// ANY USE OF THE LICENSED WORK IN VIOLATION OF THIS LICENSE WILL AUTOMATICALLY
// TERMINATE YOUR RIGHTS UNDER THIS LICENSE FOR THE CURRENT AND ALL OTHER
// VERSIONS OF THE LICENSED WORK.
//
// THIS LICENSE DOES NOT GRANT YOU ANY RIGHT IN ANY TRADEMARK OR LOGO OF
// LICENSOR OR ITS AFFILIATES (PROVIDED THAT YOU MAY USE A TRADEMARK OR LOGO OF
// LICENSOR AS EXPRESSLY REQUIRED BY THIS LICENSE).
//
// TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
// AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
// EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
// TITLE.

package blockchain

import "github.com/berachain/beacon-kit/errors"

var (
	// ErrTooManyConsensusTxs is an error for consensus blocks having more than MaxConsensusTxsCount txs.
	ErrTooManyConsensusTxs = errors.New("too many consensus txs")
	// ErrUnexpectedBlockSlot is an error for consensus blocks with non consecutive slots.
	ErrUnexpectedBlockSlot = errors.New("unexpected block slot")
	// ErrNilBlk is an error for when the beacon block is nil.
	ErrNilBlk = errors.New("nil beacon block")
	// ErrNilBlob is an error for when the BlobSidecars is nil.
	ErrNilBlob = errors.New("nil blob")
	// ErrVersionMismatch is an error for when the fork for the block timestamp does not match the fork
	// for the ABCI timestamp.
	ErrVersionMismatch = errors.New("ABCI fork version mismatch")
	// ErrDataNotAvailable indicates that the required data is not available.
	ErrDataNotAvailable = errors.New("data not available")
	// ErrSidecarCommitmentMismatch indicates that the BeaconBlockBody commitments do not match the sidecars.
	ErrSidecarCommitmentMismatch = errors.New("sidecars commitments mismatch")
	// ErrSidecarSignatureMismatch indicates that the sidecar signature is invalid.
	ErrSidecarSignatureMismatch = errors.New("sidecar signature mismatch")
)


================================================
FILE: beacon/blockchain/execution_engine.go
================================================
// SPDX-License-Identifier: BUSL-1.1
//
// Copyright (C) 2025, Berachain Foundation. All rights reserved.
// Use of this software is governed by the Business Source License included
// in the LICENSE file of this repository and at www.mariadb.com/bsl11.
//
// ANY USE OF THE LICENSED WORK IN VIOLATION OF THIS LICENSE WILL AUTOMATICALLY
// TERMINATE YOUR RIGHTS UNDER THIS LICENSE FOR THE CURRENT AND ALL OTHER
// VERSIONS OF THE LICENSED WORK.
//
// THIS LICENSE DOES NOT GRANT YOU ANY RIGHT IN ANY TRADEMARK OR LOGO OF
// LICENSOR OR ITS AFFILIATES (PROVIDED THAT YOU MAY USE A TRADEMARK OR LOGO OF
// LICENSOR AS EXPRESSLY REQUIRED BY THIS LICENSE).
//
// TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
// AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
// EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
// TITLE.

package blockchain

import (
	"context"
	"fmt"

	ctypes "github.com/berachain/beacon-kit/consensus-types/types"
	engineprimitives "github.com/berachain/beacon-kit/engine-primitives/engine-primitives"
	statedb "github.com/berachain/beacon-kit/state-transition/core/state"
)

// sendPostBlockFCU sends a forkchoice update to the execution client after a
// block is finalized.
func (s *Service) sendPostBlockFCU(
	ctx context.Context,
	st *statedb.StateDB,
) error {
	lph, err := st.GetLatestExecutionPayloadHeader()
	if err != nil {
		return fmt.Errorf("failed getting latest payload: %w", err)
	}

	// Send a forkchoice update without payload attributes to notify EL of the new head.
	// Note that we are being conservative here as we don't mark the block we just finalized
	// (which is irreversible due to CometBFT SSF) as final. If we keep doing this, we can
	// spare the FCU update in case we have optimistic block building on, as we may have
	// already sent the very same FCU request after we verified the block.
	fcuData := &engineprimitives.ForkchoiceStateV1{
		HeadBlockHash:      lph.GetBlockHash(),
		SafeBlockHash:      lph.GetParentHash(),
		FinalizedBlockHash: lph.GetParentHash(),
	}

	latestRequestedFCU := s.latestFcuReq.Load()
	s.latestFcuReq.Store(&engineprimitives.ForkchoiceStateV1{}) // reset and prepare for next block
	if latestRequestedFCU.Equals(fcuData) {
		// we already sent the same FCU, likely due to optimistic block building
		// being active. Avoid re-issuing the same request.
		return nil
	}

	req := ctypes.BuildForkchoiceUpdateRequestNoAttrs(
		fcuData,
		s.chainSpec.ActiveForkVersionForTimestamp(lph.GetTimestamp()),
	)
	if _, err = s.executionEngine.NotifyForkchoiceUpdate(ctx, req); err != nil {
		return fmt.Errorf("failed forkchoice update, head %s: %w",
			lph.GetBlockHash().String(),
			err,
		)
	}
	return nil
}


================================================
FILE: beacon/blockchain/finalize_block.go
================================================
// SPDX-License-Identifier: BUSL-1.1
//
// Copyright (C) 2025, Berachain Foundation. All rights reserved.
// Use of this software is governed by the Business Source License included
// in the LICENSE file of this repository and at www.mariadb.com/bsl11.
//
// ANY USE OF THE LICENSED WORK IN VIOLATION OF THIS LICENSE WILL AUTOMATICALLY
// TERMINATE YOUR RIGHTS UNDER THIS LICENSE FOR THE CURRENT AND ALL OTHER
// VERSIONS OF THE LICENSED WORK.
//
// THIS LICENSE DOES NOT GRANT YOU ANY RIGHT IN ANY TRADEMARK OR LOGO OF
// LICENSOR OR ITS AFFILIATES (PROVIDED THAT YOU MAY USE A TRADEMARK OR LOGO OF
// LICENSOR AS EXPRESSLY REQUIRED BY THIS LICENSE).
//
// TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
// AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
// EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
// TITLE.

package blockchain

import (
	"context"
	"fmt"
	"time"

	ctypes "github.com/berachain/beacon-kit/consensus-types/types"
	"github.com/berachain/beacon-kit/consensus/types"
	datypes "github.com/berachain/beacon-kit/da/types"
	"github.com/berachain/beacon-kit/primitives/crypto"
	"github.com/berachain/beacon-kit/primitives/math"
	"github.com/berachain/beacon-kit/primitives/transition"
	statedb "github.com/berachain/beacon-kit/state-transition/core/state"
	cmtabci "github.com/cometbft/cometbft/abci/types"
	sdk "github.com/cosmos/cosmos-sdk/types"
)

func (s *Service) FinalizeBlock(
	ctx sdk.Context,
	req *cmtabci.FinalizeBlockRequest,
) (transition.ValidatorUpdates, error) {
	// STEP 1: Decode block and blobs.
	signedBlk, blobs, err := s.ParseBeaconBlock(req)
	if err != nil {
		s.logger.Error("Failed to decode block and blobs", "error", err)
		return nil, fmt.Errorf("failed to decode block and blobs: %w", err)
	}
	blk := signedBlk.GetBeaconBlock()
	st := s.storageBackend.StateFromContext(ctx)

	// Send an FCU to force the HEAD of the chain on the EL on startup.
	var finalizeErr error
	s.forceStartupSyncOnce.Do(func() {
		var parentProposerPubkey *crypto.BLSPubkey
		parentProposerPubkey, finalizeErr = st.ParentProposerPubkey(blk.GetTimestamp())
		if finalizeErr != nil {
			finalizeErr = fmt.Errorf("force sync upon finalize: failed retrieving parent proposer pubkey: %w", finalizeErr)
		} else {
			finalizeErr = s.forceSyncUponFinalize(ctx, blk, parentProposerPubkey)
		}
	})
	if finalizeErr != nil {
		return nil, finalizeErr
	}

	// STEP 2: Finalize sidecars first (block will check for sidecar availability).
	if err = s.FinalizeSidecars(ctx, req.SyncingToHeight, blk, blobs); err != nil {
		return nil, fmt.Errorf("failed finalizing sidecars: %w", err)
	}

	// STEP 3: Finalize the block.
	consensusBlk := types.NewConsensusBlock(blk, req.GetProposerAddress(), req.GetTime())
	valUpdates, err := s.finalizeBeaconBlock(ctx, st, consensusBlk)
	if err != nil {
		s.logger.Error("Failed to process verified beacon block",
			"error", err,
		)
		return nil, err
	}

	// STEP 4: Post Finalizations cleanups.
	return valUpdates, s.PostFinalizeBlockOps(ctx, blk)
}

func (s *Service) FinalizeSidecars(
	ctx sdk.Context,
	syncingToHeight int64,
	blk *ctypes.BeaconBlock,
	blobs datypes.BlobSidecars,
) error {
	// SyncingToHeight is always the tip of the chain both during sync and when
	// caught up. We don't need to process sidecars unless they are within DA period.
	//
	//#nosec: G115 // SyncingToHeight will never be negative.
	if s.chainSpec.WithinDAPeriod(blk.GetSlot(), math.Slot(syncingToHeight)) {
		err := s.blobProcessor.ProcessSidecars(
			s.storageBackend.AvailabilityStore(),
			blobs,
		)
		if err != nil {
			s.logger.Error("Failed to process blob sidecars", "error", err)
			return fmt.Errorf("failed to process blob sidecars: %w", err)
		}

		// Ensure we can access the data using the commitments from the block.
		if !s.storageBackend.AvailabilityStore().IsDataAvailable(
			ctx, blk.GetSlot(), blk.GetBody(),
		) {
			return ErrDataNotAvailable
		}
		return nil
	}

	// Here outside Data Availability window. Just log if needed
	if len(blobs) > 0 {
		s.logger.Info(
			"Skipping blob processing outside of Data Availability Period",
			"slot", blk.GetSlot().Base10(), "head", syncingToHeight,
		)
	}
	return nil
}

func (s *Service) PostFinalizeBlockOps(ctx sdk.Context, blk *ctypes.BeaconBlock) error {
	// TODO: consider extracting LatestExecutionPayloadHeader instead of using state here
	st := s.storageBackend.StateFromContext(ctx)

	// Fetch and store the deposit for the block.
	blockNum := blk.GetBody().GetExecutionPayload().GetNumber()
	s.depositFetcher(ctx, blockNum)

	// Store the finalized block in the KVStore.
	slot := blk.GetSlot()
	if err := s.storageBackend.BlockStore().Set(blk); err != nil {
		s.logger.Error(
			"failed to store block", "slot", slot, "error", err,
		)
		return err
	}

	// Prune the availability and deposit store.
	if err := s.processPruning(ctx, blk); err != nil {
		s.logger.Error("failed to processPruning", "error", err)
	}

	if err := s.sendPostBlockFCU(ctx, st); err != nil {
		return fmt.Errorf("sendPostBlockFCU failed: %w", err)
	}

	// reset latest verified payload in block builder to signal
	// that no payload is available to reuse for blk.Slot
	s.localBuilder.CacheLatestVerifiedPayload(blk.Slot, nil)

	return nil
}

// finalizeBeaconBlock receives an incoming beacon block, it first validates
// and then processes the block.
func (s *Service) finalizeBeaconBlock(
	ctx context.Context,
	st *statedb.StateDB,
	blk *types.ConsensusBlock,
) (transition.ValidatorUpdates, error) {
	beaconBlk := blk.GetBeaconBlock()

	// If the block is nil, exit early.
	if beaconBlk == nil {
		return nil, ErrNilBlk
	}

	valUpdates, err := s.executeStateTransition(ctx, st, blk)
	if err != nil {
		return nil, err
	}
	return valUpdates.CanonicalSort(), nil
}

// executeStateTransition runs the stf.
func (s *Service) executeStateTransition(
	ctx context.Context,
	st *statedb.StateDB,
	blk *types.ConsensusBlock,
) (transition.ValidatorUpdates, error) {
	startTime := time.Now()
	defer s.metrics.measureStateTransitionDuration(startTime)

	// Notes about context attributes:
	// - VerifyPayload: set to true. When we are NOT synced to the tip,
	// process proposal does NOT get called and thus we must ensure that
	// NewPayload is called to get the execution client the payload.
	// When we are synced to the tip, we can skip the
	// NewPayload call since we already gave our execution client
	// the payload in process proposal.
	// In both cases the payload was already accepted by a majority
	// of validators in their process proposal call and thus
	// the "verification aspect" of this NewPayload call is
	// actually irrelevant at this point.
	// - VerifyRandao: set to false. We skip randao validation in FinalizeBlock
	// since either
	//   1. we validated it during ProcessProposal at the head of the chain OR
	//   2. we are bootstrapping and implicitly trust that the randao was validated by
	//    the super majority during ProcessProposal of the given block height.
	txCtx := transition.NewTransitionCtx(
		ctx,
		blk.GetConsensusTime(),
		blk.GetProposerAddress(),
	).
		WithVerifyPayload(true).
		WithVerifyRandao(false).
		WithVerifyResult(false).
		WithMeterGas(true)

	return s.stateProcessor.Transition(
		txCtx,
		st,
		blk.GetBeaconBlock(),
	)
}


================================================
FILE: beacon/blockchain/init_chain.go
================================================
// SPDX-License-Identifier: BUSL-1.1
//
// Copyright (C) 2025, Berachain Foundation. All rights reserved.
// Use of this software is governed by the Business Source License included
// in the LICENSE file of this repository and at www.mariadb.com/bsl11.
//
// ANY USE OF THE LICENSED WORK IN VIOLATION OF THIS LICENSE WILL AUTOMATICALLY
// TERMINATE YOUR RIGHTS UNDER THIS LICENSE FOR THE CURRENT AND ALL OTHER
// VERSIONS OF THE LICENSED WORK.
//
// THIS LICENSE DOES NOT GRANT YOU ANY RIGHT IN ANY TRADEMARK OR LOGO OF
// LICENSOR OR ITS AFFILIATES (PROVIDED THAT YOU MAY USE A TRADEMARK OR LOGO OF
// LICENSOR AS EXPRESSLY REQUIRED BY THIS LICENSE).
//
// TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
// AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
// EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
// TITLE.

package blockchain

import (
	"context"
	"encoding/json"
	"fmt"

	ctypes "github.com/berachain/beacon-kit/consensus-types/types"
	"github.com/berachain/beacon-kit/primitives/transition"
	"github.com/berachain/beacon-kit/primitives/version"
)

// ProcessGenesisData processes the genesis state and initializes the beacon state.
func (s *Service) ProcessGenesisData(
	ctx context.Context,
	bytes []byte,
) (transition.ValidatorUpdates, error) {
	genesisData := ctypes.Genesis{}
	if err := json.Unmarshal(bytes, &genesisData); err != nil {
		s.logger.Error("Failed to unmarshal genesis data", "error", err)
		return nil, err
	}

	// Ensure consistency of the genesis timestamp.
	execPayloadHeader := genesisData.GetExecutionPayloadHeader()
	if s.chainSpec.GenesisTime() != execPayloadHeader.GetTimestamp().Unwrap() {
		return nil, fmt.Errorf(
			"mismatch between chain spec genesis time (%d) and execution payload header time (%d)",
			s.chainSpec.GenesisTime(),
			execPayloadHeader.GetTimestamp().Unwrap(),
		)
	}

	// Ensure consistency of the genesis fork version.
	genesisVersion := genesisData.GetForkVersion()
	if !version.Equals(genesisVersion, s.chainSpec.GenesisForkVersion()) {
		return nil, fmt.Errorf(
			"fork mismatch between CL genesis file version (%s) and chain spec genesis version (%s)",
			genesisVersion, s.chainSpec.GenesisForkVersion(),
		)
	}

	// Initialize the beacon state from the genesis deposits.
	validatorUpdates, err := s.stateProcessor.InitializeBeaconStateFromEth1(
		s.storageBackend.StateFromContext(ctx),
		genesisData.GetDeposits(),
		execPayloadHeader,
		genesisVersion,
	)
	if err != nil {
		return nil, err
	}

	// After deposits are validated, store the genesis deposits in the deposit store.
	if err = s.storageBackend.DepositStore().EnqueueDeposits(
		ctx,
		genesisData.GetDeposits(),
	); err != nil {
		return nil, err
	}

	return validatorUpdates, nil
}


================================================
FILE: beacon/blockchain/interfaces.go
================================================
// SPDX-License-Identifier: BUSL-1.1
//
// Copyright (C) 2025, Berachain Foundation. All rights reserved.
// Use of this software is governed by the Business Source License included
// in the LICENSE file of this repository and at www.mariadb.com/bsl11.
//
// ANY USE OF THE LICENSED WORK IN VIOLATION OF THIS LICENSE WILL AUTOMATICALLY
// TERMINATE YOUR RIGHTS UNDER THIS LICENSE FOR THE CURRENT AND ALL OTHER
// VERSIONS OF THE LICENSED WORK.
//
// THIS LICENSE DOES NOT GRANT YOU ANY RIGHT IN ANY TRADEMARK OR LOGO OF
// LICENSOR OR ITS AFFILIATES (PROVIDED THAT YOU MAY USE A TRADEMARK OR LOGO OF
// LICENSOR AS EXPRESSLY REQUIRED BY THIS LICENSE).
//
// TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
// AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
// EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
// TITLE.

package blockchain

import (
	"context"
	"time"

	"github.com/berachain/beacon-kit/chain"
	ctypes "github.com/berachain/beacon-kit/consensus-types/types"
	"github.com/berachain/beacon-kit/consensus/cometbft/service/delay"
	"github.com/berachain/beacon-kit/consensus/cometbft/service/encoding"
	dastore "github.com/berachain/beacon-kit/da/store"
	datypes "github.com/berachain/beacon-kit/da/types"
	engineprimitives "github.com/berachain/beacon-kit/engine-primitives/engine-primitives"
	"github.com/berachain/beacon-kit/payload/builder"
	"github.com/berachain/beacon-kit/primitives/common"
	"github.com/berachain/beacon-kit/primitives/crypto"
	"github.com/berachain/beacon-kit/primitives/eip4844"
	"github.com/berachain/beacon-kit/primitives/math"
	"github.com/berachain/beacon-kit/primitives/transition"
	"github.com/berachain/beacon-kit/state-transition/core"
	statedb "github.com/berachain/beacon-kit/state-transition/core/state"
	"github.com/berachain/beacon-kit/storage/block"
	"github.com/berachain/beacon-kit/storage/deposit"
	cmtabci "github.com/cometbft/cometbft/abci/types"
	sdk "github.com/cosmos/cosmos-sdk/types"
)

// ExecutionEngine is the interface for the execution engine.
type ExecutionEngine interface {
	// NotifyNewPayload notifies the execution client of new payload.
	NotifyNewPayload(
		ctx context.Context,
		req ctypes.NewPayloadRequest,
		retryOnSyncingStatus bool,
	) error
	// NotifyForkchoiceUpdate notifies the execution client of a forkchoice
	// update.
	NotifyForkchoiceUpdate(
		ctx context.Context,
		req *ctypes.ForkchoiceUpdateRequest,
	) (*engineprimitives.PayloadID, error)
}

// LocalBuilder is the interface for the builder service.
type LocalBuilder interface {
	// Enabled returns true if the local builder is enabled.
	Enabled() bool
	// RequestPayloadAsync requests a new payload for the given slot.
	RequestPayloadAsync(
		ctx context.Context,
		r *builder.RequestPayloadData,
	) (*engineprimitives.PayloadID, common.Version, error)
	CacheLatestVerifiedPayload(
		latestEnvelopeSlot math.Slot,
		latestEnvelope ctypes.BuiltExecutionPayloadEnv,
	)
}

// StateProcessor defines the interface for processing various state transitions
// in the beacon chain.
type StateProcessor interface {
	// InitializeBeaconStateFromEth1 initializes the premined beacon
	// state from the eth1 deposits.
	InitializeBeaconStateFromEth1(
		*statedb.StateDB,
		ctypes.Deposits,
		*ctypes.ExecutionPayloadHeader,
		common.Version,
	) (transition.ValidatorUpdates, error)
	// ProcessFork prepares the state for the fork version at the given timestamp.
	ProcessFork(
		st *statedb.StateDB, timestamp math.U64, logUpgrade bool,
	) error
	// ProcessSlots processes the state transition for a range of slots.
	ProcessSlots(
		*statedb.StateDB, math.Slot,
	) (transition.ValidatorUpdates, error)
	// Transition processes the state transition for a given block.
	Transition(
		core.ReadOnlyContext,
		*statedb.StateDB,
		*ctypes.BeaconBlock,
	) (transition.ValidatorUpdates, error)
	GetSignatureVerifierFn(*statedb.StateDB) (
		func(
			blk *ctypes.BeaconBlock,
			signature crypto.BLSSignature) error,
		error,
	)
}

// StorageBackend defines an interface for accessing various storage components
// required by the beacon node.
type StorageBackend interface {
	// AvailabilityStore returns the availability store for the given context.
	AvailabilityStore() *dastore.Store
	// StateFromContext retrieves the beacon state from the given context.
	StateFromContext(context.Context) *statedb.StateDB
	// DepositStore retrieves the deposit store.
	DepositStore() deposit.StoreManager
	// BlockStore retrieves the block store.
	BlockStore() *block.KVStore[*ctypes.BeaconBlock]
}

// TelemetrySink is an interface for sending metrics to a telemetry backend.
type TelemetrySink interface {
	// IncrementCounter increments the counter identified by
	// the provided key.
	IncrementCounter(key string, args ...string)

	// MeasureSince measures the time since the provided start time,
	// identified by the provided keys.
	MeasureSince(key string, start time.Time, args ...string)
}

//nolint:revive // its ok
type BlockchainI interface {
	ProcessGenesisData(
		context.Context,
		[]byte,
	) (transition.ValidatorUpdates, error)
	ParseBeaconBlock(req encoding.ABCIRequest) (
		*ctypes.SignedBeaconBlock,
		datypes.BlobSidecars,
		error,
	)
	ProcessProposal(
		sdk.Context,
		*cmtabci.ProcessProposalRequest,
		[]byte, // this node address
	) (transition.ValidatorUpdates, error)
	FinalizeSidecars(
		ctx sdk.Context,
		syncingToHeight int64,
		blk *ctypes.BeaconBlock,
		blobs datypes.BlobSidecars,
	) error
	FinalizeBlock(
		sdk.Context,
		*cmtabci.FinalizeBlockRequest,
	) (transition.ValidatorUpdates, error)
	PostFinalizeBlockOps(
		sdk.Context,
		*ctypes.BeaconBlock,
	) error
	PruneOrphanedBlobs(lastBlockHeight int64) error
}

// BlobProcessor is the interface for the blobs processor.
type BlobProcessor interface {
	// ProcessSidecars processes the blobs and ensures they match the local
	// state.
	ProcessSidecars(
		avs *dastore.Store,
		sidecars datypes.BlobSidecars,
	) error
	// VerifySidecars verifies the blobs and ensures they match the local state.
	VerifySidecars(
		ctx context.Context,
		sidecars datypes.BlobSidecars,
		blkHeader *ctypes.BeaconBlockHeader,
		kzgCommitments eip4844.KZGCommitments[common.ExecutionHash],
	) error
}

type PruningChainSpec interface {
	MinEpochsForBlobsSidecarsRequest() math.Epoch
	SlotsPerEpoch() uint64
}

type ServiceChainSpec interface {
	PruningChainSpec
	chain.BlobSpec
	chain.ForkSpec
	chain.ForkVersionSpec
	delay.ConfigGetter

	EpochsPerHistoricalVector() uint64
	SlotToEpoch(slot math.Slot) math.Epoch
	Eth1FollowDistance() uint64
}


================================================
FILE: beacon/blockchain/metrics.go
================================================
// SPDX-License-Identifier: BUSL-1.1
//
// Copyright (C) 2025, Berachain Foundation. All rights reserved.
// Use of this software is governed by the Business Source License included
// in the LICENSE file of this repository and at www.mariadb.com/bsl11.
//
// ANY USE OF THE LICENSED WORK IN VIOLATION OF THIS LICENSE WILL AUTOMATICALLY
// TERMINATE YOUR RIGHTS UNDER THIS LICENSE FOR THE CURRENT AND ALL OTHER
// VERSIONS OF THE LICENSED WORK.
//
// THIS LICENSE DOES NOT GRANT YOU ANY RIGHT IN ANY TRADEMARK OR LOGO OF
// LICENSOR OR ITS AFFILIATES (PROVIDED THAT YOU MAY USE A TRADEMARK OR LOGO OF
// LICENSOR AS EXPRESSLY REQUIRED BY THIS LICENSE).
//
// TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
// AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
// EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
// TITLE.

package blockchain

import (
	"time"

	"github.com/berachain/beacon-kit/primitives/math"
)

// chainMetrics is a struct that contains metrics for the chain.
type chainMetrics struct {
	// sink is the sink for the metrics.
	sink TelemetrySink
}

// newChainMetrics creates a new chainMetrics.
func newChainMetrics(
	sink TelemetrySink,
) *chainMetrics {
	return &chainMetrics{
		sink: sink,
	}
}

// measureStateTransitionDuration measures the time to process
// the state transition for a block.
func (cm *chainMetrics) measureStateTransitionDuration(
	start time.Time,
) {
	cm.sink.MeasureSince(
		"beacon_kit.beacon.blockchain.state_transition_duration",
		start,
	)
}

// markRebuildPayloadForRejectedBlockSuccess increments the counter for the
// number of times
// the validator successfully rebuilt the payload for a rejected block.
func (cm *chainMetrics) markRebuildPayloadForRejectedBlockSuccess(
	slot math.Slot,
) {
	cm.sink.IncrementCounter(
		"beacon_kit.blockchain.rebuild_payload_for_rejected_block_success",
		"slot",
		slot.Base10(),
	)
}

// markRebuildPayloadForRejectedBlockFailure increments the counter for the
// number of times the validator failed to build an optimistic payload
// due to a failure.
func (cm *chainMetrics) markRebuildPayloadForRejectedBlockFailure(
	slot math.Slot,
	err error,
) {
	cm.sink.IncrementCounter(
		"beacon_kit.blockchain.rebuild_payload_for_rejected_block_failure",
		"slot",
		slot.Base10(),
		"error",
		err.Error(),
	)
}

// markOptimisticPayloadBuildSuccess increments the counter for the number of
// times the validator successfully built an optimistic payload.
func (cm *chainMetrics) markOptimisticPayloadBuildSuccess(slot math.Slot) {
	cm.sink.IncrementCounter(
		"beacon_kit.blockchain.optimistic_payload_build_success",
		"slot",
		slot.Base10(),
	)
}

// markOptimisticPayloadBuildFailure increments the counter for the number of
// times the validator failed to build an optimistic payload.
func (cm *chainMetrics) markOptimisticPayloadBuildFailure(
	slot math.Slot,
	err error,
) {
	cm.sink.IncrementCounter(
		"beacon_kit.blockchain.optimistic_payload_build_failure",
		"slot",
		slot.Base10(),
		"error",
		err.Error(),
	)
}

// TODO: remove once state caching is activated
// measureStateRootVerificationTime measures the time taken to verify the state
// root of a block.
// It records the duration from the provided start time to the current time.
func (cm *chainMetrics) measureStateRootVerificationTime(start time.Time) {
	cm.sink.MeasureSince(
		"beacon_kit.blockchain.state_root_verification_duration", start,
	)
}


================================================
FILE: beacon/blockchain/mocks/genesis_state_processor.mock.go
================================================
// Code generated by mockery v2.53.5. DO NOT EDIT.

package mocks

import (
	common "github.com/berachain/beacon-kit/primitives/common"
	mock "github.com/stretchr/testify/mock"

	state "github.com/berachain/beacon-kit/state-transition/core/state"

	transition "github.com/berachain/beacon-kit/primitives/transition"

	types "github.com/berachain/beacon-kit/consensus-types/types"
)

// GenesisStateProcessor is an autogenerated mock type for the GenesisStateProcessor type
type GenesisStateProcessor struct {
	mock.Mock
}

type GenesisStateProcessor_Expecter struct {
	mock *mock.Mock
}

func (_m *GenesisStateProcessor) EXPECT() *GenesisStateProcessor_Expecter {
	return &GenesisStateProcessor_Expecter{mock: &_m.Mock}
}

// InitializeBeaconStateFromEth1 provides a mock function with given fields: st, deposits, execPayloadHeader, genesisVersion
func (_m *GenesisStateProcessor) InitializeBeaconStateFromEth1(st *state.StateDB, deposits types.Deposits, execPayloadHeader *types.ExecutionPayloadHeader, genesisVersion common.Version) (transition.ValidatorUpdates, error) {
	ret := _m.Called(st, deposits, execPayloadHeader, genesisVersion)

	if len(ret) == 0 {
		panic("no return value specified for InitializeBeaconStateFromEth1")
	}

	var r0 transition.ValidatorUpdates
	var r1 error
	if rf, ok := ret.Get(0).(func(*state.StateDB, types.Deposits, *types.ExecutionPayloadHeader, common.Version) (transition.ValidatorUpdates, error)); ok {
		return rf(st, deposits, execPayloadHeader, genesisVersion)
	}
	if rf, ok := ret.Get(0).(func(*state.StateDB, types.Deposits, *types.ExecutionPayloadHeader, common.Version) transition.ValidatorUpdates); ok {
		r0 = rf(st, deposits, execPayloadHeader, genesisVersion)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(transition.ValidatorUpdates)
		}
	}

	if rf, ok := ret.Get(1).(func(*state.StateDB, types.Deposits, *types.ExecutionPayloadHeader, common.Version) error); ok {
		r1 = rf(st, deposits, execPayloadHeader, genesisVersion)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// GenesisStateProcessor_InitializeBeaconStateFromEth1_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'InitializeBeaconStateFromEth1'
type GenesisStateProcessor_InitializeBeaconStateFromEth1_Call struct {
	*mock.Call
}

// InitializeBeaconStateFromEth1 is a helper method to define mock.On call
//   - st *state.StateDB
//   - deposits types.Deposits
//   - execPayloadHeader *types.ExecutionPayloadHeader
//   - genesisVersion common.Version
func (_e *GenesisStateProcessor_Expecter) InitializeBeaconStateFromEth1(st interface{}, deposits interface{}, execPayloadHeader interface{}, genesisVersion interface{}) *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call {
	return &GenesisStateProcessor_InitializeBeaconStateFromEth1_Call{Call: _e.mock.On("InitializeBeaconStateFromEth1", st, deposits, execPayloadHeader, genesisVersion)}
}

func (_c *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call) Run(run func(st *state.StateDB, deposits types.Deposits, execPayloadHeader *types.ExecutionPayloadHeader, genesisVersion common.Version)) *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call {
	_c.Call.Run(func(args mock.Arguments) {
		run(args[0].(*state.StateDB), args[1].(types.Deposits), args[2].(*types.ExecutionPayloadHeader), args[3].(common.Version))
	})
	return _c
}

func (_c *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call) Return(_a0 transition.ValidatorUpdates, _a1 error) *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call {
	_c.Call.Return(_a0, _a1)
	return _c
}

func (_c *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call) RunAndReturn(run func(*state.StateDB, types.Deposits, *types.ExecutionPayloadHeader, common.Version) (transition.ValidatorUpdates, error)) *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call {
	_c.Call.Return(run)
	return _c
}

// NewGenesisStateProcessor creates a new instance of GenesisStateProcessor. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewGenesisStateProcessor(t interface {
	mock.TestingT
	Cleanup(func())
}) *GenesisStateProcessor {
	mock := &GenesisStateProcessor{}
	mock.Mock.Test(t)

	t.Cleanup(func() { mock.AssertExpectations(t) })

	return mock
}


================================================
FILE: beacon/blockchain/mocks/local_builder.mock.go
================================================
// Code generated by mockery v2.53.5. DO NOT EDIT.

package mocks

import (
	context "context"

	types "github.com/berachain/beacon-kit/consensus-types/types"
	engineprimitives "github.com/berachain/beacon-kit/engine-primitives/engine-primitives"
	builder "github.com/berachain/beacon-kit/payload/builder"
	common "github.com/berachain/beacon-kit/primitives/common"
	math "github.com/berachain/beacon-kit/primitives/math"
	mock "github.com/stretchr/testify/mock"
)

// LocalBuilder is an autogenerated mock type for the LocalBuilder type
type LocalBuilder struct {
	mock.Mock
}

type LocalBuilder_Expecter struct {
	mock *mock.Mock
}

func (_m *LocalBuilder) EXPECT() *LocalBuilder_Expecter {
	return &LocalBuilder_Expecter{mock: &_m.Mock}
}

// CacheLatestVerifiedPayload provides a mock function with given fields: latestEnvelopeSlot, latestEnvelope
func (_m *LocalBuilder) CacheLatestVerifiedPayload(latestEnvelopeSlot math.Slot, latestEnvelope types.BuiltExecutionPayloadEnv) {
	_m.Called(latestEnvelopeSlot, latestEnvelope)
}

// LocalBuilder_CacheLatestVerifiedPayload_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CacheLatestVerifiedPayload'
type LocalBuilder_CacheLatestVerifiedPayload_Call struct {
	*mock.Call
}

// CacheLatestVerifiedPayload is a helper method to define mock.On call
//   - latestEnvelopeSlot math.Slot
//   - latestEnvelope types.BuiltExecutionPayloadEnv
func (_e *LocalBuilder_Expecter) CacheLatestVerifiedPayload(latestEnvelopeSlot interface{}, latestEnvelope interface{}) *LocalBuilder_CacheLatestVerifiedPayload_Call {
	return &LocalBuilder_CacheLatestVerifiedPayload_Call{Call: _e.mock.On("CacheLatestVerifiedPayload", latestEnvelopeSlot, latestEnvelope)}
}

func (_c *LocalBuilder_CacheLatestVerifiedPayload_Call) Run(run func(latestEnvelopeSlot math.Slot, latestEnvelope types.BuiltExecutionPayloadEnv)) *LocalBuilder_CacheLatestVerifiedPayload_Call {
	_c.Call.Run(func(args mock.Arguments) {
		run(args[0].(math.Slot), args[1].(types.BuiltExecutionPayloadEnv))
	})
	return _c
}

func (_c *LocalBuilder_CacheLatestVerifiedPayload_Call) Return() *LocalBuilder_CacheLatestVerifiedPayload_Call {
	_c.Call.Return()
	return _c
}

func (_c *LocalBuilder_CacheLatestVerifiedPayload_Call) RunAndReturn(run func(math.Slot, types.BuiltExecutionPayloadEnv)) *LocalBuilder_CacheLatestVerifiedPayload_Call {
	_c.Run(run)
	return _c
}

// Enabled provides a mock function with no fields
func (_m *LocalBuilder) Enabled() bool {
	ret := _m.Called()

	if len(ret) == 0 {
		panic("no return value specified for Enabled")
	}

	var r0 bool
	if rf, ok := ret.Get(0).(func() bool); ok {
		r0 = rf()
	} else {
		r0 = ret.Get(0).(bool)
	}

	return r0
}

// LocalBuilder_Enabled_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Enabled'
type LocalBuilder_Enabled_Call struct {
	*mock.Call
}

// Enabled is a helper method to define mock.On call
func (_e *LocalBuilder_Expecter) Enabled() *LocalBuilder_Enabled_Call {
	return &LocalBuilder_Enabled_Call{Call: _e.mock.On("Enabled")}
}

func (_c *LocalBuilder_Enabled_Call) Run(run func()) *LocalBuilder_Enabled_Call {
	_c.Call.Run(func(args mock.Arguments) {
		run()
	})
	return _c
}

func (_c *LocalBuilder_Enabled_Call) Return(_a0 bool) *LocalBuilder_Enabled_Call {
	_c.Call.Return(_a0)
	return _c
}

func (_c *LocalBuilder_Enabled_Call) RunAndReturn(run func() bool) *LocalBuilder_Enabled_Call {
	_c.Call.Return(run)
	return _c
}

// RequestPayloadAsync provides a mock function with given fields: ctx, r
func (_m *LocalBuilder) RequestPayloadAsync(ctx context.Context, r *builder.RequestPayloadData) (*engineprimitives.PayloadID, common.Version, error) {
	ret := _m.Called(ctx, r)

	if len(ret) == 0 {
		panic("no return value specified for RequestPayloadAsync")
	}

	var r0 *engineprimitives.PayloadID
	var r1 common.Version
	var r2 error
	if rf, ok := ret.Get(0).(func(context.Context, *builder.RequestPayloadData) (*engineprimitives.PayloadID, common.Version, error)); ok {
		return rf(ctx, r)
	}
	if rf, ok := ret.Get(0).(func(context.Context, *builder.RequestPayloadData) *engineprimitives.PayloadID); ok {
		r0 = rf(ctx, r)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*engineprimitives.PayloadID)
		}
	}

	if rf, ok := ret.Get(1).(func(context.Context, *builder.RequestPayloadData) common.Version); ok {
		r1 = rf(ctx, r)
	} else {
		if ret.Get(1) != nil {
			r1 = ret.Get(1).(common.Version)
		}
	}

	if rf, ok := ret.Get(2).(func(context.Context, *builder.RequestPayloadData) error); ok {
		r2 = rf(ctx, r)
	} else {
		r2 = ret.Error(2)
	}

	return r0, r1, r2
}

// LocalBuilder_RequestPayloadAsync_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RequestPayloadAsync'
type LocalBuilder_RequestPayloadAsync_Call struct {
	*mock.Call
}

// RequestPayloadAsync is a helper method to define mock.On call
//   - ctx context.Context
//   - r *builder.RequestPayloadData
func (_e *LocalBuilder_Expecter) RequestPayloadAsync(ctx interface{}, r interface{}) *LocalBuilder_RequestPayloadAsync_Call {
	return &LocalBuilder_RequestPayloadAsync_Call{Call: _e.mock.On("RequestPayloadAsync", ctx, r)}
}

func (_c *LocalBuilder_RequestPayloadAsync_Call) Run(run func(ctx context.Context, r *builder.RequestPayloadData)) *LocalBuilder_RequestPayloadAsync_Call {
	_c.Call.Run(func(args mock.Arguments) {
		run(args[0].(context.Context), args[1].(*builder.RequestPayloadData))
	})
	return _c
}

func (_c *LocalBuilder_RequestPayloadAsync_Call) Return(_a0 *engineprimitives.PayloadID, _a1 common.Version, _a2 error) *LocalBuilder_RequestPayloadAsync_Call {
	_c.Call.Return(_a0, _a1, _a2)
	return _c
}

func (_c *LocalBuilder_RequestPayloadAsync_Call) RunAndReturn(run func(context.Context, *builder.RequestPayloadData) (*engineprimitives.PayloadID, common.Version, error)) *LocalBuilder_RequestPayloadAsync_Call {
	_c.Call.Return(run)
	return _c
}

// NewLocalBuilder creates a new instance of LocalBuilder. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewLocalBuilder(t interface {
	mock.TestingT
	Cleanup(func())
}) *LocalBuilder {
	mock := &LocalBuilder{}
	mock.Mock.Test(t)

	t.Cleanup(func() { mock.AssertExpectations(t) })

	return mock
}


================================================
FILE: beacon/blockchain/mocks/storage_backend.mock.go
================================================
// Code generated by mockery v2.53.5. DO NOT EDIT.

package mocks

import (
	block "github.com/berachain/beacon-kit/storage/block"

	context "context"

	types "github.com/berachain/beacon-kit/consensus-types/types"
	store "github.com/berachain/beacon-kit/da/store"
	state "github.com/berachain/beacon-kit/state-transition/core/state"
	deposit "github.com/berachain/beacon-kit/storage/deposit"
	mock "github.com/stretchr/testify/mock"
)

// StorageBackend is an autogenerated mock type for the StorageBackend type
type StorageBackend struct {
	mock.Mock
}

type StorageBackend_Expecter struct {
	mock *mock.Mock
}

func (_m *StorageBackend) EXPECT() *StorageBackend_Expecter {
	return &StorageBackend_Expecter{mock: &_m.Mock}
}

// AvailabilityStore provides a mock function with no fields
func (_m *StorageBackend) AvailabilityStore() *store.Store {
	ret := _m.Called()

	if len(ret) == 0 {
		panic("no return value specified for AvailabilityStore")
	}

	var r0 *store.Store
	if rf, ok := ret.Get(0).(func() *store.Store); ok {
		r0 = rf()
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*store.Store)
		}
	}

	return r0
}

// StorageBackend_AvailabilityStore_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AvailabilityStore'
type StorageBackend_AvailabilityStore_Call struct {
	*mock.Call
}

// AvailabilityStore is a helper method to define mock.On call
func (_e *StorageBackend_Expecter) AvailabilityStore() *StorageBackend_AvailabilityStore_Call {
	return &StorageBackend_AvailabilityStore_Call{Call: _e.mock.On("AvailabilityStore")}
}

func (_c *StorageBackend_AvailabilityStore_Call) Run(run func()) *StorageBackend_AvailabilityStore_Call {
	_c.Call.Run(func(args mock.Arguments) {
		run()
	})
	return _c
}

func (_c *StorageBackend_AvailabilityStore_Call) Return(_a0 *store.Store) *StorageBackend_AvailabilityStore_Call {
	_c.Call.Return(_a0)
	return _c
}

func (_c *StorageBackend_AvailabilityStore_Call) RunAndReturn(run func() *store.Store) *StorageBackend_AvailabilityStore_Call {
	_c.Call.Return(run)
	return _c
}

// BlockStore provides a mock function with no fields
func (_m *StorageBackend) BlockStore() *block.KVStore[*types.BeaconBlock] {
	ret := _m.Called()

	if len(ret) == 0 {
		panic("no return value specified for BlockStore")
	}

	var r0 *block.KVStore[*types.BeaconBlock]
	if rf, ok := ret.Get(0).(func() *block.KVStore[*types.BeaconBlock]); ok {
		r0 = rf()
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*block.KVStore[*types.BeaconBlock])
		}
	}

	return r0
}

// StorageBackend_BlockStore_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockStore'
type StorageBackend_BlockStore_Call struct {
	*mock.Call
}

// BlockStore is a helper method to define mock.On call
func (_e *StorageBackend_Expecter) BlockStore() *StorageBackend_BlockStore_Call {
	return &StorageBackend_BlockStore_Call{Call: _e.mock.On("BlockStore")}
}

func (_c *StorageBackend_BlockStore_Call) Run(run func()) *StorageBackend_BlockStore_Call {
	_c.Call.Run(func(args mock.Arguments) {
		run()
	})
	return _c
}

func (_c *StorageBackend_BlockStore_Call) Return(_a0 *block.KVStore[*types.BeaconBlock]) *StorageBackend_BlockStore_Call {
	_c.Call.Return(_a0)
	return _c
}

func (_c *StorageBackend_BlockStore_Call) RunAndReturn(run func() *block.KVStore[*types.BeaconBlock]) *StorageBackend_BlockStore_Call {
	_c.Call.Return(run)
	return _c
}

// DepositStore provides a mock function with no fields
func (_m *StorageBackend) DepositStore() deposit.StoreManager {
	ret := _m.Called()

	if len(ret) == 0 {
		panic("no return value specified for DepositStore")
	}

	var r0 deposit.StoreManager
	if rf, ok := ret.Get(0).(func() deposit.StoreManager); ok {
		r0 = rf()
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(deposit.StoreManager)
		}
	}

	return r0
}

// StorageBackend_DepositStore_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DepositStore'
type StorageBackend_DepositStore_Call struct {
	*mock.Call
}

// DepositStore is a helper method to define mock.On call
func (_e *StorageBackend_Expecter) DepositStore() *StorageBackend_DepositStore_Call {
	return &StorageBackend_DepositStore_Call{Call: _e.mock.On("DepositStore")}
}

func (_c *StorageBackend_DepositStore_Call) Run(run func()) *StorageBackend_DepositStore_Call {
	_c.Call.Run(func(args mock.Arguments) {
		run()
	})
	return _c
}

func (_c *StorageBackend_DepositStore_Call) Return(_a0 deposit.StoreManager) *StorageBackend_DepositStore_Call {
	_c.Call.Return(_a0)
	return _c
}

func (_c *StorageBackend_DepositStore_Call) RunAndReturn(run func() deposit.StoreManager) *StorageBackend_DepositStore_Call {
	_c.Call.Return(run)
	return _c
}

// StateFromContext provides a mock function with given fields: _a0
func (_m *StorageBackend) StateFromContext(_a0 context.Context) *state.StateDB {
	ret := _m.Called(_a0)

	if len(ret) == 0 {
		panic("no return value specified for StateFromContext")
	}

	var r0 *state.StateDB
	if rf, ok := ret.Get(0).(func(context.Context) *state.StateDB); ok {
		r0 = rf(_a0)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*state.StateDB)
		}
	}

	return r0
}

// StorageBackend_StateFromContext_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'StateFromContext'
type StorageBackend_StateFromContext_Call struct {
	*mock.Call
}

// StateFromContext is a helper method to define mock.On call
//   - _a0 context.Context
func (_e *StorageBackend_Expecter) StateFromContext(_a0 interface{}) *StorageBackend_StateFromContext_Call {
	return &StorageBackend_StateFromContext_Call{Call: _e.mock.On("StateFromContext", _a0)}
}

func (_c *StorageBackend_StateFromContext_Call) Run(run func(_a0 context.Context)) *StorageBackend_StateFromContext_Call {
	_c.Call.Run(func(args mock.Arguments) {
		run(args[0].(context.Context))
	})
	return _c
}

func (_c *StorageBackend_StateFromContext_Call) Return(_a0 *state.StateDB) *StorageBackend_StateFromContext_Call {
	_c.Call.Return(_a0)
	return _c
}

func (_c *StorageBackend_StateFromContext_Call) RunAndReturn(run func(context.Context) *state.StateDB) *StorageBackend_StateFromContext_Call {
	_c.Call.Return(run)
	return _c
}

// NewStorageBackend creates a new instance of StorageBackend. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewStorageBackend(t interface {
	mock.TestingT
	Cleanup(func())
}) *StorageBackend {
	mock := &StorageBackend{}
	mock.Mock.Test(t)

	t.Cleanup(func() { mock.AssertExpectations(t) })

	return mock
}


================================================
FILE: beacon/blockchain/payload.go
================================================
// SPDX-License-Identifier: BUSL-1.1
//
// Copyright (C) 2025, Berachain Foundation. All rights reserved.
// Use of this software is governed by the Business Source License included
// in the LICENSE file of this repository and at www.mariadb.com/bsl11.
//
// ANY USE OF THE LICENSED WORK IN VIOLATION OF THIS LICENSE WILL AUTOMATICALLY
// TERMINATE YOUR RIGHTS UNDER THIS LICENSE FOR THE CURRENT AND ALL OTHER
// VERSIONS OF THE LICENSED WORK.
//
// THIS LICENSE DOES NOT GRANT YOU ANY RIGHT IN ANY TRADEMARK OR LOGO OF
// LICENSOR OR ITS AFFILIATES (PROVIDED THAT YOU MAY USE A TRADEMARK OR LOGO OF
// LICENSOR AS EXPRESSLY REQUIRED BY THIS LICENSE).
//
// TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
// AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
// EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
// TITLE.

package blockchain

import (
	"context"
	"fmt"

	payloadtime "github.com/berachain/beacon-kit/beacon/payload-time"
	ctypes "github.com/berachain/beacon-kit/consensus-types/types"
	engineprimitives "github.com/berachain/beacon-kit/engine-primitives/engine-primitives"
	engineerrors "github.com/berachain/beacon-kit/engine-primitives/errors"
	"github.com/berachain/beacon-kit/errors"
	"github.com/berachain/beacon-kit/payload/builder"
	"github.com/berachain/beacon-kit/primitives/crypto"
	"github.com/berachain/beacon-kit/primitives/math"
	statedb "github.com/berachain/beacon-kit/state-transition/core/state"
)

// forceSyncUponProcess sends a force head FCU to the execution client.
func (s *Service) forceSyncUponProcess(
	ctx context.Context,
	st *statedb.StateDB,
) {
	lph, err := st.GetLatestExecutionPayloadHeader()
	if err != nil {
		s.logger.Error(
			"failed to get latest execution payload header",
			"error", err,
		)
		return
	}

	s.logger.Info(
		"Sending startup forkchoice update to execution client",
		"head_eth1_hash", lph.GetBlockHash(),
		"safe_eth1_hash", lph.GetParentHash(),
		"finalized_eth1_hash", lph.GetParentHash(),
		"for_slot", lph.GetNumber(),
	)

	// Submit the forkchoice update to the execution client.
	req := ctypes.BuildForkchoiceUpdateRequestNoAttrs(
		&engineprimitives.ForkchoiceStateV1{
			HeadBlockHash:      lph.GetBlockHash(),
			SafeBlockHash:      lph.GetParentHash(),
			FinalizedBlockHash: lph.GetParentHash(),
		},
		s.chainSpec.ActiveForkVersionForTimestamp(lph.GetTimestamp()),
	)
	if _, err = s.executionEngine.NotifyForkchoiceUpdate(ctx, req); err != nil {
		s.logger.Error(
			"failed to send force head FCU",
			"error", err,
		)
	}
}

// forceSyncUponFinalize sends a new payload and force startup FCU to the Execution
// Layer client. This informs the EL client of the new head and forces a SYNC
// if blocks are missing. This function should only be run once at startup.
func (s *Service) forceSyncUponFinalize(
	ctx context.Context,
	beaconBlock *ctypes.BeaconBlock,
	parentProposerPubkey *crypto.BLSPubkey,
) error {
	// NewPayload call first to load payload into EL client.
	executionPayload := beaconBlock.GetBody().GetExecutionPayload()
	payloadReq, err := ctypes.BuildNewPayloadRequestFromFork(beaconBlock, parentProposerPubkey)
	if err != nil {
		return err
	}

	if err = payloadReq.HasValidVersionedAndBlockHashes(); err != nil {
		return err
	}

	// We set retryOnSyncingStatus to false here. We can ignore SYNCING status and proceed
	// to the FCU.
	err = s.executionEngine.NotifyNewPayload(ctx, payloadReq, false)
	if err != nil {
		return fmt.Errorf("startSyncUponFinalize NotifyNewPayload failed: %w", err)
	}

	// Submit the forkchoice update to the EL client. This will ensure that it is either synced or
	// starts up a sync.
	req := ctypes.BuildForkchoiceUpdateRequestNoAttrs(
		&engineprimitives.ForkchoiceStateV1{
			HeadBlockHash:      executionPayload.GetBlockHash(),
			SafeBlockHash:      executionPayload.GetParentHash(),
			FinalizedBlockHash: executionPayload.GetParentHash(),
		},
		s.chainSpec.ActiveForkVersionForTimestamp(executionPayload.GetTimestamp()),
	)

	switch _, err = s.executionEngine.NotifyForkchoiceUpdate(ctx, req); {
	case err == nil:
		return nil

	case errors.IsAny(err,
		engineerrors.ErrSyncingPayloadStatus,
		engineerrors.ErrAcceptedPayloadStatus):
		s.logger.Warn(
			//nolint:lll // long message on one line for readability.
			`Your execution client is syncing. It should be downloading eth blocks from its peers. Restart the beacon node once the execution client is caught up.`,
		)
		return err

	default:
		return fmt.Errorf("force startup NotifyForkchoiceUpdate failed: %w", err)
	}
}

// Once you provide the right state, we really need to carry out the very same operations
// to extract the data necessary to build the next block, whether current block is
// being rejected or accepted. This is way there can be (and so should be)
// a single function doing these ops. preFetchBuildData is that function.
func (s *Service) preFetchBuildData(st *statedb.StateDB, currentTime math.U64) (
	*builder.RequestPayloadData,
	error,
) {
	lph, err := st.GetLatestExecutionPayloadHeader()
	if err != nil {
		return nil, fmt.Errorf("failed retrieving latest execution payload header: %w", err)
	}
	nextPayloadTimestamp := payloadtime.Next(
		currentTime,
		lph.GetTimestamp(),
		true, // buildOptimistically
	)

	stateSlot, err := st.GetSlot()
	if err != nil {
		return nil, fmt.Errorf("failed retrieving slot from state: %w", err)
	}
	blkSlot := stateSlot + 1

	// Carry out on the support state st all the operations needed to
	// process a new payload, namely ProcessSlots and ProcessFork
	if _, err = s.stateProcessor.ProcessSlots(st, blkSlot); err != nil {
		return nil, fmt.Errorf("failed processing block slot: %w", err)
	}
	if err = s.stateProcessor.ProcessFork(st, nextPayloadTimestamp, false); err != nil {
		return nil, fmt.Errorf("failed processing fork: %w", err)
	}

	// Once the state is ready, extract relevant data to build next payload
	payloadWithdrawals, _, err := st.ExpectedWithdrawals(nextPayloadTimestamp)
	if err != nil {
		return nil, fmt.Errorf("failed computing expected withdrawals: %w", err)
	}
	epoch := s.chainSpec.SlotToEpoch(blkSlot)
	prevRandao, err := st.GetRandaoMixAtIndex(
		epoch.Unwrap() % s.chainSpec.EpochsPerHistoricalVector(),
	)
	if err != nil {
		return nil, fmt.Errorf("failed retrieving randao: %w", err)
	}

	latestHeader, err := st.GetLatestBlockHeader()
	if err != nil {
		return nil, err
	}

	parentProposerPubkey, err := st.ParentProposerPubkey(nextPayloadTimestamp)
	if err != nil {
		return nil, fmt.Errorf("failed retrieving previous proposer public key: %w", err)
	}

	return &builder.RequestPayloadData{
		Slot:               blkSlot,
		Timestamp:          nextPayloadTimestamp,
		PayloadWithdrawals: payloadWithdrawals,
		PrevRandao:         prevRandao,
		ParentBlockRoot:    latestHeader.HashTreeRoot(),
		FCState: engineprimitives.ForkchoiceStateV1{
			// We set the head of our chain to the latest verified block (whether it is final or not)
			HeadBlockHash: lph.GetBlockHash(),

			SafeBlockHash: lph.GetParentHash(),
			// Assuming consensus guarantees single slot finality, the parent
			// of the latest block we verified must be final already.
			FinalizedBlockHash: lph.GetParentHash(),
		},
		ParentProposerPubkey: parentProposerPubkey,
	}, nil
}

// handleRebuildPayloadForRejectedBlock handles the case where the incoming
// block was rejected and we need to rebuild the payload for the current slot.
func (s *Service) handleRebuildPayloadForRejectedBlock(
	ctx context.Context,
	buildData *builder.RequestPayloadData,
) {
	s.logger.Info("Rebuilding payload for rejected block ⏳ ")
	nextBlkSlot := buildData.Slot
	if _, _, err := s.localBuilder.RequestPayloadAsync(ctx, buildData); err != nil {
		s.metrics.markRebuildPayloadForRejectedBlockFailure(nextBlkSlot, err)
		s.logger.Error(
			"failed to rebuild payload for nil block",
			"error", err,
		)
		return
	}

	s.latestFcuReq.Store(&buildData.FCState)

	s.metrics.markRebuildPayloadForRejectedBlockSuccess(nextBlkSlot)
}

// handleOptimisticPayloadBuild handles optimistically
// building for the next slot.
func (s *Service) handleOptimisticPayloadBuild(
	ctx context.Context,
	buildData *builder.RequestPayloadData,
) {
	s.logger.Info(
		"Optimistically triggering payload build for next slot 🛩️ ",
		"next_slot", buildData.Slot.Base10(),
	)
	if _, _, err := s.localBuilder.RequestPayloadAsync(ctx, buildData); err != nil {
		s.metrics.markOptimisticPayloadBuildFailure(buildData.Slot, err)
		s.logger.Error(
			"Failed to build optimistic payload",
			"for_slot", buildData.Slot.Base10(),
			"error", err,
		)
		return
	}

	s.latestFcuReq.Store(&buildData.FCState)

	s.metrics.markOptimisticPayloadBuildSuccess(buildData.Slot)
}


================================================
FILE: beacon/blockchain/payload_test.go
================================================
// SPDX-License-Identifier: BUSL-1.1
//
// Copyright (C) 2025, Berachain Foundation. All rights reserved.
// Use of this software is governed by the Business Source License included
// in the LICENSE file of this repository and at www.mariadb.com/bsl11.
//
// ANY USE OF THE LICENSED WORK IN VIOLATION OF THIS LICENSE WILL AUTOMATICALLY
// TERMINATE YOUR RIGHTS UNDER THIS LICENSE FOR THE CURRENT AND ALL OTHER
// VERSIONS OF THE LICENSED WORK.
//
// THIS LICENSE DOES NOT GRANT YOU ANY RIGHT IN ANY TRADEMARK OR LOGO OF
// LICENSOR OR ITS AFFILIATES (PROVIDED THAT YOU MAY USE A TRADEMARK OR LOGO OF
// LICENSOR AS EXPRESSLY REQUIRED BY THIS LICENSE).
//
// TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
// AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
// EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
// TITLE.

package blockchain_test

import (
	"context"
	"encoding/json"
	"sync"
	"testing"
	"time"

	"cosmossdk.io/log"
	storetypes "cosmossdk.io/store/types"
	"github.com/berachain/beacon-kit/beacon/blockchain"
	bcmocks "github.com/berachain/beacon-kit/beacon/blockchain/mocks"
	"github.com/berachain/beacon-kit/chain"
	"github.com/berachain/beacon-kit/config/spec"
	ctypes "github.com/berachain/beacon-kit/consensus-types/types"
	"github.com/berachain/beacon-kit/consensus/types"
	engineprimitives "github.com/berachain/beacon-kit/engine-primitives/engine-primitives"
	"github.com/berachain/beacon-kit/errors"
	gethtypes "github.com/berachain/beacon-kit/gethlib/types"
	"github.com/berachain/beacon-kit/node-core/components/metrics"
	"github.com/berachain/beacon-kit/payload/builder"
	"github.com/berachain/beacon-kit/primitives/common"
	"github.com/berachain/beacon-kit/primitives/constants"
	"github.com/berachain/beacon-kit/primitives/math"
	"github.com/berachain/beacon-kit/primitives/transition"
	"github.com/berachain/beacon-kit/primitives/version"
	"github.com/berachain/beacon-kit/state-transition/core"
	stmocks "github.com/berachain/beacon-kit/state-transition/core/mocks"
	"github.com/berachain/beacon-kit/state-transition/core/state"
	"github.com/berachain/beacon-kit/storage/deposit"
	statetransition "github.com/berachain/beacon-kit/testing/state-transition"
	sdk "github.com/cosmos/cosmos-sdk/types"
	"github.com/stretchr/testify/mock"
	"github.com/stretchr/testify/require"
)

// When we reject a block and we have optimistic payload building enabled
// we must make sure that a few beacon state quantities are duly pre-processed
// before building the block.
func TestOptimisticBlockBuildingRejectedBlockStateChecks(t *testing.T) {
	t.Parallel()

	cs, err := spec.MainnetChainSpec()
	require.NoError(t, err)

	chain, st, _, ctx, _, b, sb, eng, depStore := setupOptimisticPayloadTests(t, cs)
	sb.EXPECT().StateFromContext(mock.Anything).Return(st)
	sb.EXPECT().DepositStore().RunAndReturn(func() deposit.StoreManager { return depStore })
	b.EXPECT().Enabled().Return(true)

	// Note: test avoid calling chain.Start since it only starts the deposits
	// goroutine which is not really relevant for this test

	// Before processing any block it is mandatory to handle genesis
	genesisData := testProcessGenesis(t, cs, chain, ctx)

	// Finally create a block that will be rejected and
	// verify the state on top of which is next payload built
	var (
		consensusTime   = time.Now()
		proposerAddress = []byte{'d', 'u', 'm', 'm', 'y'} // this will err on purpose
	)

	// Since this is the first block called post genesis
	// forceSyncUponProcess will be called.
	dummyPayloadID := &engineprimitives.PayloadID{1, 2, 3}
	eng.EXPECT().NotifyForkchoiceUpdate(mock.Anything, mock.Anything).Return(dummyPayloadID, nil)

	// we set just enough data in invalid block to let it pass
	// the first validations in chain before state processor is invoked
	invalidBlk := &ctypes.BeaconBlock{
		Slot: 1, // first block after genesis
		Body: &ctypes.BeaconBlockBody{
			ExecutionPayload: &ctypes.ExecutionPayload{
				Timestamp: math.U64(cs.GenesisTime() + 1),
			},
		},
	}

	// register async call to block building
	var wg sync.WaitGroup          // useful to make test wait on async checks
	stateRoot := st.HashTreeRoot() // track state root before the changes done by optimistic build
	latestHeader, err := st.GetLatestBlockHeader()
	require.NoError(t, err)
	latestHeader.SetStateRoot(stateRoot)
	expectedParentBlockRoot := latestHeader.HashTreeRoot()

	b.EXPECT().RequestPayloadAsync(mock.Anything, mock.Anything).Run(
		func(_ context.Context, r *builder.RequestPayloadData) {
			defer wg.Done()
			genesisHeader := genesisData.ExecutionPayloadHeader
			genesisBlkHeader := core.GenesisBlockHeader(cs.GenesisForkVersion())
			genesisBlkHeader.SetStateRoot(stateRoot)

			require.Equal(t, math.U64(consensusTime.Unix())+1, r.Timestamp)

			require.Equal(t, genesisHeader.GetBlockHash(), r.FCState.HeadBlockHash)

			require.Equal(t, expectedParentBlockRoot, r.ParentBlockRoot)

			require.Empty(t, r.FCState.FinalizedBlockHash)    // this is first block post genesis
			require.Equal(t, constants.GenesisSlot+1, r.Slot) // rebuild block on top of genesis
		},
	).Return(nil, common.Version{0xff}, errors.New("does not matter")) // return values do not really matter in this test
	wg.Add(1)

	// check slot pre test
	slot, err := st.GetSlot()
	require.NoError(t, err)
	require.Equal(t, constants.GenesisSlot, slot)

	_, err = chain.VerifyIncomingBlock(
		ctx.ConsensusCtx(),
		types.NewConsensusBlock(invalidBlk, proposerAddress, consensusTime),
		true, // this block is next block proposer
	)
	require.ErrorIs(t, err, core.ErrProposerMismatch)

	// wait for block building goroutine to carry out all the checks
	wg.Wait()

	// No checks on state st post block. The block is invalid so
	// its state will be dropped and its content does not matter
}

// When we verify successfully a block and we have optimistic payload building enabled
// we must make sure that a few beacon state quantities are duly pre-processed
// before building the block.
func TestOptimisticBlockBuildingVerifiedBlockStateChecks(t *testing.T) {
	t.Parallel()

	cs, err := spec.MainnetChainSpec()
	require.NoError(t, err)

	chain, st, cms, ctx, sp, b, sb, eng, depStore := setupOptimisticPayloadTests(t, cs)
	sb.EXPECT().StateFromContext(mock.Anything).Return(st).Times(1) // only for genesis
	sb.EXPECT().DepositStore().RunAndReturn(func() deposit.StoreManager { return depStore })
	b.EXPECT().Enabled().Return(true)

	// Before processing any block it is mandatory to handle genesis
	genesisData := testProcessGenesis(t, cs, chain, ctx)

	// write genesis changes to make them available for next block
	//nolint:errcheck // false positive as this has no return value
	ctx.ConsensusCtx().(sdk.Context).MultiStore().(storetypes.CacheMultiStore).Write()

	// Finally create a block that will be rejected and
	// verify the state on top of which is next payload built
	var (
		consensusTime = time.Now()
		proposer      = ctx.ProposerAddress()
	)

	// Since this is the first block called post genesis
	// forceSyncUponProcess will be called.
	dummyPayloadID := &engineprimitives.PayloadID{1, 2, 3}
	eng.EXPECT().NotifyForkchoiceUpdate(mock.Anything, mock.Anything).Return(dummyPayloadID, nil)

	// BUILD A VALID BLOCK (without polluting state st)
	sdkCtx := sdk.NewContext(cms.CacheMultiStore(), true, log.NewNopLogger())
	buildState := state.NewBeaconStateFromDB(
		st.KVStore.WithContext(sdkCtx), cs, sdkCtx.Logger(), metrics.NewNoOpTelemetrySink(),
	)

	nextBlkTimestamp := math.U64(cs.GenesisTime() + 1)
	_, err = sp.ProcessSlots(buildState, constants.GenesisSlot+1)
	require.NoError(t, err)

	depositsRoot := ctypes.Deposits(genesisData.Deposits).HashTreeRoot()

	validBlk := buildNextBlock(
		t,
		cs,
		buildState,
		ctypes.NewEth1Data(depositsRoot),
		nextBlkTimestamp,
	)
	stateRoot, err := computeStateRoot( // fix state root in block
		ctx.ConsensusCtx(),
		proposer,
		math.U64(consensusTime.Unix()),
		sp,
		buildState,
		validBlk,
	)
	require.NoError(t, err)
	validBlk.SetStateRoot(stateRoot)
	// end of BUILD A VALID BLOCK

	// register async call to block building
	var wg sync.WaitGroup // useful to make test wait on async checks
	b.EXPECT().RequestPayloadAsync(mock.Anything, mock.Anything).Run(
		func(_ context.Context, r *builder.RequestPayloadData) {
			defer wg.Done()
			require.Equal(t, math.U64(consensusTime.Unix())+1, r.Timestamp)

			require.Equal(
				t,
				validBlk.GetBody().GetExecutionPayload().GetBlockHash(),
				r.FCState.HeadBlockHash,
			)

			genesisHeader := genesisData.ExecutionPayloadHeader.GetBlockHash()
			require.Equal(t, genesisHeader, r.FCState.FinalizedBlockHash)

			require.Equal(t, validBlk.HashTreeRoot(), r.ParentBlockRoot)
			require.Equal(t, validBlk.Slot+1, r.Slot)
		},
	).Return(nil, common.Version{0xff}, errors.New("does not matter")) // return values do not really matter in this test
	wg.Add(1)

	// check slot pre test
	slot, err := st.GetSlot()
	require.NoError(t, err)
	require.Equal(t, constants.GenesisSlot, slot)

	eng.EXPECT().NotifyNewPayload(mock.Anything, mock.Anything, mock.Anything).Return(nil)
	sb.EXPECT().StateFromContext(mock.Anything).Return(st).Times(1)
	_, err = chain.VerifyIncomingBlock(
		ctx.ConsensusCtx(),
		types.NewConsensusBlock(validBlk, ctx.ProposerAddress(), consensusTime),
		true, // this block is next block proposer
	)
	require.NoError(t, err)

	// wait for block building goroutine to carry out all the checks
	wg.Wait()

	// check slot post test
	slot, err = st.GetSlot()
	require.NoError(t, err)
	require.Equal(t, validBlk.GetSlot(), slot)
}

func setupOptimisticPayloadTests(t *testing.T, cs chain.Spec) (
	*blockchain.Service,
	*statetransition.TestBeaconStateT,
	storetypes.CommitMultiStore,
	core.ReadOnlyContext,
	*statetransition.TestStateProcessorT,
	*bcmocks.LocalBuilder,
	*bcmocks.StorageBackend,
	*stmocks.ExecutionEngine,
	deposit.StoreManager,
) {
	t.Helper()
	sp, st, depStore, ctx, cms, eng := statetransition.SetupTestState(t, cs)

	logger := log.NewNopLogger()
	ts := metrics.NewNoOpTelemetrySink()
	sb := bcmocks.NewStorageBackend(t)
	b := bcmocks.NewLocalBuilder(t)

	chain := blockchain.NewService(
		sb,
		nil, // blockchain.BlobProcessor unused in this test
		nil, // deposit.Contract unused in this test
		logger,
		cs,
		eng,
		b,
		sp,
		ts,
	)
	return chain, st, cms, ctx, sp, b, sb, eng, depStore
}

func testProcessGenesis(
	t *testing.T,
	cs chain.Spec,
	chain *blockchain.Service,
	ctx core.ReadOnlyContext,
) *ctypes.Genesis {
	t.Helper()

	// TODO: I had to manually align default genesis and cs specs
	// Check if this is correct/necessary
	genesisData := ctypes.DefaultGenesis(cs.GenesisForkVersion())
	genesisData.ExecutionPayloadHeader.Timestamp = math.U64(cs.GenesisTime())
	genesisData.Deposits = []*ctypes.Deposit{
		{
			Pubkey: [48]byte{0x01},
			Amount: cs.MaxEffectiveBalance(),
			Credentials: ctypes.NewCredentialsFromExecutionAddress(
				common.ExecutionAddress{0x01},
			),
			Index: uint64(0),
		},
	}
	genBytes, err := json.Marshal(genesisData)
	require.NoError(t, err)
	_, err = chain.ProcessGenesisData(ctx.ConsensusCtx(), genBytes)
	require.NoError(t, err)
	return genesisData
}

func buildNextBlock(
	t *testing.T,
	cs chain.Spec,
	st *state.StateDB,
	eth1Data *ctypes.Eth1Data,
	timestamp math.U64,
) *ctypes.BeaconBlock {
	t.Helper()
	require.NotNil(t, cs)

	parentBlkHeader, err := st.GetLatestBlockHeader()
	require.NoError(t, err)
	nextBlockSlot := parentBlkHeader.GetSlot() + 1
	nextBlockEpoch := cs.SlotToEpoch(nextBlockSlot)

	randaoMix, err := st.GetRandaoMixAtIndex(nextBlockEpoch.Unwrap() % cs.EpochsPerHistoricalVector())
	require.NoError(t, err)

	// build the block
	fv := cs.ActiveForkVersionForTimestamp(timestamp)
	versionable := ctypes.NewVersionable(fv)
	blk, err := ctypes.NewBeaconBlockWithVersion(
		nextBlockSlot,
		parentBlkHeader.GetProposerIndex(),
		parentBlkHeader.HashTreeRoot(),
		fv,
	)
	require.NoError(t, err)

	// build the payload
	lph, err := st.GetLatestExecutionPayloadHeader()
	require.NoError(t, err)

	// Check chain canonicity
	payload := &ctypes.ExecutionPayload{
		Versionable: versionable,
		Timestamp:   timestamp,
		ParentHash:  lph.GetBlockHash(),
		Random:      randaoMix,

		ExtraData:     []byte("testing"),
		Transactions:  [][]byte{},
		Withdrawals:   []*engineprimitives.Withdrawal{st.EVMInflationWithdrawal(timestamp)},
		BaseFeePerGas: math.NewU256(0),
	}
	parentBeaconBlockRoot := parentBlkHeader.HashTreeRoot()

	var (
		ethBlk    *gethtypes.Block
		noExecReq = &ctypes.ExecutionRequests{}
	)
	if version.IsBefore(fv, version.Electra()) {
		ethBlk, _, err = ctypes.MakeEthBlock(payload, parentBeaconBlockRoot, nil, nil)
		require.NoError(t, err)
	} else {
		encodedER, erErr := ctypes.GetExecutionRequestsList(noExecReq)
		require.NoError(t, erErr)
		require.NotNil(t, encodedER)
		ethBlk, _, err = ctypes.MakeEthBlock(payload, parentBeaconBlockRoot, encodedER, nil)
		require.NoError(t, err)
	}
	payload.BlockHash = common.ExecutionHash(ethBlk.Hash())

	require.NoError(t, err)
	blk.Body = &ctypes.BeaconBlockBody{
		Versionable:      versionable,
		ExecutionPayload: payload,
		Eth1Data:         eth1Data,
	}
	if version.EqualsOrIsAfter(fv, version.Electra()) {
		err = blk.Body.SetExecutionRequests(noExecReq)
		require.NoError(t, err)
	}
	return blk
}

func computeStateRoot(
	ctx context.Context,
	proposerAddress []byte,
	consensusTime math.U64,
	sp *statetransition.TestStateProcessorT,
	st *state.StateDB,
	blk *ctypes.BeaconBlock,
) (common.Root, error) {
	txCtx := transition.NewTransitionCtx(
		ctx,
		consensusTime,
		proposerAddress,
	).
		WithVerifyPayload(false).
		WithVerifyRandao(false).
		WithVerifyResult(false).
		WithMeterGas(false)

	//nolint:contextcheck // we need txCtx
	if _, err := sp.Transition(txCtx, st, blk); err != nil {
		return common.Root{}, err
	}

	return st.HashTreeRoot(), nil
}


================================================
FILE: beacon/blockchain/process_proposal.go
================================================
// SPDX-License-Identifier: BUSL-1.1
//
// Copyright (C) 2025, Berachain Foundation. All rights reserved.
// Use of this software is governed by the Business Source License included
// in the LICENSE file of this repository and at www.mariadb.com/bsl11.
//
// ANY USE OF THE LICENSED WORK IN VIOLATION OF THIS LICENSE WILL AUTOMATICALLY
// TERMINATE YOUR RIGHTS UNDER THIS LICENSE FOR THE CURRENT AND ALL OTHER
// VERSIONS OF THE LICENSED WORK.
//
// THIS LICENSE DOES NOT GRANT YOU ANY RIGHT IN ANY TRADEMARK OR LOGO OF
// LICENSOR OR ITS AFFILIATES (PROVIDED THAT YOU MAY USE A TRADEMARK OR LOGO OF
// LICENSOR AS EXPRESSLY REQUIRED BY THIS LICENSE).
//
// TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
// AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
// EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
// TITLE.

package blockchain

import (
	"bytes"
	"cmp"
	"context"
	"fmt"
	"slices"
	"time"

	ctypes "github.com/berachain/beacon-kit/consensus-types/types"
	"github.com/berachain/beacon-kit/consensus/cometbft/service/cache"
	"github.com/berachain/beacon-kit/consensus/types"
	datypes "github.com/berachain/beacon-kit/da/types"
	engineprimitives "github.com/berachain/beacon-kit/engine-primitives/engine-primitives"
	"github.com/berachain/beacon-kit/errors"
	"github.com/berachain/beacon-kit/payload/builder"
	"github.com/berachain/beacon-kit/primitives/common"
	"github.com/berachain/beacon-kit/primitives/crypto"
	"github.com/berachain/beacon-kit/primitives/eip4844"
	"github.com/berachain/beacon-kit/primitives/math"
	"github.com/berachain/beacon-kit/primitives/transition"
	"github.com/berachain/beacon-kit/primitives/version"
	"github.com/berachain/beacon-kit/state-transition/core"
	statedb "github.com/berachain/beacon-kit/state-transition/core/state"
	cmtabci "github.com/cometbft/cometbft/abci/types"
	sdk "github.com/cosmos/cosmos-sdk/types"
)

const (
	// BeaconBlockTxIndex represents the index of the beacon block transaction.
	// It is the first transaction in the tx list.
	BeaconBlockTxIndex uint = iota
	// BlobSidecarsTxIndex represents the index of the blob sidecar transaction.
	// It follows the beacon block transaction in the tx list.
	BlobSidecarsTxIndex

	// A Consensus block has at most two transactions (block and blob).
	MaxConsensusTxsCount = 2
)

//nolint:funlen // abundantly commented
func (s *Service) ProcessProposal(
	ctx sdk.Context,
	req *cmtabci.ProcessProposalRequest,
	thisNodeAddress []byte,
) (transition.ValidatorUpdates, error) {
	signedBlk, sidecars, err := s.ParseBeaconBlock(req)
	if err != nil {
		s.logger.Error("Failed to decode block and blobs", "error", err)
		return nil, fmt.Errorf("failed to decode block and blobs: %w", err)
	}
	blk := signedBlk.GetBeaconBlock()

	// Sort the sidecars by index for verification and processing.
	slices.SortFunc(sidecars, func(a, b *datypes.BlobSidecar) int {
		return cmp.Compare(a.GetIndex(), b.GetIndex())
	})

	// There are two different timestamps:
	//     - The "consensus time" is determined by CometBFT consensus and can be retrieved with `req.GetTime()`
	//     - The "block time" is determined by beacon-kit consensus and can be retrieved with `blk.GetTimestamp()`
	// The "consensus time" is what the network agrees the current time is based on CometBFT PBTS.
	// This "consensus time" is used to constrain the timestamp set as the "block time" by the
	// beacon-kit app, but they are not always equal in value. The "block time" is used by the
	// beacon-kit consensus and execution layers to determine the active fork version.
	//
	// When unmarshaling the BeaconBlock, we do not yet have access to the "block time", so we
	// must rely on the "consensus time" as our best estimation of the "block time" needed to
	// determine the current fork version. Since the two timestamps could be different, we need to
	// ensure that the fork version for these timestamps are the same. This may result in a failed
	// proposal or two at the start of the fork.
	forkVersion := s.chainSpec.ActiveForkVersionForTimestamp(math.U64(req.GetTime().Unix())) //#nosec: G115
	blkVersion := s.chainSpec.ActiveForkVersionForTimestamp(blk.GetTimestamp())
	if !version.Equals(blkVersion, forkVersion) {
		return nil, fmt.Errorf("CometBFT version %v, BeaconBlock version %v: %w",
			forkVersion, blkVersion,
			ErrVersionMismatch,
		)
	}

	// Make sure we have the right number of BlobSidecars
	blobKzgCommitments := blk.GetBody().GetBlobKzgCommitments()
	numCommitments := len(blobKzgCommitments)
	if numCommitments != len(sidecars) {
		return nil, fmt.Errorf("expected %d sidecars, got %d: %w",
			numCommitments, len(sidecars),
			ErrSidecarCommitmentMismatch,
		)
	}
	if uint64(numCommitments) > s.chainSpec.MaxBlobsPerBlock() {
		return nil, fmt.Errorf("expected less than %d sidecars, got %d: %w",
			s.chainSpec.MaxBlobsPerBlock(), numCommitments,
			core.ErrExceedsBlockBlobLimit,
		)
	}

	// Verify the block and sidecar signatures. We can simply verify the block
	// signature and then make sure the sidecar signatures match the block.
	blkSignature := signedBlk.GetSignature()
	for i, sidecar := range sidecars {
		sidecarSignature := sidecar.GetSignature()
		if !bytes.Equal(blkSignature[:], sidecarSignature[:]) {
			return nil, fmt.Errorf("%w, idx: %d", ErrSidecarSignatureMismatch, i)
		}
	}
	err = s.VerifyIncomingBlockSignature(ctx, blk, signedBlk.GetSignature())
	if err != nil {
		return nil, err
	}

	if numCommitments > 0 {
		// Process the blob sidecars
		//
		// In theory, swapping the order of verification between the sidecars
		// and the incoming block should not introduce any inconsistencies
		// in the state on which the sidecar verification depends on (notably
		// the currently active fork). ProcessProposal should only
		// keep the state changes as candidates (which is what we do in
		// VerifyIncomingBlock).
		err = s.VerifyIncomingBlobSidecars(ctx, sidecars, blk.GetHeader(), blobKzgCommitments)
		if err != nil {
			s.logger.Error("failed to verify incoming blob sidecars", "error", err)
			return nil, err
		}
	}

	// Process the block.
	s.logger.Debug( // needed for some checks in sim tests
		"Processing block with fork version",
		"block", req.Height,
		"fork", blkVersion.String(),
	)
	consensusBlk := types.NewConsensusBlock(
		blk,
		req.GetProposerAddress(),
		req.GetTime(),
	)

	var valUpdates transition.ValidatorUpdates
	valUpdates, err = s.VerifyIncomingBlock(
		ctx,
		consensusBlk,
		bytes.Equal(thisNodeAddress, req.NextProposerAddress),
	)
	if err != nil {
		s.logger.Error("failed to verify incoming block", "error", err)
		return nil, err
	}

	// once we have successfully verified the block we cache it in the node builder.
	// This ensures the node will be able to build a payload even in scenarios where
	// EVM won't provide a new payload (e.g. if it received FCU(Head == N+1) due to
	// optimistic block building, then FCU(Head == N)) if verified block is not finalized)
	envelope, err := payloadEnvFromPayload(sidecars, blk)
	if err != nil {
		return nil, err
	}

	s.localBuilder.CacheLatestVerifiedPayload(blk.Slot, envelope)
	return valUpdates.CanonicalSort(), nil
}

func payloadEnvFromPayload(sidecars datypes.BlobSidecars, blk *ctypes.BeaconBlock) (ctypes.BuiltExecutionPayloadEnv, error) {
	blobBundle := &engineprimitives.BlobsBundleV1{}
	for _, s := range sidecars {
		blobBundle.Commitments = append(blobBundle.Commitments, s.GetKzgCommitment())
		blobBundle.Proofs = append(blobBundle.Proofs, s.GetKzgProof())

		blob := s.GetBlob()
		blobBundle.Blobs = append(blobBundle.Blobs, &blob)
	}

	var (
		executionRequests []ctypes.EncodedExecutionRequest
		err               error
	)
	switch reqs, errReqs := blk.Body.GetExecutionRequests(); {
	case errReqs == nil:
		executionRequests, err = ctypes.GetExecutionRequestsList(reqs)
		if err != nil {
			return nil, fmt.Errorf("failed retrieving encoded execution requests from payload: %w", err)
		}
	case errors.Is(errReqs, ctypes.ErrFieldNotSupportedOnFork):
		// nothing to do, executionRequests is nil
	default:
		return nil, fmt.Errorf("failed getting execution requests from payload: %w", errReqs)
	}

	return ctypes.NewExecutionPayloadEnvelope[*engineprimitives.BlobsBundleV1](
		blk.Body.ExecutionPayload,
		blobBundle,
		executionRequests,
	), nil
}

func (s *Service) VerifyIncomingBlockSignature(
	ctx context.Context,
	beaconBlk *ctypes.BeaconBlock,
	signature crypto.BLSSignature,
) error {
	// Get the sidecar verification function from the state processor
	signatureVerifierFn, err := s.stateProcessor.GetSignatureVerifierFn(
		s.storageBackend.StateFromContext(ctx),
	)
	if err != nil {
		return errors.New("failed to create block signature verifier")
	}
	err = signatureVerifierFn(beaconBlk, signature)
	if err != nil {
		return fmt.Errorf("failed verifying incoming block signature: %w", err)
	}
	return err
}

// VerifyIncomingBlobSidecars verifies the BlobSidecars of an incoming
// proposal and logs the process.
func (s *Service) VerifyIncomingBlobSidecars(
	ctx context.Context,
	sidecars datypes.BlobSidecars,
	blkHeader *ctypes.BeaconBlockHeader,
	kzgCommitments eip4844.KZGCommitments[common.ExecutionHash],
) error {
	// Verify the blobs and ensure they match the local state.
	err := s.blobProcessor.VerifySidecars(ctx, sidecars, blkHeader, kzgCommitments)
	if err != nil {
		s.logger.Error(
			"Blob sidecars verification failed - rejecting incoming blob sidecars",
			"reason", err, "slot", blkHeader.GetSlot(),
		)
		return err
	}

	s.logger.Info(
		"Blob sidecars verification succeeded - accepting incoming blob sidecars",
		"num_blobs", len(sidecars), "slot", blkHeader.GetSlot(),
	)
	return nil
}

// VerifyIncomingBlock verifies the state root of an incoming block
// and logs the process.
//
//nolint:funlen // abundantly commented
func (s *Service) VerifyIncomingBlock(
	ctx context.Context,
	blk *types.ConsensusBlock,
	isNextBlockProposer bool,
) (transition.ValidatorUpdates, error) {
	beaconBlk := blk.GetBeaconBlock()
	state := s.storageBackend.StateFromContext(ctx)

	// Force a sync of the startup head if we haven't done so already.
	// TODO: Address the need for calling forceStartupSyncOnce in ProcessProposal. On a running
	// network (such as mainnet), it should be theoretically impossible to hit the case where
	// ProcessProposal is called before FinalizeBlock. It may be the case that new networks run
	// into this case during the first block after genesis.
	// TODO: Consider panicing here if this fails. If our node cannot successfully run
	// forceStartupSync, then we should shut down the node and fix the problem.
	s.forceStartupSyncOnce.Do(func() { s.forceSyncUponProcess(ctx, state) })

	s.logger.Debug(
		"Received incoming beacon block",
		"state_root", beaconBlk.GetStateRoot(),
		"slot", beaconBlk.GetSlot(),
	)

	// verify block slot
	stateSlot, err := state.GetSlot()
	if err != nil {
		s.logger.Error(
			"failed loading state slot to verify block slot",
			"reason", err,
		)
		return nil, err
	}

	blkSlot := beaconBlk.GetSlot()
	if blkSlot != stateSlot+1 {
		s.logger.Error(
			"Rejecting incoming beacon block ❌ ",
			"state slot", stateSlot.Base10(),
			"block slot", blkSlot.Base10(),
			"reason", ErrUnexpectedBlockSlot.Error(),
		)
		return nil, ErrUnexpectedBlockSlot
	}

	var (
		nextBlockData          *builder.RequestPayloadData
		errFetch               error
		shouldBuildNextPayload = s.shouldBuildNextPayload(isNextBlockProposer)
	)

	if shouldBuildNextPayload {
		// makes sure that preFetchBuildData does not affect state
		ephemeralState := state.Protect(ctx)
		nextBlockData, errFetch = s.preFetchBuildData(ephemeralState, blk.GetConsensusTime())
		if errFetch != nil {
			// We don't return with err if pre-fetch fails. Instead we log the issue
			// and still move to process the current block. Next block can always be
			// built right after current height is finalized.
			s.logger.Warn(
				"Failed pre fetching data for optimistic block building",
				"case", "block rejectiong",
				"err", errFetch,
			)
		}
	}

	// Verify the state root of the incoming block.
	valUpdates, err := s.verifyStateRoot(ctx, state, blk)
	if err != nil {
		s.logger.Error(
			"Rejecting incoming beacon block ❌ ",
			"state_root", beaconBlk.GetStateRoot(),
			"reason", err,
		)

		if shouldBuildNextPayload {
			if nextBlockData == nil {
				// Failed fetching data to build next block. Just return block error
				return nil, err
			}
			go s.handleRebuildPayloadForRejectedBlock(ctx, nextBlockData)
		}

		return nil, err
	}

	s.logger.Debug(
		"State root verification succeeded - accepting incoming beacon block",
		"state_root", beaconBlk.GetStateRoot(),
	)

	if shouldBuildNextPayload {
		// makes sure that preFetchBuildDataForSuccess does not affect state
		ephemeralState := state.Protect(ctx)
		nextBlockData, errFetch = s.preFetchBuildData(ephemeralState, blk.GetConsensusTime())
		if errFetch != nil {
			// We don't mark the block as rejected if it is valid but pre-fetch fails.
			// Instead we log the issue and move to process the current block.
			// Next block can always be built right after current height is finalized.
			s.logger.Warn(
				"Failed pre fetching data for optimistic block building",
				"case", "block success",
				"err", errFetch,
			)
			return valUpdates, nil
		}
		go s.handleOptimisticPayloadBuild(ctx, nextBlockData)
	}

	return valUpdates, nil
}

// verifyStateRoot verifies the state root of an incoming block.
func (s *Service) verifyStateRoot(
	ctx context.Context,
	st *statedb.StateDB,
	blk *types.ConsensusBlock,
) (transition.ValidatorUpdates, error) {
	startTime := time.Now()

	isCacheActive := cache.IsStateCachingActive(s.chainSpec, blk.GetBeaconBlock().GetSlot())
	if isCacheActive {
		// Re-use finalize block metrics if caching is active
		defer s.metrics.measureStateTransitionDuration(startTime)
	} else {
		// Keep ProcessProposal specific metrics before fork is active
		defer s.metrics.measureStateRootVerificationTime(startTime)
	}

	txCtx := transition.NewTransitionCtx(
		ctx,
		blk.GetConsensusTime(),
		blk.GetProposerAddress(),
	).
		WithVerifyPayload(true).
		WithVerifyRandao(true).
		WithVerifyResult(true).
		WithMeterGas(isCacheActive)

	valUpdates, err := s.stateProcessor.Transition(txCtx, st, blk.GetBeaconBlock())
	return valUpdates, err
}

// shouldBuildNextPayload returns true if optimistic
// payload builds are enabled.
func (s *Service) shouldBuildNextPayload(isNextBlockProposer bool) bool {
	return isNextBlockProposer && s.localBuilder.Enabled()
}


================================================
FILE: beacon/blockchain/pruning.go
================================================
// SPDX-License-Identifier: BUSL-1.1
//
// Copyright (C) 2025, Berachain Foundation. All rights reserved.
// Use of this software is governed by the Business Source License included
// in the LICENSE file of this repository and at www.mariadb.com/bsl11.
//
// ANY USE OF THE LICENSED WORK IN VIOLATION OF THIS LICENSE WILL AUTOMATICALLY
// TERMINATE YOUR RIGHTS UNDER THIS LICENSE FOR THE CURRENT AND ALL OTHER
// VERSIONS OF THE LICENSED WORK.
//
// THIS LICENSE DOES NOT GRANT YOU ANY RIGHT IN ANY TRADEMARK OR LOGO OF
// LICENSOR OR ITS AFFILIATES (PROVIDED THAT YOU MAY USE A TRADEMARK OR LOGO OF
// LICENSOR AS EXPRESSLY REQUIRED BY THIS LICENSE).
//
// TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
// AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
// EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
// TITLE.

package blockchain

import (
	"context"

	ctypes "github.com/berachain/beacon-kit/consensus-types/types"
)

func (s *Service) processPruning(ctx context.Context, beaconBlk *ctypes.BeaconBlock) error {
	// prune availability store
	start, end := availabilityPruneRangeFn(beaconBlk.GetSlot().Unwrap(), s.chainSpec)
	err := s.storageBackend.AvailabilityStore().Prune(start, end)
	if err != nil {
		return err
	}

	// prune deposit store
	start, end = depositPruneRangeFn(beaconBlk.GetBody().GetDeposits(), s.chainSpec)
	err = s.storageBackend.DepositStore().Prune(ctx, start, end)
	if err != nil {
		return err
	}

	return nil
}

func depositPruneRangeFn([]*ctypes.Deposit, PruningChainSpec) (uint64, uint64) {
	// The whole deposit list is validated in consensus and its Merkle root is part of
	// Beacon State. Therefore, every node must keep the full deposit list and deposits
	// pruning must be turned off.
	return 0, 0
}

//nolint:unparam // this is ok
func availabilityPruneRangeFn(slot uint64, cs PruningChainSpec) (uint64, uint64) {
	window := cs.MinEpochsForBlobsSidecarsRequest().Unwrap() * cs.SlotsPerEpoch()
	if slot < window {
		return 0, 0
	}

	return 0, slot - window
}


================================================
FILE: beacon/blockchain/service.go
================================================
// SPDX-License-Identifier: BUSL-1.1
//
// Copyright (C) 2025, Berachain Foundation. All rights reserved.
// Use of this software is governed by the Business Source License included
// in the LICENSE file of this repository and at www.mariadb.com/bsl11.
//
// ANY USE OF THE LICENSED WORK IN VIOLATION OF THIS LICENSE WILL AUTOMATICALLY
// TERMINATE YOUR RIGHTS UNDER THIS LICENSE FOR THE CURRENT AND ALL OTHER
// VERSIONS OF THE LICENSED WORK.
//
// THIS LICENSE DOES NOT GRANT YOU ANY RIGHT IN ANY TRADEMARK OR LOGO OF
// LICENSOR OR ITS AFFILIATES (PROVIDED THAT YOU MAY USE A TRADEMARK OR LOGO OF
// LICENSOR AS EXPRESSLY REQUIRED BY THIS LICENSE).
//
// TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
// AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
// EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
// TITLE.

package blockchain

import (
	"context"
	"fmt"
	"sync"
	"sync/atomic"

	engineprimitives "github.com/berachain/beacon-kit/engine-primitives/engine-primitives"
	"github.com/berachain/beacon-kit/execution/deposit"
	"github.com/berachain/beacon-kit/log"
	"github.com/berachain/beacon-kit/primitives/math"
)

// Service is the blockchain service.
type Service struct {
	// storageBackend represents the backend storage for not state-enforced data.
	storageBackend StorageBackend
	// blobProcessor is used for processing sidecars.
	blobProcessor BlobProcessor
	// depositContract is the contract interface for interacting with the
	// deposit contract.
	depositContract deposit.Contract
	// eth1FollowDistance is the follow distance for Ethereum 1.0 blocks.
	eth1FollowDistance math.U64
	// failedBlocksMu protects failedBlocks for concurrent access.
	failedBlocksMu sync.RWMutex
	// failedBlocks is a map of blocks that failed to be processed
	// and should be retried.
	failedBlocks map[math.U64]struct{}
	// logger is used for logging messages in the service.
	logger log.Logger
	// chainSpec holds the chain specifications.
	chainSpec ServiceChainSpec
	// executionEngine is the execution engine responsible for processing
	//
	// execution payloads.
	executionEngine ExecutionEngine
	// localBuilder is a local builder for constructing new beacon states.
	localBuilder LocalBuilder
	// stateProcessor is the state processor for beacon blocks and states.
	stateProcessor StateProcessor
	// metrics is the metrics for the service.
	metrics *chainMetrics
	// forceStartupSyncOnce is used to force a sync of the startup head.
	forceStartupSyncOnce *sync.Once

	// latestFcuReq holds a copy of the latest FCU sent to the execution layer.
	// It helps avoid resending the same FCU data (and spares a network call)
	// in case optimistic block building is active
	latestFcuReq atomic.Pointer[engineprimitives.ForkchoiceStateV1]
}

// NewService creates a new validator service.
func NewService(
	storageBackend StorageBackend,
	blobProcessor BlobProcessor,
	depositContract deposit.Contract,
	logger log.Logger,
	chainSpec ServiceChainSpec,
	executionEngine ExecutionEngine,
	localBuilder LocalBuilder,
	stateProcessor StateProcessor,
	telemetrySink TelemetrySink,
) *Service {
	return &Service{
		storageBackend:       storageBackend,
		blobProcessor:        blobProcessor,
		depositContract:      depositContract,
		eth1FollowDistance:   math.U64(chainSpec.Eth1FollowDistance()),
		failedBlocks:         make(map[math.Slot]struct{}),
		logger:               logger,
		chainSpec:            chainSpec,
		executionEngine:      executionEngine,
		localBuilder:         localBuilder,
		stateProcessor:       stateProcessor,
		metrics:              newChainMetrics(telemetrySink),
		forceStartupSyncOnce: new(sync.Once),
	}
}

// Name returns the name of the service.
func (s *Service) Name() string {
	return "blockchain"
}

// Start starts the blockchain service.
func (s *Service) Start(ctx context.Context) error {
	// Catchup deposits for failed blocks. TODO: remove.
	go s.depositCatchupFetcher(ctx)

	return nil
}

// Stop stops the blockchain service and closes the deposit store.
func (s *Service) Stop() error {
	s.logger.Info("Stopping blockchain service")

	err := s.storageBackend.DepositStore().Close()
	if err != nil {
		s.logger.Error("failed to close deposit store", "err", err)
	}

	return nil
}

// StorageBackend returns the storage backend.
func (s *Service) StorageBackend() StorageBackend {
	return s.storageBackend
}

// PruneOrphanedBlobs removes any orphaned blob sidecars that may exist from incomplete block finalization.
func (s *Service) PruneOrphanedBlobs(lastBlockHeight int64) error {
	orphanedSlot := math.Slot(lastBlockHeight + 1) // #nosec G115

	// Check if any blob sidecars exist at the potentially orphaned slot
	sidecars, err := s.storageBackend.AvailabilityStore().GetBlobSidecars(orphanedSlot)
	if err != nil {
		return fmt.Errorf("failed to read blob sidecars at slot %d: %w", orphanedSlot, err)
	}

	// If no sidecars exist at this slot, nothing to clean up
	if len(sidecars) == 0 {
		return nil
	}

	// Sidecars exist at this slot - they are orphaned, so delete them
	s.logger.Warn("Found orphaned blob sidecars from incomplete block finalization, removing",
		"slot", orphanedSlot.Base10(),
		"num_sidecars", len(sidecars),
	)

	err = s.storageBackend.AvailabilityStore().DeleteBlobSidecars(orphanedSlot)
	if err != nil {
		return fmt.Errorf("failed to delete orphaned sidecars at slot %d: %w", orphanedSlot, e
Download .txt
gitextract_6zu1j5o0/

├── .dockerignore
├── .gitattributes
├── .github/
│   └── workflows/
│       ├── berachain_release.asc
│       ├── docker-nightly-preconf.yml
│       ├── pipeline.yml
│       ├── release.yaml
│       └── vuln-and-dep-check.yml
├── .gitignore
├── .gitmodules
├── .golangci.yaml
├── .mockery.yaml
├── .vscode/
│   ├── launch.json
│   └── tasks.json
├── CLAUDE.md
├── CODEOWNERS
├── Dockerfile
├── LICENSE
├── LICENSE.header
├── Makefile
├── README.md
├── beacon/
│   ├── blockchain/
│   │   ├── common.go
│   │   ├── deposit.go
│   │   ├── errors.go
│   │   ├── execution_engine.go
│   │   ├── finalize_block.go
│   │   ├── init_chain.go
│   │   ├── interfaces.go
│   │   ├── metrics.go
│   │   ├── mocks/
│   │   │   ├── genesis_state_processor.mock.go
│   │   │   ├── local_builder.mock.go
│   │   │   └── storage_backend.mock.go
│   │   ├── payload.go
│   │   ├── payload_test.go
│   │   ├── process_proposal.go
│   │   ├── pruning.go
│   │   └── service.go
│   ├── payload-time/
│   │   ├── time.go
│   │   └── time_test.go
│   └── validator/
│       ├── block_builder.go
│       ├── config.go
│       ├── errors.go
│       ├── interfaces.go
│       ├── metrics.go
│       └── service.go
├── chain/
│   ├── chain_ids.go
│   ├── data.go
│   ├── errors.go
│   ├── helpers.go
│   ├── helpers_test.go
│   ├── spec.go
│   └── spec_test.go
├── cli/
│   ├── builder/
│   │   ├── builder.go
│   │   ├── config.go
│   │   └── options.go
│   ├── commands/
│   │   ├── deposit/
│   │   │   ├── commands.go
│   │   │   ├── commands_test.go
│   │   │   ├── create.go
│   │   │   ├── db_check.go
│   │   │   ├── errors.go
│   │   │   ├── interfaces.go
│   │   │   ├── keys.go
│   │   │   ├── utils.go
│   │   │   └── validate.go
│   │   ├── genesis/
│   │   │   ├── collect.go
│   │   │   ├── deposit.go
│   │   │   ├── deposit_test.go
│   │   │   ├── genesis.go
│   │   │   ├── interfaces.go
│   │   │   ├── payload.go
│   │   │   ├── root.go
│   │   │   ├── storage.go
│   │   │   ├── storage_test.go
│   │   │   └── types/
│   │   │       ├── constants.go
│   │   │       └── json.go
│   │   ├── initialize/
│   │   │   └── initialize.go
│   │   ├── jwt/
│   │   │   ├── errors.go
│   │   │   ├── jwt.go
│   │   │   └── jwt_test.go
│   │   ├── root.go
│   │   ├── server/
│   │   │   ├── cmd/
│   │   │   │   └── execute.go
│   │   │   ├── pruning.go
│   │   │   ├── rollback.go
│   │   │   ├── start.go
│   │   │   └── types/
│   │   │       └── types.go
│   │   └── setup.go
│   ├── components/
│   │   ├── client_context.go
│   │   ├── defaults.go
│   │   └── logger.go
│   ├── config/
│   │   ├── app.go
│   │   ├── client.go
│   │   ├── comet.go
│   │   ├── errors.go
│   │   └── server.go
│   ├── context/
│   │   ├── cmd.go
│   │   └── keys.go
│   ├── flags/
│   │   └── flags.go
│   └── utils/
│       ├── genesis/
│       │   ├── interfaces.go
│       │   ├── root.go
│       │   └── root_test.go
│       └── parser/
│           ├── errors.go
│           └── validator.go
├── cmd/
│   └── beacond/
│       ├── defaults.go
│       └── main.go
├── codecov.yml
├── config/
│   ├── config/
│   │   ├── config.go
│   │   ├── config.toml.tpl
│   │   └── toml.go
│   ├── config.go
│   ├── spec/
│   │   ├── creator.go
│   │   ├── creator_test.go
│   │   ├── defaults.go
│   │   ├── defaults_test.go
│   │   ├── devnet.go
│   │   ├── mainnet.go
│   │   └── testnet.go
│   ├── template/
│   │   └── template.go
│   └── viper/
│       └── parser.go
├── consensus/
│   ├── cometbft/
│   │   ├── cli/
│   │   │   └── commands.go
│   │   └── service/
│   │       ├── abci.go
│   │       ├── abci_utils.go
│   │       ├── cache/
│   │       │   ├── cache.go
│   │       │   ├── cache_test.go
│   │       │   └── state.go
│   │       ├── commit.go
│   │       ├── configs.go
│   │       ├── configs_test.go
│   │       ├── delay/
│   │       │   ├── config.go
│   │       │   ├── delay.go
│   │       │   ├── delay_test.go
│   │       │   └── errors.go
│   │       ├── encoding/
│   │       │   ├── encoding.go
│   │       │   ├── errors.go
│   │       │   └── interfaces.go
│   │       ├── finalize_block.go
│   │       ├── genesis.go
│   │       ├── init_chain.go
│   │       ├── interfaces.go
│   │       ├── log/
│   │       │   ├── cmt_logger.go
│   │       │   └── sdk_logger.go
│   │       ├── node_api_support.go
│   │       ├── options.go
│   │       ├── prepare_proposal.go
│   │       ├── process_proposal.go
│   │       ├── service.go
│   │       └── state/
│   │           └── state.go
│   └── types/
│       ├── common.go
│       ├── consensus_block.go
│       └── slot_data.go
├── consensus-types/
│   └── types/
│       ├── attestation_data.go
│       ├── attestation_data_test.go
│       ├── attester_slashings.go
│       ├── attestions.go
│       ├── block.go
│       ├── block_test.go
│       ├── bls_to_execution_changes.go
│       ├── body.go
│       ├── body_test.go
│       ├── consolidation_request.go
│       ├── consolidation_request_test.go
│       ├── deposit.go
│       ├── deposit_message.go
│       ├── deposit_message_test.go
│       ├── deposit_request.go
│       ├── deposit_request_test.go
│       ├── deposit_test.go
│       ├── deposits.go
│       ├── errors.go
│       ├── eth1data.go
│       ├── eth1data_test.go
│       ├── execution_requests.go
│       ├── execution_requests_test.go
│       ├── fork.go
│       ├── fork_data.go
│       ├── fork_data_test.go
│       ├── fork_test.go
│       ├── genesis.go
│       ├── genesis_test.go
│       ├── header.go
│       ├── header_test.go
│       ├── interfaces.go
│       ├── mocks/
│       │   ├── blobs_bundle.mock.go
│       │   ├── built_execution_payload_env.mock.go
│       │   ├── new_payload_request.mock.go
│       │   ├── proposer_domain.mock.go
│       │   └── unused_enforcer.mock.go
│       ├── payload.go
│       ├── payload_env.go
│       ├── payload_header.go
│       ├── payload_header_test.go
│       ├── payload_requests.go
│       ├── payload_requests_test.go
│       ├── payload_test.go
│       ├── pending_partial_withdrawal.go
│       ├── pending_partial_withdrawal_test.go
│       ├── proposer_slashings.go
│       ├── signed_beacon_block.go
│       ├── signed_beacon_block_header.go
│       ├── signed_beacon_block_header_test.go
│       ├── signed_beacon_block_test.go
│       ├── signing_data.go
│       ├── signing_data_test.go
│       ├── slashing_info.go
│       ├── slashing_info_test.go
│       ├── state.go
│       ├── state_test.go
│       ├── sync_aggregate.go
│       ├── validator.go
│       ├── validator_test.go
│       ├── validators.go
│       ├── versionable.go
│       ├── voluntary_exits.go
│       ├── withdrawal_credentials.go
│       ├── withdrawal_credentials_test.go
│       ├── withdrawal_request.go
│       └── withdrawals_request_test.go
├── contracts/
│   ├── .gas-snapshot
│   ├── Makefile
│   ├── README.md
│   ├── foundry.toml
│   ├── remappings.txt
│   ├── slither.config.json
│   ├── src/
│   │   ├── brip0004/
│   │   │   ├── MockPoL.sol
│   │   │   ├── MockPoLGasEnforcer.sol
│   │   │   ├── MockPoLReverting.sol
│   │   │   └── MockValidatorRegistry.sol
│   │   ├── eip4399/
│   │   │   └── RandaoTester.sol
│   │   ├── eip4788/
│   │   │   ├── README.md
│   │   │   ├── SSZ.sol
│   │   │   └── deployment.json
│   │   └── staking/
│   │       ├── DepositContract.sol
│   │       ├── IDepositContract.sol
│   │       └── IERC165.sol
│   └── test/
│       └── staking/
│           └── DepositContract.t.sol
├── da/
│   ├── blob/
│   │   ├── factory.go
│   │   ├── factory_metrics.go
│   │   ├── factory_test.go
│   │   ├── interfaces.go
│   │   ├── processor.go
│   │   ├── processor_metrics.go
│   │   ├── verifier.go
│   │   └── verifier_metrics.go
│   ├── kzg/
│   │   ├── config.go
│   │   ├── config_test.go
│   │   ├── errors.go
│   │   ├── gokzg/
│   │   │   ├── gokzg.go
│   │   │   └── gokzg_test.go
│   │   ├── noop/
│   │   │   ├── noop.go
│   │   │   └── noop_test.go
│   │   ├── proof.go
│   │   ├── proof_test.go
│   │   └── types/
│   │       └── args.go
│   ├── store/
│   │   ├── errors.go
│   │   ├── interfaces.go
│   │   ├── store.go
│   │   └── store_test.go
│   └── types/
│       ├── errors.go
│       ├── sidecar.go
│       ├── sidecar_test.go
│       ├── sidecars.go
│       └── sidecars_test.go
├── docs/
│   └── .gitkeep
├── engine-primitives/
│   ├── engine-primitives/
│   │   ├── attributes.go
│   │   ├── attributes_test.go
│   │   ├── blobs_bundle.go
│   │   ├── blobs_bundle_test.go
│   │   ├── engine.go
│   │   ├── engine_test.go
│   │   ├── errors.go
│   │   ├── mocks/
│   │   │   ├── blobs_bundle.mock.go
│   │   │   └── payload_attributer.mock.go
│   │   ├── transactions.go
│   │   ├── transactions_test.go
│   │   ├── withdrawal.go
│   │   ├── withdrawal_ssz_test.go
│   │   ├── withdrawal_test.go
│   │   ├── withdrawals.go
│   │   └── withdrawals_test.go
│   └── errors/
│       └── errors.go
├── errors/
│   └── mod.go
├── execution/
│   ├── README.md
│   ├── client/
│   │   ├── client.go
│   │   ├── config.go
│   │   ├── engine.go
│   │   ├── errors.go
│   │   ├── ethclient/
│   │   │   ├── constants.go
│   │   │   ├── engine.go
│   │   │   ├── engine_test.go
│   │   │   ├── errors.go
│   │   │   ├── eth.go
│   │   │   ├── ethclient.go
│   │   │   └── rpc/
│   │   │       ├── client.go
│   │   │       ├── errors.go
│   │   │       ├── header.go
│   │   │       └── types.go
│   │   ├── helpers.go
│   │   ├── interfaces.go
│   │   └── metrics.go
│   ├── deposit/
│   │   ├── contract.go
│   │   └── interfaces.go
│   ├── engine/
│   │   ├── engine.go
│   │   ├── errors.go
│   │   ├── interfaces.go
│   │   └── metrics.go
│   └── requests/
│       ├── eip7002/
│       │   ├── interfaces.go
│       │   ├── withdrawal.go
│       │   └── withdrawal_test.go
│       └── eip7251/
│           ├── consolidation.go
│           └── interfaces.go
├── gethlib/
│   ├── deposit/
│   │   ├── contract.abigen.go
│   │   └── contract.go
│   ├── ethclient/
│   │   ├── ethclient.go
│   │   └── ethclient_test.go
│   ├── ssztest/
│   │   ├── contract.abigen.go
│   │   └── contract.go
│   └── types/
│       ├── block.go
│       ├── config.go
│       ├── genesis.go
│       ├── header.go
│       ├── pubkey.go
│       ├── transaction.go
│       ├── transaction_marshalling.go
│       ├── tx_types.go
│       └── utils.go
├── go.mod
├── go.sum
├── kurtosis/
│   ├── Makefile
│   ├── README.md
│   ├── beaconkit-cloud.yaml
│   ├── beaconkit-local.yaml
│   ├── kurtosis-params.yaml
│   ├── kurtosis.yml
│   ├── main.star
│   └── src/
│       ├── constants.star
│       ├── lib/
│       │   ├── bash.star
│       │   ├── builtins.star
│       │   ├── helpers.star
│       │   ├── port_spec.star
│       │   └── service_config.star
│       ├── networks/
│       │   ├── kurtosis-devnet/
│       │   │   ├── README.md
│       │   │   └── network-configs/
│       │   │       └── genesis.json.template
│       │   ├── networks.star
│       │   └── private-testnet-1/
│       │       └── .gitkeep
│       ├── nodes/
│       │   ├── consensus/
│       │   │   ├── beacond/
│       │   │   │   ├── launcher.star
│       │   │   │   ├── node.star
│       │   │   │   └── scripts/
│       │   │   │       ├── modify-genesis-with-deposits.sh
│       │   │   │       └── multiple-premined-deposits-cl.sh
│       │   │   └── types.star
│       │   ├── execution/
│       │   │   ├── config.star
│       │   │   ├── execution.star
│       │   │   └── reth/
│       │   │       ├── config.star
│       │   │       └── reth-config.toml
│       │   ├── jwt-secret.hex
│       │   ├── kzg-trusted-setup.json
│       │   └── nodes.star
│       ├── observability/
│       │   ├── grafana/
│       │   │   ├── dashboard-providers.yml.tmpl
│       │   │   ├── datasource.yml.tmpl
│       │   │   └── grafana.star
│       │   ├── prometheus/
│       │   │   └── prometheus.star
│       │   └── pyroscope/
│       │       └── pyroscope.star
│       └── services/
│           ├── blockscout/
│           │   └── launcher.star
│           ├── service.star
│           ├── spamoor/
│           │   └── launcher.star
│           └── tx_fuzz/
│               └── launcher.star
├── log/
│   ├── mod.go
│   ├── noop/
│   │   ├── noop.go
│   │   └── noop_test.go
│   └── phuslu/
│       ├── buffer.go
│       ├── config.go
│       ├── formatter.go
│       ├── logger.go
│       ├── style.go
│       └── time.go
├── node-api/
│   ├── backend/
│   │   ├── backend.go
│   │   ├── backend_test.go
│   │   ├── getters.go
│   │   ├── interface.go
│   │   └── mocks/
│   │       └── genesis_state_processor.mock.go
│   ├── handlers/
│   │   ├── beacon/
│   │   │   ├── backend.go
│   │   │   ├── blob_test.go
│   │   │   ├── blobs.go
│   │   │   ├── block.go
│   │   │   ├── genesis.go
│   │   │   ├── genesis_test.go
│   │   │   ├── handler.go
│   │   │   ├── header.go
│   │   │   ├── header_test.go
│   │   │   ├── historical.go
│   │   │   ├── mocks/
│   │   │   │   └── backend.mock.go
│   │   │   ├── randao.go
│   │   │   ├── randao_test.go
│   │   │   ├── routes.go
│   │   │   ├── types/
│   │   │   │   ├── conversions.go
│   │   │   │   ├── request.go
│   │   │   │   └── response.go
│   │   │   ├── validators.go
│   │   │   ├── validators_balances.go
│   │   │   ├── validators_balances_test.go
│   │   │   ├── validators_filters.go
│   │   │   ├── validators_filters_test.go
│   │   │   ├── validators_test.go
│   │   │   ├── withdrawal.go
│   │   │   └── withdrawal_test.go
│   │   ├── builder/
│   │   │   ├── handler.go
│   │   │   └── routes.go
│   │   ├── cometbft/
│   │   │   ├── backend.go
│   │   │   ├── block.go
│   │   │   ├── cometbft_test.go
│   │   │   ├── handler.go
│   │   │   ├── mocks/
│   │   │   │   └── backend.mock.go
│   │   │   ├── routes.go
│   │   │   ├── signed_header.go
│   │   │   └── types.go
│   │   ├── config/
│   │   │   ├── handler.go
│   │   │   ├── routes.go
│   │   │   ├── spec.go
│   │   │   └── types/
│   │   │       └── response.go
│   │   ├── debug/
│   │   │   ├── backend.go
│   │   │   ├── handler.go
│   │   │   ├── routes.go
│   │   │   └── state.go
│   │   ├── error.go
│   │   ├── events/
│   │   │   ├── handler.go
│   │   │   └── routes.go
│   │   ├── handlers.go
│   │   ├── node/
│   │   │   ├── backend.go
│   │   │   ├── handler.go
│   │   │   ├── mocks/
│   │   │   │   └── backend.mock.go
│   │   │   ├── node.go
│   │   │   ├── node_test.go
│   │   │   ├── routes.go
│   │   │   └── types/
│   │   │       └── response.go
│   │   ├── proof/
│   │   │   ├── backend.go
│   │   │   ├── block_proposer.go
│   │   │   ├── handler.go
│   │   │   ├── merkle/
│   │   │   │   ├── beacon_state.go
│   │   │   │   ├── beacon_state_test.go
│   │   │   │   ├── generalized_indexes.go
│   │   │   │   ├── generalized_indexes_test.go
│   │   │   │   ├── merkle_test.go
│   │   │   │   ├── mock/
│   │   │   │   │   └── beacon_state.go
│   │   │   │   ├── proposer_index.go
│   │   │   │   ├── proposer_index_test.go
│   │   │   │   ├── testdata/
│   │   │   │   │   ├── empty_state_proof.json
│   │   │   │   │   ├── many_validators_proposer_index_proof.json
│   │   │   │   │   ├── many_validators_proposer_pubkey_proof_deneb.json
│   │   │   │   │   ├── many_validators_proposer_pubkey_proof_electra.json
│   │   │   │   │   ├── many_validators_validator_balance_proof.json
│   │   │   │   │   ├── many_validators_validator_credentials_proof.json
│   │   │   │   │   ├── non_empty_state_proof.json
│   │   │   │   │   ├── one_validator_proposer_index_proof.json
│   │   │   │   │   ├── one_validator_proposer_pubkey_proof_deneb.json
│   │   │   │   │   ├── one_validator_proposer_pubkey_proof_electra.json
│   │   │   │   │   ├── one_validator_validator_balance_proof.json
│   │   │   │   │   └── one_validator_validator_credentials_proof.json
│   │   │   │   ├── validator_balance.go
│   │   │   │   ├── validator_balance_test.go
│   │   │   │   ├── validator_credentials.go
│   │   │   │   ├── validator_credentials_test.go
│   │   │   │   ├── validator_pubkey.go
│   │   │   │   └── validator_pubkey_test.go
│   │   │   ├── routes.go
│   │   │   ├── types/
│   │   │   │   ├── interfaces.go
│   │   │   │   ├── request.go
│   │   │   │   └── response.go
│   │   │   ├── validator_balance.go
│   │   │   ├── validator_credentials.go
│   │   │   └── validator_pubkey.go
│   │   ├── routes.go
│   │   ├── types/
│   │   │   ├── errors.go
│   │   │   └── request.go
│   │   ├── utils/
│   │   │   ├── constants.go
│   │   │   ├── context.go
│   │   │   └── mappings.go
│   │   └── validator/
│   │       ├── handler.go
│   │       └── routes.go
│   ├── middleware/
│   │   ├── middleware.go
│   │   ├── request.go
│   │   └── response.go
│   └── server/
│       ├── config.go
│       └── server.go
├── node-core/
│   ├── builder/
│   │   ├── baseapp_options.go
│   │   ├── builder.go
│   │   └── options.go
│   ├── components/
│   │   ├── api.go
│   │   ├── attributes_factory.go
│   │   ├── availability_store.go
│   │   ├── backend.go
│   │   ├── blobs.go
│   │   ├── block_store.go
│   │   ├── chain_service.go
│   │   ├── cometbft_service.go
│   │   ├── config.go
│   │   ├── config_server.go
│   │   ├── deposit_contract.go
│   │   ├── deposit_store.go
│   │   ├── engine.go
│   │   ├── interfaces.go
│   │   ├── jwt_secret.go
│   │   ├── metrics/
│   │   │   └── sink.go
│   │   ├── node.go
│   │   ├── payload_builder.go
│   │   ├── reporting_service.go
│   │   ├── service_registry.go
│   │   ├── shutdown_service.go
│   │   ├── sidecars.go
│   │   ├── signer/
│   │   │   ├── errors.go
│   │   │   ├── legacy.go
│   │   │   └── signer.go
│   │   ├── signer.go
│   │   ├── state_processor.go
│   │   ├── storage/
│   │   │   └── storage.go
│   │   ├── store.go
│   │   ├── telemetry_service.go
│   │   ├── telemetry_sink.go
│   │   ├── trusted_setup.go
│   │   ├── types.go
│   │   └── validator_service.go
│   ├── node/
│   │   └── node.go
│   ├── services/
│   │   ├── registry/
│   │   │   ├── errors.go
│   │   │   ├── mocks/
│   │   │   │   ├── basic.mock.go
│   │   │   │   ├── commit_multistore_accessor.mock.go
│   │   │   │   ├── dispatcher.mock.go
│   │   │   │   └── registry_option.mock.go
│   │   │   ├── options.go
│   │   │   ├── registry.go
│   │   │   └── registry_test.go
│   │   ├── shutdown/
│   │   │   └── service..go
│   │   └── version/
│   │       ├── interfaces.go
│   │       └── version.go
│   └── types/
│       ├── mocks/
│       │   └── consensus_service.mock.go
│       └── node.go
├── observability/
│   └── telemetry/
│       └── service.go
├── payload/
│   ├── README.md
│   ├── attributes/
│   │   ├── factory.go
│   │   └── interfaces.go
│   ├── builder/
│   │   ├── builder.go
│   │   ├── config.go
│   │   ├── errors.go
│   │   ├── interfaces.go
│   │   ├── payload.go
│   │   └── payload_test.go
│   └── cache/
│       ├── payload_id.go
│       ├── payload_id_fuzz_test.go
│       └── payload_id_test.go
├── primitives/
│   ├── bytes/
│   │   ├── b.go
│   │   ├── b20.go
│   │   ├── b20_test.go
│   │   ├── b256.go
│   │   ├── b32.go
│   │   ├── b32_test.go
│   │   ├── b4.go
│   │   ├── b48.go
│   │   ├── b48_test.go
│   │   ├── b4_test.go
│   │   ├── b8.go
│   │   ├── b8_test.go
│   │   ├── b96.go
│   │   ├── b96_test.go
│   │   ├── b_test.go
│   │   ├── buffer/
│   │   │   ├── buffer.go
│   │   │   └── buffer_test.go
│   │   └── utils.go
│   ├── common/
│   │   ├── consensus.go
│   │   ├── consensus_test.go
│   │   ├── execution.go
│   │   ├── execution_test.go
│   │   ├── interfaces.go
│   │   ├── unused_type.go
│   │   └── unused_type_test.go
│   ├── constants/
│   │   ├── bls12_381.go
│   │   ├── constants.go
│   │   ├── eip4844.go
│   │   ├── misc.go
│   │   ├── operations_per_block.go
│   │   ├── payload.go
│   │   └── validator.go
│   ├── constraints/
│   │   └── ssz.go
│   ├── crypto/
│   │   ├── bls.go
│   │   ├── mocks/
│   │   │   └── bls_signer.mock.go
│   │   └── sha256/
│   │       └── sha256.go
│   ├── eip4844/
│   │   ├── blob.go
│   │   ├── blob_test.go
│   │   ├── kzg_commitment.go
│   │   ├── kzg_commitment_test.go
│   │   └── kzg_proof.go
│   ├── encoding/
│   │   ├── hex/
│   │   │   ├── bytes.go
│   │   │   ├── bytes_test.go
│   │   │   ├── const.go
│   │   │   ├── errors.go
│   │   │   ├── format.go
│   │   │   ├── format_test.go
│   │   │   ├── nibble.go
│   │   │   ├── u64.go
│   │   │   └── u64_test.go
│   │   ├── json/
│   │   │   └── json.go
│   │   └── ssz/
│   │       ├── schema/
│   │       │   ├── common.go
│   │       │   ├── definitions.go
│   │       │   ├── field.go
│   │       │   └── id.go
│   │       └── utils.go
│   ├── math/
│   │   ├── errors.go
│   │   ├── log/
│   │   │   ├── log.go
│   │   │   └── log_test.go
│   │   ├── pow/
│   │   │   ├── pow.go
│   │   │   └── pow_test.go
│   │   ├── u256.go
│   │   ├── u64.go
│   │   └── u64_test.go
│   ├── merkle/
│   │   ├── errors.go
│   │   ├── hasher.go
│   │   ├── hasher_fuzz_test.go
│   │   ├── hasher_test.go
│   │   ├── index.go
│   │   ├── index_test.go
│   │   ├── object_path.go
│   │   ├── object_path_test.go
│   │   ├── proof.go
│   │   ├── root_hasher.go
│   │   ├── root_hasher_test.go
│   │   ├── tree.go
│   │   ├── tree_fuzz_test.go
│   │   ├── tree_test.go
│   │   ├── utils.go
│   │   └── zero/
│   │       └── zero.go
│   ├── net/
│   │   ├── http/
│   │   │   └── errors.go
│   │   ├── json-rpc/
│   │   │   └── errors.go
│   │   ├── jwt/
│   │   │   ├── errors.go
│   │   │   ├── jwt.go
│   │   │   └── jwt_test.go
│   │   └── url/
│   │       └── url.go
│   ├── transition/
│   │   ├── context.go
│   │   ├── validator_update.go
│   │   └── validator_update_test.go
│   └── version/
│       ├── comparable.go
│       ├── comparable_test.go
│       ├── name.go
│       ├── supported.go
│       └── versions.go
├── scripts/
│   ├── build/
│   │   ├── build.mk
│   │   ├── codegen.mk
│   │   ├── constants.mk
│   │   ├── devtools.mk
│   │   ├── golines.sh
│   │   ├── help.mk
│   │   ├── linting.mk
│   │   ├── proto_generate_pulsar.sh
│   │   ├── protobuf.mk
│   │   ├── release.mk
│   │   └── testing.mk
│   └── rollback_cl.sh
├── state-transition/
│   └── core/
│       ├── README.md
│       ├── core_test.go
│       ├── errors.go
│       ├── interfaces.go
│       ├── metrics.go
│       ├── mocks/
│       │   └── execution_engine.mock.go
│       ├── state/
│       │   ├── constants.go
│       │   ├── interfaces.go
│       │   ├── metrics.go
│       │   ├── parent_proposer_pubkey.go
│       │   ├── statedb.go
│       │   └── statedb_test.go
│       ├── state_processor.go
│       ├── state_processor_exits.go
│       ├── state_processor_fixes.go
│       ├── state_processor_forks.go
│       ├── state_processor_genesis.go
│       ├── state_processor_genesis_test.go
│       ├── state_processor_payload.go
│       ├── state_processor_payload_test.go
│       ├── state_processor_randao.go
│       ├── state_processor_signature.go
│       ├── state_processor_staking.go
│       ├── state_processor_staking_test.go
│       ├── state_processor_test.go
│       ├── state_processor_validators.go
│       ├── state_processor_withdrawals.go
│       ├── state_processor_withdrawals_test.go
│       ├── validation_deposits.go
│       └── validation_deposits_test.go
├── storage/
│   ├── beacondb/
│   │   ├── eth1.go
│   │   ├── fork.go
│   │   ├── history.go
│   │   ├── index/
│   │   │   ├── validator.go
│   │   │   └── validator_test.go
│   │   ├── keys/
│   │   │   └── keys.go
│   │   ├── kvstore.go
│   │   ├── randao.go
│   │   ├── registry.go
│   │   ├── registry_test.go
│   │   ├── slashing.go
│   │   ├── staking_test.go
│   │   ├── versioning.go
│   │   └── withdrawals.go
│   ├── block/
│   │   ├── config.go
│   │   ├── interfaces.go
│   │   ├── store.go
│   │   └── store_test.go
│   ├── db/
│   │   └── db.go
│   ├── deposit/
│   │   ├── common/
│   │   │   └── synced_db.go
│   │   ├── store.go
│   │   └── v1/
│   │       ├── provider.go
│   │       ├── store.go
│   │       └── store_test.go
│   ├── encoding/
│   │   ├── ssz.go
│   │   └── u64.go
│   ├── errors.go
│   ├── filedb/
│   │   ├── db.go
│   │   ├── db_options.go
│   │   ├── db_test.go
│   │   ├── range_db.go
│   │   └── range_db_test.go
│   ├── interfaces/
│   │   ├── db.go
│   │   └── mocks/
│   │       └── db.mock.go
│   └── kv_store_service.go
└── testing/
    ├── benchmarks/
    │   └── logger_benchmark_test.go
    ├── e2e/
    │   ├── .gitignore
    │   ├── README.md
    │   ├── config/
    │   │   ├── config.go
    │   │   └── defaults.go
    │   ├── standard/
    │   │   ├── beacon_api_test.go
    │   │   ├── blob_test.go
    │   │   ├── comet_api_test.go
    │   │   ├── inflation_test.go
    │   │   ├── proofs_test.go
    │   │   ├── setup_test.go
    │   │   ├── staking_test.go
    │   │   └── withdrawal_test.go
    │   └── suite/
    │       ├── constants.go
    │       ├── errors.go
    │       ├── options.go
    │       ├── setup.go
    │       ├── suite.go
    │       └── types/
    │           ├── account.go
    │           ├── account_test.go
    │           ├── beacon_client.go
    │           ├── consensus_client.go
    │           ├── errors.go
    │           ├── execution_client.go
    │           └── tx/
    │               └── eip4844.go
    ├── files/
    │   ├── entrypoint.sh
    │   ├── eth-genesis.json
    │   ├── jwt.hex
    │   ├── kzg-trusted-setup.json
    │   ├── spec.toml
    │   ├── test_data.json
    │   ├── test_data_batch.json
    │   └── test_data_incorrect_proof.json
    ├── forge-script/
    │   ├── Makefile
    │   ├── README.md
    │   ├── dependency/
    │   │   └── dependency.sh
    │   ├── forge-config.yaml
    │   ├── kurtosis.yml
    │   └── main.star
    ├── networks/
    │   ├── 80069/
    │   │   ├── app.toml
    │   │   ├── cl-seeds.txt
    │   │   ├── client.toml
    │   │   ├── config.toml
    │   │   ├── el-bootnodes.txt
    │   │   ├── el-peers.txt
    │   │   ├── eth-genesis.json
    │   │   ├── genesis.json
    │   │   ├── kzg-trusted-setup.json
    │   │   └── spec.toml
    │   └── 80094/
    │       ├── app.toml
    │       ├── client.toml
    │       ├── config.toml
    │       ├── el-bootnodes.txt
    │       ├── el-peers.txt
    │       ├── eth-genesis.json
    │       ├── genesis.json
    │       ├── kzg-trusted-setup.json
    │       └── spec.toml
    ├── quick/
    │   ├── compare_test.go
    │   └── execution_payload_test.go
    ├── simulated/
    │   ├── chaos_test.go
    │   ├── components.go
    │   ├── el-genesis-files/
    │   │   ├── eth-genesis.json
    │   │   ├── pectra-eth-genesis.json
    │   │   └── pectra-fork-genesis.json
    │   ├── execution/
    │   │   ├── execnode.go
    │   │   ├── geth.go
    │   │   ├── resource.go
    │   │   ├── reth.go
    │   │   └── simulation_client.go
    │   ├── homedir.go
    │   ├── malicious_consensus_test.go
    │   ├── malicious_proposer_test.go
    │   ├── orphaned_blobs_test.go
    │   ├── payload_cache_test.go
    │   ├── pectra_fork_test.go
    │   ├── pectra_genesis_test.go
    │   ├── pectra_withdrawal_test.go
    │   ├── rpc_errors_test.go
    │   ├── simcomet.go
    │   ├── simulated_test.go
    │   ├── testnode.go
    │   ├── transformers.go
    │   ├── utils.go
    │   └── valid_chain_test.go
    ├── state-transition/
    │   ├── README.md
    │   └── state-transition.go
    └── utils/
        ├── .gitkeep
        └── generate.go
Download .txt
Showing preview only (407K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4272 symbols across 621 files)

FILE: beacon/blockchain/common.go
  method ParseBeaconBlock (line 32) | func (s *Service) ParseBeaconBlock(req encoding.ABCIRequest) (

FILE: beacon/blockchain/deposit.go
  constant defaultRetryInterval (line 34) | defaultRetryInterval = 20 * time.Second
  method depositFetcher (line 36) | func (s *Service) depositFetcher(
  method fetchAndStoreDeposits (line 54) | func (s *Service) fetchAndStoreDeposits(
  method depositCatchupFetcher (line 97) | func (s *Service) depositCatchupFetcher(ctx context.Context) {

FILE: beacon/blockchain/execution_engine.go
  method sendPostBlockFCU (line 34) | func (s *Service) sendPostBlockFCU(

FILE: beacon/blockchain/finalize_block.go
  method FinalizeBlock (line 39) | func (s *Service) FinalizeBlock(
  method FinalizeSidecars (line 86) | func (s *Service) FinalizeSidecars(
  method PostFinalizeBlockOps (line 125) | func (s *Service) PostFinalizeBlockOps(ctx sdk.Context, blk *ctypes.Beac...
  method finalizeBeaconBlock (line 160) | func (s *Service) finalizeBeaconBlock(
  method executeStateTransition (line 180) | func (s *Service) executeStateTransition(

FILE: beacon/blockchain/init_chain.go
  method ProcessGenesisData (line 34) | func (s *Service) ProcessGenesisData(

FILE: beacon/blockchain/interfaces.go
  type ExecutionEngine (line 49) | type ExecutionEngine interface
  type LocalBuilder (line 65) | type LocalBuilder interface
  type StateProcessor (line 81) | type StateProcessor interface
  type StorageBackend (line 114) | type StorageBackend interface
  type TelemetrySink (line 126) | type TelemetrySink interface
  type BlockchainI (line 137) | type BlockchainI interface
  type BlobProcessor (line 170) | type BlobProcessor interface
  type PruningChainSpec (line 186) | type PruningChainSpec interface
  type ServiceChainSpec (line 191) | type ServiceChainSpec interface

FILE: beacon/blockchain/metrics.go
  type chainMetrics (line 30) | type chainMetrics struct
    method measureStateTransitionDuration (line 46) | func (cm *chainMetrics) measureStateTransitionDuration(
    method markRebuildPayloadForRejectedBlockSuccess (line 58) | func (cm *chainMetrics) markRebuildPayloadForRejectedBlockSuccess(
    method markRebuildPayloadForRejectedBlockFailure (line 71) | func (cm *chainMetrics) markRebuildPayloadForRejectedBlockFailure(
    method markOptimisticPayloadBuildSuccess (line 86) | func (cm *chainMetrics) markOptimisticPayloadBuildSuccess(slot math.Sl...
    method markOptimisticPayloadBuildFailure (line 96) | func (cm *chainMetrics) markOptimisticPayloadBuildFailure(
    method measureStateRootVerificationTime (line 113) | func (cm *chainMetrics) measureStateRootVerificationTime(start time.Ti...
  function newChainMetrics (line 36) | func newChainMetrics(

FILE: beacon/blockchain/mocks/genesis_state_processor.mock.go
  type GenesisStateProcessor (line 17) | type GenesisStateProcessor struct
    method EXPECT (line 25) | func (_m *GenesisStateProcessor) EXPECT() *GenesisStateProcessor_Expec...
    method InitializeBeaconStateFromEth1 (line 30) | func (_m *GenesisStateProcessor) InitializeBeaconStateFromEth1(st *sta...
  type GenesisStateProcessor_Expecter (line 21) | type GenesisStateProcessor_Expecter struct
    method InitializeBeaconStateFromEth1 (line 69) | func (_e *GenesisStateProcessor_Expecter) InitializeBeaconStateFromEth...
  type GenesisStateProcessor_InitializeBeaconStateFromEth1_Call (line 60) | type GenesisStateProcessor_InitializeBeaconStateFromEth1_Call struct
    method Run (line 73) | func (_c *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call) Ru...
    method Return (line 80) | func (_c *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call) Re...
    method RunAndReturn (line 85) | func (_c *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call) Ru...
  function NewGenesisStateProcessor (line 92) | func NewGenesisStateProcessor(t interface {

FILE: beacon/blockchain/mocks/local_builder.mock.go
  type LocalBuilder (line 17) | type LocalBuilder struct
    method EXPECT (line 25) | func (_m *LocalBuilder) EXPECT() *LocalBuilder_Expecter {
    method CacheLatestVerifiedPayload (line 30) | func (_m *LocalBuilder) CacheLatestVerifiedPayload(latestEnvelopeSlot ...
    method Enabled (line 64) | func (_m *LocalBuilder) Enabled() bool {
    method RequestPayloadAsync (line 109) | func (_m *LocalBuilder) RequestPayloadAsync(ctx context.Context, r *bu...
  type LocalBuilder_Expecter (line 21) | type LocalBuilder_Expecter struct
    method CacheLatestVerifiedPayload (line 42) | func (_e *LocalBuilder_Expecter) CacheLatestVerifiedPayload(latestEnve...
    method Enabled (line 87) | func (_e *LocalBuilder_Expecter) Enabled() *LocalBuilder_Enabled_Call {
    method RequestPayloadAsync (line 155) | func (_e *LocalBuilder_Expecter) RequestPayloadAsync(ctx interface{}, ...
  type LocalBuilder_CacheLatestVerifiedPayload_Call (line 35) | type LocalBuilder_CacheLatestVerifiedPayload_Call struct
    method Run (line 46) | func (_c *LocalBuilder_CacheLatestVerifiedPayload_Call) Run(run func(l...
    method Return (line 53) | func (_c *LocalBuilder_CacheLatestVerifiedPayload_Call) Return() *Loca...
    method RunAndReturn (line 58) | func (_c *LocalBuilder_CacheLatestVerifiedPayload_Call) RunAndReturn(r...
  type LocalBuilder_Enabled_Call (line 82) | type LocalBuilder_Enabled_Call struct
    method Run (line 91) | func (_c *LocalBuilder_Enabled_Call) Run(run func()) *LocalBuilder_Ena...
    method Return (line 98) | func (_c *LocalBuilder_Enabled_Call) Return(_a0 bool) *LocalBuilder_En...
    method RunAndReturn (line 103) | func (_c *LocalBuilder_Enabled_Call) RunAndReturn(run func() bool) *Lo...
  type LocalBuilder_RequestPayloadAsync_Call (line 148) | type LocalBuilder_RequestPayloadAsync_Call struct
    method Run (line 159) | func (_c *LocalBuilder_RequestPayloadAsync_Call) Run(run func(ctx cont...
    method Return (line 166) | func (_c *LocalBuilder_RequestPayloadAsync_Call) Return(_a0 *enginepri...
    method RunAndReturn (line 171) | func (_c *LocalBuilder_RequestPayloadAsync_Call) RunAndReturn(run func...
  function NewLocalBuilder (line 178) | func NewLocalBuilder(t interface {

FILE: beacon/blockchain/mocks/storage_backend.mock.go
  type StorageBackend (line 18) | type StorageBackend struct
    method EXPECT (line 26) | func (_m *StorageBackend) EXPECT() *StorageBackend_Expecter {
    method AvailabilityStore (line 31) | func (_m *StorageBackend) AvailabilityStore() *store.Store {
    method BlockStore (line 78) | func (_m *StorageBackend) BlockStore() *block.KVStore[*types.BeaconBlo...
    method DepositStore (line 125) | func (_m *StorageBackend) DepositStore() deposit.StoreManager {
    method StateFromContext (line 172) | func (_m *StorageBackend) StateFromContext(_a0 context.Context) *state...
  type StorageBackend_Expecter (line 22) | type StorageBackend_Expecter struct
    method AvailabilityStore (line 56) | func (_e *StorageBackend_Expecter) AvailabilityStore() *StorageBackend...
    method BlockStore (line 103) | func (_e *StorageBackend_Expecter) BlockStore() *StorageBackend_BlockS...
    method DepositStore (line 150) | func (_e *StorageBackend_Expecter) DepositStore() *StorageBackend_Depo...
    method StateFromContext (line 198) | func (_e *StorageBackend_Expecter) StateFromContext(_a0 interface{}) *...
  type StorageBackend_AvailabilityStore_Call (line 51) | type StorageBackend_AvailabilityStore_Call struct
    method Run (line 60) | func (_c *StorageBackend_AvailabilityStore_Call) Run(run func()) *Stor...
    method Return (line 67) | func (_c *StorageBackend_AvailabilityStore_Call) Return(_a0 *store.Sto...
    method RunAndReturn (line 72) | func (_c *StorageBackend_AvailabilityStore_Call) RunAndReturn(run func...
  type StorageBackend_BlockStore_Call (line 98) | type StorageBackend_BlockStore_Call struct
    method Run (line 107) | func (_c *StorageBackend_BlockStore_Call) Run(run func()) *StorageBack...
    method Return (line 114) | func (_c *StorageBackend_BlockStore_Call) Return(_a0 *block.KVStore[*t...
    method RunAndReturn (line 119) | func (_c *StorageBackend_BlockStore_Call) RunAndReturn(run func() *blo...
  type StorageBackend_DepositStore_Call (line 145) | type StorageBackend_DepositStore_Call struct
    method Run (line 154) | func (_c *StorageBackend_DepositStore_Call) Run(run func()) *StorageBa...
    method Return (line 161) | func (_c *StorageBackend_DepositStore_Call) Return(_a0 deposit.StoreMa...
    method RunAndReturn (line 166) | func (_c *StorageBackend_DepositStore_Call) RunAndReturn(run func() de...
  type StorageBackend_StateFromContext_Call (line 192) | type StorageBackend_StateFromContext_Call struct
    method Run (line 202) | func (_c *StorageBackend_StateFromContext_Call) Run(run func(_a0 conte...
    method Return (line 209) | func (_c *StorageBackend_StateFromContext_Call) Return(_a0 *state.Stat...
    method RunAndReturn (line 214) | func (_c *StorageBackend_StateFromContext_Call) RunAndReturn(run func(...
  function NewStorageBackend (line 221) | func NewStorageBackend(t interface {

FILE: beacon/blockchain/payload.go
  method forceSyncUponProcess (line 39) | func (s *Service) forceSyncUponProcess(
  method forceSyncUponFinalize (line 80) | func (s *Service) forceSyncUponFinalize(
  method preFetchBuildData (line 136) | func (s *Service) preFetchBuildData(st *statedb.StateDB, currentTime mat...
  method handleRebuildPayloadForRejectedBlock (line 209) | func (s *Service) handleRebuildPayloadForRejectedBlock(
  method handleOptimisticPayloadBuild (line 231) | func (s *Service) handleOptimisticPayloadBuild(

FILE: beacon/blockchain/payload_test.go
  function TestOptimisticBlockBuildingRejectedBlockStateChecks (line 61) | func TestOptimisticBlockBuildingRejectedBlockStateChecks(t *testing.T) {
  function TestOptimisticBlockBuildingVerifiedBlockStateChecks (line 150) | func TestOptimisticBlockBuildingVerifiedBlockStateChecks(t *testing.T) {
  function setupOptimisticPayloadTests (line 256) | func setupOptimisticPayloadTests(t *testing.T, cs chain.Spec) (
  function testProcessGenesis (line 289) | func testProcessGenesis(
  function buildNextBlock (line 318) | func buildNextBlock(
  function computeStateRoot (line 394) | func computeStateRoot(

FILE: beacon/blockchain/process_proposal.go
  constant BeaconBlockTxIndex (line 53) | BeaconBlockTxIndex uint = iota
  constant BlobSidecarsTxIndex (line 56) | BlobSidecarsTxIndex
  constant MaxConsensusTxsCount (line 59) | MaxConsensusTxsCount = 2
  method ProcessProposal (line 63) | func (s *Service) ProcessProposal(
  function payloadEnvFromPayload (line 184) | func payloadEnvFromPayload(sidecars datypes.BlobSidecars, blk *ctypes.Be...
  method VerifyIncomingBlockSignature (line 217) | func (s *Service) VerifyIncomingBlockSignature(
  method VerifyIncomingBlobSidecars (line 238) | func (s *Service) VerifyIncomingBlobSidecars(
  method VerifyIncomingBlock (line 265) | func (s *Service) VerifyIncomingBlock(
  method verifyStateRoot (line 378) | func (s *Service) verifyStateRoot(
  method shouldBuildNextPayload (line 410) | func (s *Service) shouldBuildNextPayload(isNextBlockProposer bool) bool {

FILE: beacon/blockchain/pruning.go
  method processPruning (line 29) | func (s *Service) processPruning(ctx context.Context, beaconBlk *ctypes....
  function depositPruneRangeFn (line 47) | func depositPruneRangeFn([]*ctypes.Deposit, PruningChainSpec) (uint64, u...
  function availabilityPruneRangeFn (line 55) | func availabilityPruneRangeFn(slot uint64, cs PruningChainSpec) (uint64,...

FILE: beacon/blockchain/service.go
  type Service (line 36) | type Service struct
    method Name (line 103) | func (s *Service) Name() string {
    method Start (line 108) | func (s *Service) Start(ctx context.Context) error {
    method Stop (line 116) | func (s *Service) Stop() error {
    method StorageBackend (line 128) | func (s *Service) StorageBackend() StorageBackend {
    method PruneOrphanedBlobs (line 133) | func (s *Service) PruneOrphanedBlobs(lastBlockHeight int64) error {
  function NewService (line 75) | func NewService(

FILE: beacon/payload-time/time.go
  function Verify (line 34) | func Verify(
  function Next (line 53) | func Next(

FILE: beacon/payload-time/time_test.go
  function TestNextTimestampVerifies (line 34) | func TestNextTimestampVerifies(t *testing.T) {

FILE: beacon/validator/block_builder.go
  method BuildBlockAndSidecars (line 47) | func (s *Service) BuildBlockAndSidecars(
  method getEmptyBeaconBlockForSlot (line 163) | func (s *Service) getEmptyBeaconBlockForSlot(
  method buildForkData (line 184) | func (s *Service) buildForkData(st *statedb.StateDB, timestamp math.U64)...
  method buildRandaoReveal (line 197) | func (s *Service) buildRandaoReveal(
  method retrieveExecutionPayload (line 212) | func (s *Service) retrieveExecutionPayload(
  method buildBlockBody (line 305) | func (s *Service) buildBlockBody(
  method computeAndSetStateRoot (line 395) | func (s *Service) computeAndSetStateRoot(
  method computeStateRoot (line 422) | func (s *Service) computeStateRoot(

FILE: beacon/validator/config.go
  constant defaultGraffiti (line 24) | defaultGraffiti = ""
  type Config (line 27) | type Config struct
  function DefaultConfig (line 34) | func DefaultConfig() Config {

FILE: beacon/validator/interfaces.go
  type BlobFactory (line 41) | type BlobFactory interface
  type PayloadBuilder (line 51) | type PayloadBuilder interface
  type StateProcessor (line 72) | type StateProcessor interface
  type StorageBackend (line 90) | type StorageBackend interface
  type TelemetrySink (line 98) | type TelemetrySink interface
  type BlockBuilderI (line 107) | type BlockBuilderI interface
  type ChainSpec (line 115) | type ChainSpec interface

FILE: beacon/validator/metrics.go
  type validatorMetrics (line 30) | type validatorMetrics struct
    method measureRequestBlockForProposalTime (line 47) | func (cm *validatorMetrics) measureRequestBlockForProposalTime(
    method measureStateRootComputationTime (line 58) | func (cm *validatorMetrics) measureStateRootComputationTime(start time...
    method failedToRetrievePayload (line 66) | func (cm *validatorMetrics) failedToRetrievePayload(
  function newValidatorMetrics (line 36) | func newValidatorMetrics(

FILE: beacon/validator/service.go
  type Service (line 31) | type Service struct
    method Name (line 81) | func (s *Service) Name() string {
    method Start (line 85) | func (s *Service) Start(
    method Stop (line 91) | func (s *Service) Stop() error {
  function NewService (line 56) | func NewService(

FILE: chain/chain_ids.go
  constant DevnetEth1ChainID (line 27) | DevnetEth1ChainID uint64 = 80087
  constant MainnetEth1ChainID (line 30) | MainnetEth1ChainID uint64 = 80094
  constant TestnetEth1ChainID (line 34) | TestnetEth1ChainID uint64 = 80069

FILE: chain/data.go
  type SpecData (line 30) | type SpecData struct

FILE: chain/helpers.go
  method ActiveForkVersionForTimestamp (line 30) | func (s spec) ActiveForkVersionForTimestamp(timestamp math.U64) common.V...
  method GenesisForkVersion (line 48) | func (s spec) GenesisForkVersion() common.Version {
  method SlotToEpoch (line 53) | func (s spec) SlotToEpoch(slot math.Slot) math.Epoch {
  method WithinDAPeriod (line 59) | func (s spec) WithinDAPeriod(block, current math.Slot) bool {
  method IsMainnet (line 64) | func (s spec) IsMainnet() bool {
  method IsTestnet (line 69) | func (s spec) IsTestnet() bool {
  method IsDevnet (line 74) | func (s spec) IsDevnet() bool {

FILE: chain/helpers_test.go
  function TestActiveForkVersionForTimestamp (line 49) | func TestActiveForkVersionForTimestamp(t *testing.T) {
  function TestSlotToEpoch (line 73) | func TestSlotToEpoch(t *testing.T) {
  function TestWithinDAPeriod (line 100) | func TestWithinDAPeriod(t *testing.T) {

FILE: chain/spec.go
  type BalancesSpec (line 34) | type BalancesSpec interface
  type HysteresisSpec (line 47) | type HysteresisSpec interface
  type DepositSpec (line 65) | type DepositSpec interface
  type DomainTypeSpec (line 74) | type DomainTypeSpec interface
  type ForkSpec (line 103) | type ForkSpec interface
  type BlobSpec (line 120) | type BlobSpec interface
  type ForkVersionSpec (line 144) | type ForkVersionSpec interface
  type BerachainSpec (line 152) | type BerachainSpec interface
  type WithdrawalsSpec (line 175) | type WithdrawalsSpec interface
  type Spec (line 191) | type Spec interface
  type spec (line 248) | type spec struct
    method validate (line 260) | func (s spec) validate() error {
    method SbtMaxBlockDelay (line 311) | func (s spec) SbtMaxBlockDelay() time.Duration {
    method SbtTargetBlockTime (line 314) | func (s spec) SbtTargetBlockTime() time.Duration {
    method SbtConstBlockDelay (line 317) | func (s spec) SbtConstBlockDelay() time.Duration {
    method SbtConsensusUpdateHeight (line 320) | func (s spec) SbtConsensusUpdateHeight() int64 {
    method SbtConsensusEnableHeight (line 323) | func (s spec) SbtConsensusEnableHeight() int64 {
    method MaxEffectiveBalance (line 328) | func (s spec) MaxEffectiveBalance() math.Gwei {
    method MinActivationBalance (line 333) | func (s spec) MinActivationBalance() math.Gwei {
    method EffectiveBalanceIncrement (line 338) | func (s spec) EffectiveBalanceIncrement() math.Gwei {
    method HysteresisQuotient (line 342) | func (s spec) HysteresisQuotient(timestamp math.U64) math.U64 {
    method HysteresisDownwardMultiplier (line 356) | func (s spec) HysteresisDownwardMultiplier() math.U64 {
    method HysteresisUpwardMultiplier (line 360) | func (s spec) HysteresisUpwardMultiplier(timestamp math.U64) math.U64 {
    method SlotsPerEpoch (line 375) | func (s spec) SlotsPerEpoch() uint64 {
    method SlotsPerHistoricalRoot (line 380) | func (s spec) SlotsPerHistoricalRoot() uint64 {
    method MinEpochsToInactivityPenalty (line 386) | func (s spec) MinEpochsToInactivityPenalty() uint64 {
    method DomainTypeProposer (line 391) | func (s spec) DomainTypeProposer() common.DomainType {
    method DomainTypeAttester (line 396) | func (s spec) DomainTypeAttester() common.DomainType {
    method DomainTypeRandao (line 401) | func (s spec) DomainTypeRandao() common.DomainType {
    method DomainTypeDeposit (line 406) | func (s spec) DomainTypeDeposit() common.DomainType {
    method DomainTypeVoluntaryExit (line 411) | func (s spec) DomainTypeVoluntaryExit() common.DomainType {
    method DomainTypeSelectionProof (line 416) | func (s spec) DomainTypeSelectionProof() common.DomainType {
    method DomainTypeAggregateAndProof (line 422) | func (s spec) DomainTypeAggregateAndProof() common.DomainType {
    method DomainTypeApplicationMask (line 427) | func (s spec) DomainTypeApplicationMask() common.DomainType {
    method DepositContractAddress (line 432) | func (s spec) DepositContractAddress() common.ExecutionAddress {
    method MaxDepositsPerBlock (line 437) | func (s spec) MaxDepositsPerBlock() uint64 {
    method DepositEth1ChainID (line 442) | func (s spec) DepositEth1ChainID() uint64 {
    method Eth1FollowDistance (line 448) | func (s spec) Eth1FollowDistance() uint64 {
    method TargetSecondsPerEth1Block (line 453) | func (s spec) TargetSecondsPerEth1Block() uint64 {
    method GenesisTime (line 458) | func (s spec) GenesisTime() uint64 {
    method Deneb1ForkTime (line 463) | func (s spec) Deneb1ForkTime() uint64 {
    method ElectraForkTime (line 468) | func (s spec) ElectraForkTime() uint64 {
    method Electra1ForkTime (line 473) | func (s spec) Electra1ForkTime() uint64 {
    method FuluForkTime (line 478) | func (s spec) FuluForkTime() uint64 {
    method EpochsPerHistoricalVector (line 483) | func (s spec) EpochsPerHistoricalVector() uint64 {
    method EpochsPerSlashingsVector (line 488) | func (s spec) EpochsPerSlashingsVector() uint64 {
    method HistoricalRootsLimit (line 493) | func (s spec) HistoricalRootsLimit() uint64 {
    method ValidatorRegistryLimit (line 498) | func (s spec) ValidatorRegistryLimit() uint64 {
    method MaxWithdrawalsPerPayload (line 504) | func (s spec) MaxWithdrawalsPerPayload() uint64 {
    method MaxValidatorsPerWithdrawalsSweep (line 509) | func (s spec) MaxValidatorsPerWithdrawalsSweep() math.U64 {
    method MinValidatorWithdrawabilityDelay (line 513) | func (s spec) MinValidatorWithdrawabilityDelay() math.Epoch {
    method MinEpochsForBlobsSidecarsRequest (line 519) | func (s spec) MinEpochsForBlobsSidecarsRequest() math.Epoch {
    method MaxBlobCommitmentsPerBlock (line 525) | func (s spec) MaxBlobCommitmentsPerBlock() uint64 {
    method MaxBlobsPerBlock (line 530) | func (s spec) MaxBlobsPerBlock() uint64 {
    method FieldElementsPerBlob (line 535) | func (s spec) FieldElementsPerBlob() uint64 {
    method BytesPerBlob (line 540) | func (s spec) BytesPerBlob() uint64 {
    method ValidatorSetCap (line 545) | func (s spec) ValidatorSetCap() uint64 {
    method EVMInflationAddress (line 551) | func (s spec) EVMInflationAddress(timestamp math.U64) common.Execution...
    method EVMInflationPerBlock (line 568) | func (s spec) EVMInflationPerBlock(timestamp math.U64) math.Gwei {
  function NewSpec (line 254) | func NewSpec(data *SpecData) (Spec, error) {

FILE: chain/spec_test.go
  function baseSpecData (line 32) | func baseSpecData() *chain.SpecData {
  constant forkGatedGenesisTime (line 44) | forkGatedGenesisTime  uint64 = 0
  constant forkGatedDeneb1Time (line 45) | forkGatedDeneb1Time   uint64 = 100
  constant forkGatedElectraTime (line 46) | forkGatedElectraTime  uint64 = 200
  constant forkGatedElectra1Time (line 47) | forkGatedElectra1Time uint64 = 300
  constant forkGatedFuluTime (line 48) | forkGatedFuluTime     uint64 = 400
  constant preFuluHysteresisQuotient (line 54) | preFuluHysteresisQuotient          uint64 = 4
  constant preFuluHysteresisUpwardMultiplier (line 55) | preFuluHysteresisUpwardMultiplier  uint64 = 5
  constant fuluHysteresisQuotient (line 56) | fuluHysteresisQuotient             uint64 = 40
  constant fuluHysteresisUpwardMultiplierFulu (line 57) | fuluHysteresisUpwardMultiplierFulu uint64 = 50
  constant evmInflationPerBlockGenesis (line 62) | evmInflationPerBlockGenesis uint64 = 10
  constant evmInflationPerBlockDeneb1 (line 63) | evmInflationPerBlockDeneb1  uint64 = 20
  constant evmInflationPerBlockFulu (line 64) | evmInflationPerBlockFulu    uint64 = 30
  function buildForkGatedSpec (line 81) | func buildForkGatedSpec(t *testing.T) chain.Spec {
  function TestHysteresisQuotient_ForkBoundary (line 110) | func TestHysteresisQuotient_ForkBoundary(t *testing.T) {
  function TestHysteresisUpwardMultiplier_ForkBoundary (line 140) | func TestHysteresisUpwardMultiplier_ForkBoundary(t *testing.T) {
  function TestEVMInflationAddress_ForkBoundary (line 170) | func TestEVMInflationAddress_ForkBoundary(t *testing.T) {
  function TestEVMInflationPerBlock_ForkBoundary (line 201) | func TestEVMInflationPerBlock_ForkBoundary(t *testing.T) {
  function TestValidate_ForkOrder_Success (line 229) | func TestValidate_ForkOrder_Success(t *testing.T) {
  function TestValidate_ForkOrder_GenesisAfterDeneb (line 242) | func TestValidate_ForkOrder_GenesisAfterDeneb(t *testing.T) {
  function TestValidate_ForkOrder_DenebAfterElectra (line 256) | func TestValidate_ForkOrder_DenebAfterElectra(t *testing.T) {
  function TestValidate_ForkOrder_AllForksAtGenesis (line 270) | func TestValidate_ForkOrder_AllForksAtGenesis(t *testing.T) {

FILE: cli/builder/builder.go
  type CLIBuilder (line 38) | type CLIBuilder struct
    method Build (line 66) | func (cb *CLIBuilder) Build() (*cmdlib.Root, error) {
    method defaultRunHandler (line 107) | func (cb *CLIBuilder) defaultRunHandler(logger *phuslu.Logger) func(cm...
    method InterceptConfigsPreRunHandler (line 119) | func (cb *CLIBuilder) InterceptConfigsPreRunHandler(
  function New (line 53) | func New(opts ...Opt) *CLIBuilder {

FILE: cli/builder/config.go
  function DefaultAppConfigTemplate (line 31) | func DefaultAppConfigTemplate() string {
  function DefaultAppConfig (line 37) | func DefaultAppConfig() any {

FILE: cli/builder/options.go
  type Opt (line 28) | type Opt
  function WithName (line 31) | func WithName(name string) Opt {
  function WithDescription (line 38) | func WithDescription(description string) Opt {
  function WithComponents (line 45) | func WithComponents(components []any) Opt {
  function WithNodeBuilderFunc (line 52) | func WithNodeBuilderFunc(nodeBuilderFunc servertypes.AppCreator) Opt {
  function WithChainSpecBuilderFunc (line 59) | func WithChainSpecBuilderFunc(chainBuilderFunc servertypes.ChainSpecCrea...

FILE: cli/commands/deposit/commands.go
  function Commands (line 30) | func Commands(chainSpecCreator servertypes.ChainSpecCreator, appCreator ...

FILE: cli/commands/deposit/commands_test.go
  function TestCreateAndValidateCommandsDuality (line 42) | func TestCreateAndValidateCommandsDuality(t *testing.T) {

FILE: cli/commands/deposit/create.go
  constant createAddr0 (line 39) | createAddr0 = iota
  constant createAmt1 (line 40) | createAmt1  = iota
  constant createRoot2 (line 41) | createRoot2 = iota
  constant minArgsCreateDeposit (line 43) | minArgsCreateDeposit = 2
  constant maxArgsCreateDeposit (line 44) | maxArgsCreateDeposit = 3
  constant overrideNodeKey (line 46) | overrideNodeKey         = "override-node-key"
  constant valPrivateKey (line 47) | valPrivateKey           = "validator-private-key"
  constant useGenesisValidatorRoot (line 48) | useGenesisValidatorRoot = "genesis-validator-root"
  constant useGenesisValidatorRootShorthand (line 50) | useGenesisValidatorRootShorthand = "g"
  constant defaultGenesisValidatorRoot (line 52) | defaultGenesisValidatorRoot = ""
  function GetCreateValidatorCmd (line 58) | func GetCreateValidatorCmd(
  function createValidatorCmd (line 91) | func createValidatorCmd(
  function CreateDepositMessage (line 141) | func CreateDepositMessage(
  function getBLSSigner (line 177) | func getBLSSigner(

FILE: cli/commands/deposit/db_check.go
  function GetDBCheckCmd (line 36) | func GetDBCheckCmd(appCreator servertypes.AppCreator) *cobra.Command {

FILE: cli/commands/deposit/interfaces.go
  type ChainSpec (line 28) | type ChainSpec interface

FILE: cli/commands/deposit/keys.go
  function GetValidatorKeysCmd (line 38) | func GetValidatorKeysCmd() *cobra.Command {

FILE: cli/commands/deposit/utils.go
  function getGenesisValidatorRoot (line 33) | func getGenesisValidatorRoot(

FILE: cli/commands/deposit/validate.go
  constant validatePubKey0 (line 36) | validatePubKey0 = iota
  constant validateCreds1 (line 37) | validateCreds1  = iota
  constant validateAmt2 (line 38) | validateAmt2    = iota
  constant validateSign3 (line 39) | validateSign3   = iota
  constant minArgsValidateDeposit (line 41) | minArgsValidateDeposit = 4
  constant maxArgsValidateDeposit (line 42) | maxArgsValidateDeposit = 5
  function GetValidateDepositCmd (line 48) | func GetValidateDepositCmd(chainSpecCreator clitypes.ChainSpecCreator) *...
  function validateDepositMessage (line 68) | func validateDepositMessage(chainSpecCreator clitypes.ChainSpecCreator) ...
  function ValidateDeposit (line 117) | func ValidateDeposit(

FILE: cli/commands/genesis/collect.go
  function CollectGenesisDepositsCmd (line 41) | func CollectGenesisDepositsCmd() *cobra.Command {
  function CollectGenesisDeposits (line 53) | func CollectGenesisDeposits(config *cmtcfg.Config) error {
  function CollectValidatorJSONFiles (line 116) | func CollectValidatorJSONFiles(

FILE: cli/commands/genesis/deposit.go
  function AddGenesisDepositCmd (line 50) | func AddGenesisDepositCmd(chainSpecCreator servertypes.ChainSpecCreator)...
  function AddGenesisDeposit (line 91) | func AddGenesisDeposit(
  function makeOutputFilepath (line 159) | func makeOutputFilepath(rootDir, pubkey string) (string, error) {
  function writeDepositToFile (line 175) | func writeDepositToFile(

FILE: cli/commands/genesis/deposit_test.go
  function TestGenesisDeposit (line 39) | func TestGenesisDeposit(t *testing.T) {

FILE: cli/commands/genesis/genesis.go
  function Commands (line 31) | func Commands(

FILE: cli/commands/genesis/interfaces.go
  type ChainSpec (line 28) | type ChainSpec interface

FILE: cli/commands/genesis/payload.go
  function AddExecutionPayloadCmd (line 46) | func AddExecutionPayloadCmd(chainSpecCreator servertypes.ChainSpecCreato...
  function AddExecutionPayload (line 67) | func AddExecutionPayload(chainSpec ChainSpec, elGenesisPath string, conf...
  function executableDataToExecutionPayloadHeader (line 143) | func executableDataToExecutionPayloadHeader(

FILE: cli/commands/genesis/root.go
  function GetGenesisValidatorRootCmd (line 32) | func GetGenesisValidatorRootCmd(chainSpecCreator types.ChainSpecCreator)...

FILE: cli/commands/genesis/storage.go
  function SetDepositStorageCmd (line 46) | func SetDepositStorageCmd(chainSpecCreator clitypes.ChainSpecCreator) *c...
  function SetDepositStorage (line 69) | func SetDepositStorage(
  function writeDepositStorage (line 128) | func writeDepositStorage(
  function writeGenesisAllocToFile (line 149) | func writeGenesisAllocToFile(

FILE: cli/commands/genesis/storage_test.go
  function TestSetDepositStorageCmd (line 41) | func TestSetDepositStorageCmd(t *testing.T) {
  function setupMockGenesis (line 87) | func setupMockGenesis(t *testing.T, tmpDir string) string {
  function setupMockCLGenesis (line 109) | func setupMockCLGenesis(t *testing.T, tmpDir string) string {
  function verifyStorageOutput (line 140) | func verifyStorageOutput(t *testing.T, genesisPath string) {

FILE: cli/commands/genesis/types/constants.go
  constant DefaultAllocsKey (line 25) | DefaultAllocsKey = "alloc"

FILE: cli/commands/genesis/types/json.go
  type EthGenesis (line 25) | type EthGenesis interface
  type DefaultEthGenesisJSON (line 29) | type DefaultEthGenesisJSON struct
    method Alloc (line 33) | func (g *DefaultEthGenesisJSON) Alloc() gethtypes.GenesisAlloc {

FILE: cli/commands/initialize/initialize.go
  constant FlagOverwrite (line 55) | FlagOverwrite = "overwrite"
  constant FlagRecover (line 58) | FlagRecover = "recover"
  constant FlagDefaultBondDenom (line 61) | FlagDefaultBondDenom = "default-denom"
  constant consensusKeyAlgo (line 65) | consensusKeyAlgo = crypto.CometBLSType
  type printInfo (line 68) | type printInfo struct
  function newPrintInfo (line 76) | func newPrintInfo(moniker, chainID, nodeID, genTxsDir string, appMessage...
  function displayInfo (line 86) | func displayInfo(dst io.Writer, info printInfo) error {
  function InitCmd (line 98) | func InitCmd(creator clitypes.ChainSpecCreator, mm interface {

FILE: cli/commands/jwt/jwt.go
  constant DefaultSecretFileName (line 35) | DefaultSecretFileName = "jwt.hex"
  constant FlagOutputPath (line 36) | FlagOutputPath        = "output-path"
  constant FlagInputPath (line 37) | FlagInputPath         = "input-path"
  constant ConfigFolder (line 38) | ConfigFolder          = "config"
  constant secretDirPerms (line 40) | secretDirPerms  os.FileMode = 0o700
  constant secretFilePerms (line 41) | secretFilePerms os.FileMode = 0o600
  function Commands (line 45) | func Commands() *cobra.Command {
  function NewGenerateJWTCommand (line 65) | func NewGenerateJWTCommand() *cobra.Command {
  function NewValidateJWTCommand (line 88) | func NewValidateJWTCommand() *cobra.Command {
  function getFilePath (line 112) | func getFilePath(cmd *cobra.Command, path string) (string, error) {
  function generateAuthSecretInFile (line 139) | func generateAuthSecretInFile(cmd *cobra.Command, fileName string) error {
  function validateJWTSecret (line 184) | func validateJWTSecret(cmd *cobra.Command, filePath string) error {

FILE: cli/commands/jwt/jwt_test.go
  function Test_NewGenerateJWTCommand (line 34) | func Test_NewGenerateJWTCommand(t *testing.T) {
  function Test_GenerateJWTCommand_FilePermissions (line 109) | func Test_GenerateJWTCommand_FilePermissions(t *testing.T) {
  function checkAuthFileIntegrity (line 155) | func checkAuthFileIntegrity(tb testing.TB, fPath string) {

FILE: cli/commands/root.go
  type Root (line 32) | type Root struct
    method Run (line 91) | func (root *Root) Run(defaultNodeHome string) error {
  function New (line 37) | func New(

FILE: cli/commands/server/cmd/execute.go
  function Execute (line 40) | func Execute(rootCmd *cobra.Command, envPrefix, defaultHome string) error {
  function CreateExecuteContext (line 70) | func CreateExecuteContext(ctx context.Context) context.Context {

FILE: cli/commands/server/pruning.go
  function GetPruningOptionsFromFlags (line 35) | func GetPruningOptionsFromFlags(

FILE: cli/commands/server/rollback.go
  function NewRollbackCmd (line 36) | func NewRollbackCmd(

FILE: cli/commands/server/start.go
  constant flagAddress (line 36) | flagAddress         = "address"
  constant flagTransport (line 37) | flagTransport       = "transport"
  constant FlagHaltHeight (line 38) | FlagHaltHeight      = "halt-height"
  constant FlagHaltTime (line 39) | FlagHaltTime        = "halt-time"
  constant FlagInterBlockCache (line 40) | FlagInterBlockCache = "inter-block-cache"
  constant FlagPruning (line 42) | FlagPruning             = "pruning"
  constant FlagPruningKeepRecent (line 43) | FlagPruningKeepRecent   = "pruning-keep-recent"
  constant FlagPruningInterval (line 44) | FlagPruningInterval     = "pruning-interval"
  constant FlagMinRetainBlocks (line 45) | FlagMinRetainBlocks     = "min-retain-blocks"
  constant FlagIAVLCacheSize (line 46) | FlagIAVLCacheSize       = "iavl-cache-size"
  constant FlagDisableIAVLFastNode (line 47) | FlagDisableIAVLFastNode = "iavl-disable-fastnode"
  type StartCmdOptions (line 52) | type StartCmdOptions struct
  function StartCmdWithOptions (line 60) | func StartCmdWithOptions(
  function addStartNodeFlags (line 109) | func addStartNodeFlags(

FILE: cli/commands/server/types/types.go
  type AppOptions (line 35) | type AppOptions interface
  type AppCreator (line 41) | type AppCreator
  type ChainSpecCreator (line 44) | type ChainSpecCreator

FILE: cli/commands/setup.go
  function DefaultRootCommandSetup (line 37) | func DefaultRootCommandSetup(

FILE: cli/components/client_context.go
  function init (line 34) | func init() {
  function ProvideClientContext (line 43) | func ProvideClientContext() (client.Context, error) {

FILE: cli/components/defaults.go
  function DefaultClientComponents (line 25) | func DefaultClientComponents() []any {

FILE: cli/components/logger.go
  type LoggerInput (line 31) | type LoggerInput struct
  function ProvideLogger (line 38) | func ProvideLogger(

FILE: cli/config/app.go
  function handleAppConfig (line 35) | func handleAppConfig(
  function writeAppConfig (line 65) | func writeAppConfig(

FILE: cli/config/client.go
  function InitClientConfig (line 27) | func InitClientConfig() (string, any) {

FILE: cli/config/comet.go
  function handleCometConfig (line 35) | func handleCometConfig(

FILE: cli/config/server.go
  function SetupCommand (line 46) | func SetupCommand(
  function InitializeCmd (line 74) | func InitializeCmd(cmd *cobra.Command, logger *phuslu.Logger) error {
  function newPrefixedViper (line 100) | func newPrefixedViper(prefix string) *viper.Viper {
  function baseName (line 110) | func baseName() (string, error) {
  function bindFlags (line 119) | func bindFlags(
  function handleConfigs (line 155) | func handleConfigs(

FILE: cli/context/cmd.go
  function GetViperFromCmd (line 32) | func GetViperFromCmd(cmd *cobra.Command) *viper.Viper {
  function GetLoggerFromCmd (line 41) | func GetLoggerFromCmd(cmd *cobra.Command) *phuslu.Logger {
  function GetConfigFromCmd (line 50) | func GetConfigFromCmd(cmd *cobra.Command) *cmtcfg.Config {
  function GetConfigFromViper (line 59) | func GetConfigFromViper(v *viper.Viper) *cmtcfg.Config {

FILE: cli/context/keys.go
  type loggerContextKey (line 24) | type loggerContextKey struct
  type viperContextKey (line 25) | type viperContextKey struct

FILE: cli/flags/flags.go
  constant beaconKitRoot (line 30) | beaconKitRoot     = "beacon-kit."
  constant ChainSpec (line 31) | ChainSpec         = beaconKitRoot + "chain-spec"
  constant ChainSpecFilePath (line 32) | ChainSpecFilePath = beaconKitRoot + "chain-spec-file"
  constant ShutdownTimeout (line 33) | ShutdownTimeout   = beaconKitRoot + "shutdown-timeout"
  constant builderRoot (line 36) | builderRoot           = beaconKitRoot + "payload-builder."
  constant SuggestedFeeRecipient (line 37) | SuggestedFeeRecipient = builderRoot + "suggested-fee-recipient"
  constant BuilderEnabled (line 38) | BuilderEnabled        = builderRoot + "enabled"
  constant BuildPayloadTimeout (line 39) | BuildPayloadTimeout   = builderRoot + "payload-timeout"
  constant validatorRoot (line 42) | validatorRoot = beaconKitRoot + "validator."
  constant Graffiti (line 43) | Graffiti      = validatorRoot + "graffiti"
  constant engineRoot (line 46) | engineRoot              = beaconKitRoot + "engine."
  constant RPCDialURL (line 47) | RPCDialURL              = engineRoot + "rpc-dial-url"
  constant RPCRetryInterval (line 48) | RPCRetryInterval        = engineRoot + "rpc-retry-interval"
  constant RPCMaxRetryInterval (line 49) | RPCMaxRetryInterval     = engineRoot + "rpc-max-retry-interval"
  constant RPCTimeout (line 50) | RPCTimeout              = engineRoot + "rpc-timeout"
  constant RPCStartupCheckInterval (line 51) | RPCStartupCheckInterval = engineRoot + "rpc-startup-check-interval"
  constant RPCHealthCheckInteval (line 52) | RPCHealthCheckInteval   = engineRoot + "rpc-health-check-interval"
  constant RPCJWTRefreshInterval (line 53) | RPCJWTRefreshInterval   = engineRoot + "rpc-jwt-refresh-interval"
  constant JWTSecretPath (line 54) | JWTSecretPath           = engineRoot + "jwt-secret-path"
  constant kzgRoot (line 57) | kzgRoot             = beaconKitRoot + "kzg."
  constant KZGTrustedSetupPath (line 58) | KZGTrustedSetupPath = kzgRoot + "trusted-setup-path"
  constant KZGImplementation (line 59) | KZGImplementation   = kzgRoot + "implementation"
  constant loggerRoot (line 62) | loggerRoot = beaconKitRoot + "logger."
  constant TimeFormat (line 63) | TimeFormat = loggerRoot + "time-format"
  constant LogLevel (line 64) | LogLevel   = loggerRoot + "log-level"
  constant Style (line 65) | Style      = loggerRoot + "style"
  constant blockStoreServiceRoot (line 68) | blockStoreServiceRoot               = beaconKitRoot + "block-store-servi...
  constant BlockStoreServiceAvailabilityWindow (line 69) | BlockStoreServiceAvailabilityWindow = blockStoreServiceRoot +
  constant nodeAPIRoot (line 73) | nodeAPIRoot    = beaconKitRoot + "node-api."
  constant NodeAPIEnabled (line 74) | NodeAPIEnabled = nodeAPIRoot + "enabled"
  constant NodeAPIAddress (line 75) | NodeAPIAddress = nodeAPIRoot + "address"
  constant NodeAPILogging (line 76) | NodeAPILogging = nodeAPIRoot + "logging"
  constant PrivValidatorKeyFile (line 79) | PrivValidatorKeyFile   = "priv_validator_key_file"
  constant PrivValidatorStateFile (line 80) | PrivValidatorStateFile = "priv_validator_state_file"
  function AddBeaconKitFlags (line 84) | func AddBeaconKitFlags(startCmd *cobra.Command) {

FILE: cli/utils/genesis/interfaces.go
  type ChainSpec (line 25) | type ChainSpec interface

FILE: cli/utils/genesis/root.go
  type Beacon (line 34) | type Beacon struct
  type AppState (line 38) | type AppState struct
  type Genesis (line 42) | type Genesis struct
  function ComputeValidatorsRootFromFile (line 47) | func ComputeValidatorsRootFromFile(genesisFile string, cs ChainSpec) (co...
  function ComputeValidatorsRoot (line 64) | func ComputeValidatorsRoot(genesisDeposits types.Deposits, cs ChainSpec)...

FILE: cli/utils/genesis/root_test.go
  type TestDeposits (line 45) | type TestDeposits
    method Generate (line 47) | func (TestDeposits) Generate(rand *rand.Rand, size int) reflect.Value {
  function TestCompareGenesisCmdWithStateProcessor (line 81) | func TestCompareGenesisCmdWithStateProcessor(t *testing.T) {

FILE: cli/utils/parser/validator.go
  function ConvertPubkey (line 35) | func ConvertPubkey(pubkey string) (crypto.BLSPubkey, error) {
  function ConvertWithdrawalCredentials (line 49) | func ConvertWithdrawalCredentials(credentials string) (
  function ConvertAmount (line 68) | func ConvertAmount(amount string) (math.Gwei, error) {
  function ConvertSignature (line 78) | func ConvertSignature(signature string) (crypto.BLSSignature, error) {
  function ConvertGenesisValidatorRoot (line 91) | func ConvertGenesisValidatorRoot(root string) (common.Root, error) {

FILE: cmd/beacond/defaults.go
  function DefaultComponents (line 27) | func DefaultComponents() []any {

FILE: cmd/beacond/main.go
  function run (line 35) | func run() error {
  function main (line 81) | func main() {

FILE: config/config.go
  constant DefaultChainSpec (line 41) | DefaultChainSpec         = "mainnet"
  constant DefaultChainSpecFilePath (line 42) | DefaultChainSpecFilePath = ""
  constant defaultShutdownTimeout (line 43) | defaultShutdownTimeout   = 5 * time.Minute
  type AppOptions (line 47) | type AppOptions interface
  function DefaultConfig (line 52) | func DefaultConfig() *Config {
  type Config (line 68) | type Config struct
    method GetEngine (line 93) | func (c Config) GetEngine() *engineclient.Config {
    method GetPayloadBuilder (line 98) | func (c Config) GetPayloadBuilder() *builder.Config {
    method GetBlockStoreService (line 103) | func (c Config) GetBlockStoreService() *block.Config {
    method GetLogger (line 108) | func (c Config) GetLogger() *log.Config {
    method Template (line 113) | func (c Config) Template() string {
  function ReadConfigFromAppOpts (line 119) | func ReadConfigFromAppOpts(opts AppOptions) (*Config, error) {

FILE: config/config/config.go
  type BaseConfig (line 32) | type BaseConfig struct
  type Config (line 81) | type Config struct
    method ValidateBasic (line 119) | func (c Config) ValidateBasic() error {
  function DefaultConfig (line 89) | func DefaultConfig() *Config {
  function GetConfig (line 109) | func GetConfig(v *viper.Viper) (Config, error) {

FILE: config/config/toml.go
  function init (line 40) | func init() {
  function ParseConfig (line 51) | func ParseConfig(v *viper.Viper) (*Config, error) {
  function SetConfigTemplate (line 59) | func SetConfigTemplate(customTemplate string) error {
  function WriteConfigFile (line 73) | func WriteConfigFile(configFilePath string, config interface{}) error {

FILE: config/spec/creator.go
  constant devnet (line 38) | devnet  = "devnet"
  constant mainnet (line 39) | mainnet = "mainnet"
  constant testnet (line 40) | testnet = "testnet"
  constant file (line 41) | file    = "file"
  function Create (line 46) | func Create(appOpts types.AppOptions) (chain.Spec, error) {
  function handleChainSpecFile (line 73) | func handleChainSpecFile(appOpts types.AppOptions) (chain.Spec, error) {
  function loadSpecData (line 87) | func loadSpecData(path string) (*chain.SpecData, error) {
  function validateRequiredFields (line 117) | func validateRequiredFields(t reflect.Type, v *viper.Viper, prefix strin...

FILE: config/spec/creator_test.go
  type dummyAppOptions (line 35) | type dummyAppOptions struct
    method Get (line 39) | func (d dummyAppOptions) Get(key string) interface{} {
  function TestCreateChainSpec_Devnet (line 43) | func TestCreateChainSpec_Devnet(t *testing.T) {
  function TestCreateChainSpec_Testnet (line 58) | func TestCreateChainSpec_Testnet(t *testing.T) {
  function TestCreateChainSpec_Mainnet (line 73) | func TestCreateChainSpec_Mainnet(t *testing.T) {
  function TestCreateChainSpec_Default_NoSpecFlag (line 88) | func TestCreateChainSpec_Default_NoSpecFlag(t *testing.T) {
  function TestCreateChainSpec_File (line 100) | func TestCreateChainSpec_File(t *testing.T) {
  function TestCreateChainSpec_FieldValidation (line 134) | func TestCreateChainSpec_FieldValidation(t *testing.T) {

FILE: config/spec/defaults.go
  constant defaultMaxEffectiveBalance (line 28) | defaultMaxEffectiveBalance       = 32e9
  constant defaultActivationBalance (line 29) | defaultActivationBalance         = 32e9
  constant defaultEffectiveBalanceIncrement (line 30) | defaultEffectiveBalanceIncrement = 1e9
  constant defaultHysteresisQuotient (line 32) | defaultHysteresisQuotient           = 4
  constant defaultHysteresisDownwardMultiplier (line 33) | defaultHysteresisDownwardMultiplier = 1
  constant defaultHysteresisUpwardMultiplier (line 34) | defaultHysteresisUpwardMultiplier   = 5
  constant defaultSlotsPerEpoch (line 37) | defaultSlotsPerEpoch                = 32
  constant defaultSlotsPerHistoricalRoot (line 38) | defaultSlotsPerHistoricalRoot       = 8
  constant defaultMinEpochsToInactivityPenalty (line 39) | defaultMinEpochsToInactivityPenalty = 4
  constant defaultDomainTypeProposer (line 42) | defaultDomainTypeProposer          = 0
  constant defaultDomainTypeAttester (line 43) | defaultDomainTypeAttester          = 1
  constant defaultDomainTypeRandao (line 44) | defaultDomainTypeRandao            = 2
  constant defaultDomainTypeDeposit (line 45) | defaultDomainTypeDeposit           = 3
  constant defaultDomainTypeVoluntaryExit (line 46) | defaultDomainTypeVoluntaryExit     = 4
  constant defaultDomainTypeSelectionProof (line 47) | defaultDomainTypeSelectionProof    = 5
  constant defaultDomainTypeAggregateAndProof (line 48) | defaultDomainTypeAggregateAndProof = 6
  constant defaultDomainTypeApplicationMask (line 49) | defaultDomainTypeApplicationMask   = 16777216
  constant defaultDepositContractAddress (line 52) | defaultDepositContractAddress    = "0x4242424242424242424242424242424242...
  constant defaultMaxDepositsPerBlock (line 53) | defaultMaxDepositsPerBlock       = 16
  constant defaultDepositEth1ChainID (line 54) | defaultDepositEth1ChainID        = 1
  constant defaultEth1FollowDistance (line 55) | defaultEth1FollowDistance        = 1
  constant defaultTargetSecondsPerEth1Block (line 56) | defaultTargetSecondsPerEth1Block = 2
  constant defaultEpochsPerHistoricalVector (line 59) | defaultEpochsPerHistoricalVector = 8
  constant defaultEpochsPerSlashingsVector (line 60) | defaultEpochsPerSlashingsVector  = 8
  constant defaultHistoricalRootsLimit (line 61) | defaultHistoricalRootsLimit      = 8
  constant defaultValidatorRegistryLimit (line 62) | defaultValidatorRegistryLimit    = 1099511627776
  constant defaultMaxWithdrawalsPerPayload (line 65) | defaultMaxWithdrawalsPerPayload         = 16
  constant defaultMaxValidatorsPerWithdrawalsSweep (line 66) | defaultMaxValidatorsPerWithdrawalsSweep = 1 << 14
  constant defaultMinEpochsForBlobsSidecarsRequest (line 69) | defaultMinEpochsForBlobsSidecarsRequest = 4096
  constant defaultMaxBlobCommitmentsPerBlock (line 70) | defaultMaxBlobCommitmentsPerBlock       = 4096
  constant defaultMaxBlobsPerBlock (line 71) | defaultMaxBlobsPerBlock                 = 6
  constant defaultFieldElementsPerBlob (line 72) | defaultFieldElementsPerBlob             = 4096
  constant defaultBytesPerBlob (line 73) | defaultBytesPerBlob                     = 131072
  constant defaultValidatorSetCap (line 76) | defaultValidatorSetCap      = 256
  constant defaultEVMInflationAddress (line 77) | defaultEVMInflationAddress  = "0x0000000000000000000000000000000000000000"
  constant defaultEVMInflationPerBlock (line 78) | defaultEVMInflationPerBlock = 0
  constant defaultMinValidatorWithdrawabilityDelay (line 81) | defaultMinValidatorWithdrawabilityDelay = 256

FILE: config/spec/defaults_test.go
  function TestDomainTypeConversion (line 31) | func TestDomainTypeConversion(t *testing.T) {

FILE: config/spec/devnet.go
  constant devnetEVMInflationAddress (line 31) | devnetEVMInflationAddress = "0x6942069420694206942069420694206942069420"
  constant devnetEVMInflationPerBlock (line 35) | devnetEVMInflationPerBlock = 10 * params.GWei
  constant devnetMaxStakeAmount (line 39) | devnetMaxStakeAmount = 4000 * params.GWei
  constant devnetGenesisTime (line 42) | devnetGenesisTime = 0
  constant devnetDeneb1ForkTime (line 45) | devnetDeneb1ForkTime = 0
  constant devnetElectraForkTime (line 48) | devnetElectraForkTime = 0
  constant devnetElectra1ForkTime (line 52) | devnetElectra1ForkTime = 0
  constant devnetEVMInflationAddressDeneb1 (line 56) | devnetEVMInflationAddressDeneb1 = "0x42069420694206942069420694206942069...
  constant devnetEVMInflationPerBlockDeneb1 (line 60) | devnetEVMInflationPerBlockDeneb1 = 11 * params.GWei
  constant devnetMinValidatorWithdrawabilityDelay (line 63) | devnetMinValidatorWithdrawabilityDelay = 32
  constant devnetFuluForkTime (line 67) | devnetFuluForkTime = 0
  constant devnetEVMInflationPerBlockFulu (line 71) | devnetEVMInflationPerBlockFulu = 12 * params.GWei
  function DevnetChainSpecData (line 78) | func DevnetChainSpecData() *chain.SpecData {
  function DevnetChainSpec (line 115) | func DevnetChainSpec() (chain.Spec, error) {

FILE: config/spec/mainnet.go
  constant mainnetEVMInflationAddress (line 36) | mainnetEVMInflationAddress = defaultEVMInflationAddress
  constant mainnetEVMInflationPerBlock (line 42) | mainnetEVMInflationPerBlock = defaultEVMInflationPerBlock
  constant mainnetValidatorSetCap (line 45) | mainnetValidatorSetCap = 69
  constant mainnetMaxValidatorsPerWithdrawalsSweep (line 50) | mainnetMaxValidatorsPerWithdrawalsSweep = 31
  constant mainnetMaxEffectiveBalance (line 53) | mainnetMaxEffectiveBalance = 10_000_000 * params.GWei
  constant mainnetEffectiveBalanceIncrement (line 57) | mainnetEffectiveBalanceIncrement = 10_000 * params.GWei
  constant mainnetMinActivationBalance (line 61) | mainnetMinActivationBalance = 250_000 * params.GWei
  constant mainnetSlotsPerEpoch (line 64) | mainnetSlotsPerEpoch = 192
  constant mainnetMinEpochsForBlobsSidecarsRequest (line 67) | mainnetMinEpochsForBlobsSidecarsRequest = defaultMinEpochsForBlobsSideca...
  constant mainnetMaxBlobCommitmentsPerBlock (line 70) | mainnetMaxBlobCommitmentsPerBlock = defaultMaxBlobCommitmentsPerBlock
  constant mainnetDepositContractAddress (line 74) | mainnetDepositContractAddress = defaultDepositContractAddress
  constant mainnetGenesisTime (line 77) | mainnetGenesisTime = 1_737_381_600
  constant mainnetDeneb1ForkTime (line 82) | mainnetDeneb1ForkTime = 1_738_415_507
  constant mainnetElectraForkTime (line 85) | mainnetElectraForkTime = 1_749_056_400
  constant mainnetElectra1ForkTime (line 88) | mainnetElectra1ForkTime = 1_756_915_200
  constant mainnetEVMInflationAddressDeneb1 (line 92) | mainnetEVMInflationAddressDeneb1 = "0x656b95E550C07a9ffe548bd4085c72418C...
  constant mainnetEVMInflationPerBlockDeneb1 (line 96) | mainnetEVMInflationPerBlockDeneb1 = 5.75 * params.GWei
  constant mainnetMinValidatorWithdrawabilityDelay (line 100) | mainnetMinValidatorWithdrawabilityDelay = defaultMinValidatorWithdrawabi...
  constant mainnetSBTConsensusUpdateHeight (line 103) | mainnetSBTConsensusUpdateHeight = 9_983_085
  constant mainnetSBTConsensusEnableHeight (line 104) | mainnetSBTConsensusEnableHeight = 9_983_086
  constant mainnetFuluForkTime (line 108) | mainnetFuluForkTime = 9_999_999_999_999_999
  constant mainnetHysteresisQuotientFulu (line 111) | mainnetHysteresisQuotientFulu = 100
  constant mainnetHysteresisUpwardMultiplierFulu (line 114) | mainnetHysteresisUpwardMultiplierFulu = 10
  constant mainnetEVMInflationAddressFulu (line 119) | mainnetEVMInflationAddressFulu = "0x000000000000000000000000000000000000...
  constant mainnetEVMInflationPerBlockFulu (line 124) | mainnetEVMInflationPerBlockFulu = 0
  function MainnetChainSpecData (line 128) | func MainnetChainSpecData() *chain.SpecData {
  function MainnetChainSpec (line 213) | func MainnetChainSpec() (chain.Spec, error) {

FILE: config/spec/testnet.go
  function TestnetChainSpecData (line 28) | func TestnetChainSpecData() *chain.SpecData {
  function TestnetChainSpec (line 60) | func TestnetChainSpec() (chain.Spec, error) {

FILE: config/template/template.go
  constant TomlTemplate (line 23) | TomlTemplate = `

FILE: config/viper/parser.go
  function NumericToDomainTypeFunc (line 36) | func NumericToDomainTypeFunc() mapstructure.DecodeHookFunc {
  function StringToExecutionAddressFunc (line 63) | func StringToExecutionAddressFunc() mapstructure.DecodeHookFunc {
  function StringToDialURLFunc (line 69) | func StringToDialURLFunc() mapstructure.DecodeHookFunc {
  function StringToConnectionURLFunc (line 83) | func StringToConnectionURLFunc() mapstructure.DecodeHookFunc {
  function stringTo (line 89) | func stringTo[T any](

FILE: consensus-types/types/attestation_data.go
  constant AttestationDataSize (line 33) | AttestationDataSize = 48
  type AttestationData (line 41) | type AttestationData struct
    method SizeSSZ (line 55) | func (*AttestationData) SizeSSZ(*ssz.Sizer) uint32 {
    method DefineSSZ (line 60) | func (a *AttestationData) DefineSSZ(codec *ssz.Codec) {
    method HashTreeRoot (line 67) | func (a *AttestationData) HashTreeRoot() common.Root {
    method MarshalSSZ (line 72) | func (a *AttestationData) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 77) | func (*AttestationData) ValidateAfterDecodingSSZ() error { return nil }
    method MarshalSSZTo (line 85) | func (a *AttestationData) MarshalSSZTo(dst []byte) ([]byte, error) {
    method HashTreeRootWith (line 95) | func (a *AttestationData) HashTreeRootWith(hh fastssz.HashWalker) error {
    method GetTree (line 112) | func (a *AttestationData) GetTree() (*fastssz.Node, error) {
    method GetSlot (line 121) | func (a *AttestationData) GetSlot() math.U64 {
    method GetIndex (line 126) | func (a *AttestationData) GetIndex() math.U64 {
    method GetBeaconBlockRoot (line 131) | func (a *AttestationData) GetBeaconBlockRoot() common.Root {

FILE: consensus-types/types/attestation_data_test.go
  function generateAttestationData (line 34) | func generateAttestationData() *types.AttestationData {
  function TestAttestationData_MarshalSSZ_UnmarshalSSZ (line 45) | func TestAttestationData_MarshalSSZ_UnmarshalSSZ(t *testing.T) {
  function TestAttestationData_GetTree (line 108) | func TestAttestationData_GetTree(t *testing.T) {
  function TestAttestationData_Getters (line 123) | func TestAttestationData_Getters(t *testing.T) {

FILE: consensus-types/types/attester_slashings.go
  type AttesterSlashings (line 41) | type AttesterSlashings
    method SizeSSZ (line 45) | func (ass AttesterSlashings) SizeSSZ(siz *ssz.Sizer, _ bool) uint32 {
    method DefineSSZ (line 50) | func (ass AttesterSlashings) DefineSSZ(c *ssz.Codec) {
    method HashTreeRoot (line 63) | func (ass AttesterSlashings) HashTreeRoot() common.Root {
    method EnforceUnused (line 70) | func (ass AttesterSlashings) EnforceUnused() error {

FILE: consensus-types/types/attestions.go
  type Attestations (line 41) | type Attestations
    method SizeSSZ (line 45) | func (as Attestations) SizeSSZ(siz *ssz.Sizer, _ bool) uint32 {
    method DefineSSZ (line 50) | func (as Attestations) DefineSSZ(c *ssz.Codec) {
    method HashTreeRoot (line 63) | func (as Attestations) HashTreeRoot() common.Root {
    method EnforceUnused (line 70) | func (as Attestations) EnforceUnused() error {

FILE: consensus-types/types/block.go
  type BeaconBlock (line 41) | type BeaconBlock struct
    method SizeSSZ (line 93) | func (b *BeaconBlock) SizeSSZ(siz *ssz.Sizer, fixed bool) uint32 {
    method DefineSSZ (line 104) | func (b *BeaconBlock) DefineSSZ(codec *ssz.Codec) {
    method MarshalSSZ (line 117) | func (b *BeaconBlock) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 122) | func (b *BeaconBlock) ValidateAfterDecodingSSZ() error {
    method HashTreeRoot (line 127) | func (b *BeaconBlock) HashTreeRoot() common.Root {
    method GetSlot (line 132) | func (b *BeaconBlock) GetSlot() math.Slot {
    method GetProposerIndex (line 137) | func (b *BeaconBlock) GetProposerIndex() math.ValidatorIndex {
    method GetParentBlockRoot (line 142) | func (b *BeaconBlock) GetParentBlockRoot() common.Root {
    method SetParentBlockRoot (line 147) | func (b *BeaconBlock) SetParentBlockRoot(parentBlockRoot common.Root) {
    method GetStateRoot (line 152) | func (b *BeaconBlock) GetStateRoot() common.Root {
    method SetStateRoot (line 157) | func (b *BeaconBlock) SetStateRoot(root common.Root) {
    method GetBody (line 162) | func (b *BeaconBlock) GetBody() *BeaconBlockBody {
    method GetHeader (line 167) | func (b *BeaconBlock) GetHeader() *BeaconBlockHeader {
    method GetTimestamp (line 179) | func (b *BeaconBlock) GetTimestamp() math.U64 {
  function NewBeaconBlockWithVersion (line 57) | func NewBeaconBlockWithVersion(
  function NewEmptyBeaconBlockWithVersion (line 81) | func NewEmptyBeaconBlockWithVersion(version common.Version) *BeaconBlock {

FILE: consensus-types/types/block_test.go
  function TestBeaconBlockForDeneb (line 36) | func TestBeaconBlockForDeneb(t *testing.T) {
  function TestBeaconBlock (line 52) | func TestBeaconBlock(t *testing.T) {
  function TestBeaconBlock_MarshalUnmarshalSSZ (line 78) | func TestBeaconBlock_MarshalUnmarshalSSZ(t *testing.T) {
  function TestBeaconBlock_HashTreeRoot (line 94) | func TestBeaconBlock_HashTreeRoot(t *testing.T) {
  function TestBeaconBlock_IsNil (line 103) | func TestBeaconBlock_IsNil(t *testing.T) {
  function TestNewWithVersion (line 109) | func TestNewWithVersion(t *testing.T) {
  function TestNewWithVersionInvalidForkVersion (line 131) | func TestNewWithVersionInvalidForkVersion(t *testing.T) {
  function TestPropertyBlockRootAndBlockHeaderRootEquivalence (line 146) | func TestPropertyBlockRootAndBlockHeaderRootEquivalence(t *testing.T) {

FILE: consensus-types/types/bls_to_execution_changes.go
  type BlsToExecutionChanges (line 41) | type BlsToExecutionChanges
    method SizeSSZ (line 45) | func (bs BlsToExecutionChanges) SizeSSZ(siz *ssz.Sizer, _ bool) uint32 {
    method DefineSSZ (line 50) | func (bs BlsToExecutionChanges) DefineSSZ(c *ssz.Codec) {
    method HashTreeRoot (line 63) | func (bs BlsToExecutionChanges) HashTreeRoot() common.Root {
    method EnforceUnused (line 70) | func (bs BlsToExecutionChanges) EnforceUnused() error {

FILE: consensus-types/types/body.go
  constant BodyLengthDeneb (line 38) | BodyLengthDeneb uint64 = 12
  constant BodyLengthElectra (line 41) | BodyLengthElectra uint64 = 13
  constant KZGPosition (line 44) | KZGPosition uint64 = 11
  constant KZGGeneralizedIndex (line 48) | KZGGeneralizedIndex = 27
  constant KZGRootIndex (line 53) | KZGRootIndex = KZGGeneralizedIndex * 2
  constant KZGInclusionProofDepth (line 58) | KZGInclusionProofDepth = 17
  constant KZGOffset (line 61) | KZGOffset = KZGRootIndex * constants.MaxBlobCommitmentsPerBlock
  type BeaconBlockBody (line 71) | type BeaconBlockBody struct
    method SizeSSZ (line 109) | func (b *BeaconBlockBody) SizeSSZ(siz *ssz.Sizer, fixed bool) uint32 {
    method DefineSSZ (line 138) | func (b *BeaconBlockBody) DefineSSZ(codec *ssz.Codec) {
    method MarshalSSZ (line 172) | func (b *BeaconBlockBody) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 197) | func (b *BeaconBlockBody) ValidateAfterDecodingSSZ() error {
    method HashTreeRoot (line 213) | func (b *BeaconBlockBody) HashTreeRoot() common.Root {
    method GetTopLevelRoots (line 222) | func (b *BeaconBlockBody) GetTopLevelRoots() ([]common.Root, error) {
    method Length (line 259) | func (b *BeaconBlockBody) Length() uint64 {
    method GetRandaoReveal (line 266) | func (b *BeaconBlockBody) GetRandaoReveal() crypto.BLSSignature {
    method SetRandaoReveal (line 270) | func (b *BeaconBlockBody) SetRandaoReveal(reveal crypto.BLSSignature) {
    method GetEth1Data (line 274) | func (b *BeaconBlockBody) GetEth1Data() *Eth1Data {
    method SetEth1Data (line 278) | func (b *BeaconBlockBody) SetEth1Data(eth1Data *Eth1Data) {
    method GetGraffiti (line 282) | func (b *BeaconBlockBody) GetGraffiti() common.Bytes32 {
    method SetGraffiti (line 286) | func (b *BeaconBlockBody) SetGraffiti(graffiti common.Bytes32) {
    method GetProposerSlashings (line 290) | func (b *BeaconBlockBody) GetProposerSlashings() ProposerSlashings {
    method SetProposerSlashings (line 294) | func (b *BeaconBlockBody) SetProposerSlashings(ps ProposerSlashings) {
    method GetAttesterSlashings (line 298) | func (b *BeaconBlockBody) GetAttesterSlashings() AttesterSlashings {
    method SetAttesterSlashings (line 302) | func (b *BeaconBlockBody) SetAttesterSlashings(ps AttesterSlashings) {
    method GetVoluntaryExits (line 306) | func (b *BeaconBlockBody) GetVoluntaryExits() VoluntaryExits {
    method SetVoluntaryExits (line 310) | func (b *BeaconBlockBody) SetVoluntaryExits(exits VoluntaryExits) {
    method GetDeposits (line 314) | func (b *BeaconBlockBody) GetDeposits() Deposits {
    method SetDeposits (line 318) | func (b *BeaconBlockBody) SetDeposits(deposits Deposits) {
    method GetAttestations (line 322) | func (b *BeaconBlockBody) GetAttestations() Attestations {
    method SetAttestations (line 326) | func (b *BeaconBlockBody) SetAttestations(attestations Attestations) {
    method GetSyncAggregate (line 330) | func (b *BeaconBlockBody) GetSyncAggregate() *SyncAggregate {
    method SetSyncAggregate (line 334) | func (b *BeaconBlockBody) SetSyncAggregate(syncAggregate *SyncAggregat...
    method GetExecutionPayload (line 338) | func (b *BeaconBlockBody) GetExecutionPayload() *ExecutionPayload {
    method SetExecutionPayload (line 342) | func (b *BeaconBlockBody) SetExecutionPayload(executionData *Execution...
    method GetBlsToExecutionChanges (line 346) | func (b *BeaconBlockBody) GetBlsToExecutionChanges() BlsToExecutionCha...
    method SetBlsToExecutionChanges (line 350) | func (b *BeaconBlockBody) SetBlsToExecutionChanges(blsChanges BlsToExe...
    method GetBlobKzgCommitments (line 354) | func (b *BeaconBlockBody) GetBlobKzgCommitments() eip4844.KZGCommitmen...
    method SetBlobKzgCommitments (line 358) | func (b *BeaconBlockBody) SetBlobKzgCommitments(commitments eip4844.KZ...
    method GetExecutionRequests (line 362) | func (b *BeaconBlockBody) GetExecutionRequests() (*ExecutionRequests, ...
    method SetExecutionRequests (line 372) | func (b *BeaconBlockBody) SetExecutionRequests(executionRequest *Execu...
  function NewEmptyBeaconBlockBodyWithVersion (line 188) | func NewEmptyBeaconBlockBodyWithVersion(version common.Version) *BeaconB...

FILE: consensus-types/types/body_test.go
  function generateBeaconBlockBody (line 40) | func generateBeaconBlockBody(t *testing.T, v common.Version) types.Beaco...
  function TestBeaconBlockBodyBase (line 66) | func TestBeaconBlockBodyBase(t *testing.T) {
  function TestBeaconBlockBody (line 85) | func TestBeaconBlockBody(t *testing.T) {
  function TestBeaconBlockBody_SetBlobKzgCommitments (line 111) | func TestBeaconBlockBody_SetBlobKzgCommitments(t *testing.T) {
  function TestBeaconBlockBody_SetRandaoReveal (line 120) | func TestBeaconBlockBody_SetRandaoReveal(t *testing.T) {
  function TestBeaconBlockBody_SetEth1Data (line 129) | func TestBeaconBlockBody_SetEth1Data(t *testing.T) {
  function TestBeaconBlockBody_SetDeposits (line 138) | func TestBeaconBlockBody_SetDeposits(t *testing.T) {
  function TestBeaconBlockBody_MarshalSSZ (line 147) | func TestBeaconBlockBody_MarshalSSZ(t *testing.T) {
  function TestBeaconBlockBody_GetTopLevelRoots (line 166) | func TestBeaconBlockBody_GetTopLevelRoots(t *testing.T) {
  function TestBeaconBlockBody_Empty (line 181) | func TestBeaconBlockBody_Empty(t *testing.T) {
  function TestBeaconBlockBody_UnusedProposerSlashingsEnforcement (line 189) | func TestBeaconBlockBody_UnusedProposerSlashingsEnforcement(t *testing.T) {
  function TestBeaconBlockBody_UnusedAttesterSlashingsEnforcement (line 212) | func TestBeaconBlockBody_UnusedAttesterSlashingsEnforcement(t *testing.T) {
  function TestBeaconBlockBody_UnusedAttestationsEnforcement (line 235) | func TestBeaconBlockBody_UnusedAttestationsEnforcement(t *testing.T) {
  function TestBeaconBlockBody_UnusedVoluntaryExitsEnforcement (line 258) | func TestBeaconBlockBody_UnusedVoluntaryExitsEnforcement(t *testing.T) {
  function TestBeaconBlockBody_UnusedBlsToExecutionChangesEnforcement (line 281) | func TestBeaconBlockBody_UnusedBlsToExecutionChangesEnforcement(t *testi...
  function TestBeaconBlockBody_RoundTrip_HashTreeRoot (line 302) | func TestBeaconBlockBody_RoundTrip_HashTreeRoot(t *testing.T) {
  function Test_KZGCommitmentInclusionProofDepth (line 318) | func Test_KZGCommitmentInclusionProofDepth(t *testing.T) {

FILE: consensus-types/types/consolidation_request.go
  constant sszConsolidationRequestSize (line 34) | sszConsolidationRequestSize = 116
  type ConsolidationRequest (line 44) | type ConsolidationRequest struct
    method ValidateAfterDecodingSSZ (line 54) | func (c *ConsolidationRequest) ValidateAfterDecodingSSZ() error {
    method DefineSSZ (line 58) | func (c *ConsolidationRequest) DefineSSZ(codec *ssz.Codec) {
    method SizeSSZ (line 64) | func (c *ConsolidationRequest) SizeSSZ(_ *ssz.Sizer) uint32 {
    method MarshalSSZ (line 68) | func (c *ConsolidationRequest) MarshalSSZ() ([]byte, error) {
    method HashTreeRoot (line 74) | func (c *ConsolidationRequest) HashTreeRoot() common.Root {
  type ConsolidationRequests (line 86) | type ConsolidationRequests
    method MarshalSSZ (line 89) | func (cr ConsolidationRequests) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 94) | func (cr ConsolidationRequests) ValidateAfterDecodingSSZ() error {
  function DecodeConsolidationRequests (line 105) | func DecodeConsolidationRequests(data []byte) (ConsolidationRequests, er...

FILE: consensus-types/types/consolidation_request_test.go
  function TestConsolidationRequest_ValidValuesSSZ (line 35) | func TestConsolidationRequest_ValidValuesSSZ(t *testing.T) {
  function TestConsolidationRequest_InvalidValuesUnmarshalSSZ (line 151) | func TestConsolidationRequest_InvalidValuesUnmarshalSSZ(t *testing.T) {

FILE: consensus-types/types/deposit.go
  constant depositSize (line 33) | depositSize = 192
  type Deposit (line 43) | type Deposit struct
    method Equals (line 62) | func (d *Deposit) Equals(o *Deposit) bool {
    method VerifySignature (line 71) | func (d *Deposit) VerifySignature(
    method DefineSSZ (line 93) | func (d *Deposit) DefineSSZ(c *ssz.Codec) {
    method MarshalSSZ (line 102) | func (d *Deposit) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 107) | func (*Deposit) ValidateAfterDecodingSSZ() error { return nil }
    method SizeSSZ (line 110) | func (d *Deposit) SizeSSZ(*ssz.Sizer) uint32 {
    method HashTreeRoot (line 115) | func (d *Deposit) HashTreeRoot() common.Root {
    method MarshalSSZTo (line 124) | func (d *Deposit) MarshalSSZTo(dst []byte) ([]byte, error) {
    method HashTreeRootWith (line 134) | func (d *Deposit) HashTreeRootWith(hh fastssz.HashWalker) error {
    method GetTree (line 157) | func (d *Deposit) GetTree() (*fastssz.Node, error) {
    method GetAmount (line 166) | func (d *Deposit) GetAmount() math.Gwei {
    method GetPubkey (line 171) | func (d *Deposit) GetPubkey() crypto.BLSPubkey {
    method GetIndex (line 176) | func (d *Deposit) GetIndex() math.U64 {
    method GetSignature (line 181) | func (d *Deposit) GetSignature() crypto.BLSSignature {
    method GetWithdrawalCredentials (line 186) | func (d *Deposit) GetWithdrawalCredentials() WithdrawalCredentials {
    method HasEth1WithdrawalCredentials (line 192) | func (d *Deposit) HasEth1WithdrawalCredentials() bool {
  function NewEmptyDeposit (line 57) | func NewEmptyDeposit() *Deposit {

FILE: consensus-types/types/deposit_message.go
  type DepositMessage (line 34) | type DepositMessage struct
    method SizeSSZ (line 72) | func (*DepositMessage) SizeSSZ(*ssz.Sizer) uint32 {
    method DefineSSZ (line 78) | func (dm *DepositMessage) DefineSSZ(codec *ssz.Codec) {
    method HashTreeRoot (line 85) | func (dm *DepositMessage) HashTreeRoot() common.Root {
    method MarshalSSZTo (line 92) | func (dm *DepositMessage) MarshalSSZTo(buf []byte) ([]byte, error) {
    method MarshalSSZ (line 97) | func (dm *DepositMessage) MarshalSSZ() ([]byte, error) {
    method UnmarshalSSZ (line 103) | func (dm *DepositMessage) UnmarshalSSZ(buf []byte) error {
    method VerifyCreateValidator (line 109) | func (dm *DepositMessage) VerifyCreateValidator(
  function CreateAndSignDepositMessage (line 45) | func CreateAndSignDepositMessage(

FILE: consensus-types/types/deposit_message_test.go
  function TestCreateAndSignDepositMessage (line 38) | func TestCreateAndSignDepositMessage(t *testing.T) {
  function TestDepositMessage_MarshalUnmarshalSSZ (line 65) | func TestDepositMessage_MarshalUnmarshalSSZ(t *testing.T) {
  function TestDepositMessage_MarshalSSZTo (line 83) | func TestDepositMessage_MarshalSSZTo(t *testing.T) {
  function TestDepositMessage_UnmarshalSSZ_ErrSize (line 101) | func TestDepositMessage_UnmarshalSSZ_ErrSize(t *testing.T) {
  function TestDepositMessage_VerifyCreateValidator_Error (line 111) | func TestDepositMessage_VerifyCreateValidator_Error(t *testing.T) {

FILE: consensus-types/types/deposit_request.go
  type DepositRequests (line 38) | type DepositRequests
    method MarshalSSZ (line 41) | func (dr DepositRequests) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 46) | func (dr DepositRequests) ValidateAfterDecodingSSZ() error {
  function DecodeDepositRequests (line 57) | func DecodeDepositRequests(data []byte) (DepositRequests, error) {

FILE: consensus-types/types/deposit_request_test.go
  function TestDepositRequest_ValidValuesSSZ (line 36) | func TestDepositRequest_ValidValuesSSZ(t *testing.T) {
  function TestDepositRequest_InvalidValuesUnmarshalSSZ (line 207) | func TestDepositRequest_InvalidValuesUnmarshalSSZ(t *testing.T) {
  function TestDepositRequests_ValidValuesSSZ (line 278) | func TestDepositRequests_ValidValuesSSZ(t *testing.T) {
  constant depositRequestsSSZHex (line 344) | depositRequestsSSZHex = "0x706b00000000000000000000000000000000000000000...
  function TestUnmarshalItems_OK (line 353) | func TestUnmarshalItems_OK(t *testing.T) {
  function TestMarshalItems_OK (line 381) | func TestMarshalItems_OK(t *testing.T) {

FILE: consensus-types/types/deposit_test.go
  function generateValidDeposit (line 38) | func generateValidDeposit() *types.Deposit {
  function TestDeposit_Equals (line 54) | func TestDeposit_Equals(t *testing.T) {
  function TestDeposit_MarshalUnmarshalSSZ (line 95) | func TestDeposit_MarshalUnmarshalSSZ(t *testing.T) {
  function TestDeposit_MarshalSSZTo (line 110) | func TestDeposit_MarshalSSZTo(t *testing.T) {
  function TestDeposit_HashTreeRoot (line 119) | func TestDeposit_HashTreeRoot(t *testing.T) {
  function TestDeposit_SizeSSZ (line 127) | func TestDeposit_SizeSSZ(t *testing.T) {
  function TestDeposit_HashTreeRootWith (line 134) | func TestDeposit_HashTreeRootWith(t *testing.T) {
  function TestDeposit_GetTree (line 144) | func TestDeposit_GetTree(t *testing.T) {
  function TestDeposit_UnmarshalSSZ_ErrSize (line 151) | func TestDeposit_UnmarshalSSZ_ErrSize(t *testing.T) {
  function TestDeposit_VerifySignature (line 161) | func TestDeposit_VerifySignature(t *testing.T) {
  function TestDeposit_Getters (line 182) | func TestDeposit_Getters(t *testing.T) {

FILE: consensus-types/types/deposits.go
  type Deposits (line 31) | type Deposits
    method SizeSSZ (line 38) | func (ds Deposits) SizeSSZ(siz *ssz.Sizer, _ bool) uint32 {
    method DefineSSZ (line 44) | func (ds Deposits) DefineSSZ(c *ssz.Codec) {
    method HashTreeRoot (line 57) | func (ds Deposits) HashTreeRoot() common.Root {

FILE: consensus-types/types/eth1data.go
  constant Eth1DataSize (line 33) | Eth1DataSize = 72
  type Eth1Data (line 40) | type Eth1Data struct
    method SizeSSZ (line 68) | func (*Eth1Data) SizeSSZ(*ssz.Sizer) uint32 {
    method DefineSSZ (line 73) | func (e *Eth1Data) DefineSSZ(codec *ssz.Codec) {
    method HashTreeRoot (line 80) | func (e *Eth1Data) HashTreeRoot() common.Root {
    method MarshalSSZ (line 85) | func (e *Eth1Data) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 90) | func (*Eth1Data) ValidateAfterDecodingSSZ() error { return nil }
    method MarshalSSZTo (line 93) | func (e *Eth1Data) MarshalSSZTo(dst []byte) ([]byte, error) {
    method HashTreeRootWith (line 106) | func (e *Eth1Data) HashTreeRootWith(hh fastssz.HashWalker) error {
    method GetTree (line 123) | func (e *Eth1Data) GetTree() (*fastssz.Node, error) {
    method GetDepositCount (line 128) | func (e *Eth1Data) GetDepositCount() math.U64 {
  function NewEth1Data (line 53) | func NewEth1Data(depositRoot common.Root) *Eth1Data {
  function NewEmptyEth1Data (line 59) | func NewEmptyEth1Data() *Eth1Data {

FILE: consensus-types/types/eth1data_test.go
  function TestEth1Data_Serialization (line 34) | func TestEth1Data_Serialization(t *testing.T) {
  function TestEth1Data_UnmarshalError (line 54) | func TestEth1Data_UnmarshalError(t *testing.T) {
  function TestEth1Data_SizeSSZ (line 62) | func TestEth1Data_SizeSSZ(t *testing.T) {
  function TestEth1Data_HashTreeRoot (line 69) | func TestEth1Data_HashTreeRoot(t *testing.T) {
  function TestEth1Data_GetTree (line 78) | func TestEth1Data_GetTree(t *testing.T) {
  function TestEth1Data_GetDepositCount (line 87) | func TestEth1Data_GetDepositCount(t *testing.T) {

FILE: consensus-types/types/execution_requests.go
  constant dynamicFieldsInExecutionRequests (line 36) | dynamicFieldsInExecutionRequests = 3
  type ExecutionRequests (line 47) | type ExecutionRequests struct
    method ValidateAfterDecodingSSZ (line 53) | func (e *ExecutionRequests) ValidateAfterDecodingSSZ() error {
    method DefineSSZ (line 153) | func (e *ExecutionRequests) DefineSSZ(codec *ssz.Codec) {
    method SizeSSZ (line 163) | func (e *ExecutionRequests) SizeSSZ(siz *ssz.Sizer, fixed bool) uint32 {
    method MarshalSSZ (line 174) | func (e *ExecutionRequests) MarshalSSZ() ([]byte, error) {
    method HashTreeRoot (line 180) | func (e *ExecutionRequests) HashTreeRoot() common.Root {
  function GetExecutionRequestsList (line 63) | func GetExecutionRequestsList(er *ExecutionRequests) ([]EncodedExecution...
  function DecodeExecutionRequests (line 103) | func DecodeExecutionRequests(encodedRequests [][]byte) (*ExecutionReques...

FILE: consensus-types/types/execution_requests_test.go
  function TestExecutionRequests_ValidValuesSSZ (line 39) | func TestExecutionRequests_ValidValuesSSZ(t *testing.T) {
  function TestExecutionRequests_InvalidValuesUnmarshalSSZ (line 251) | func TestExecutionRequests_InvalidValuesUnmarshalSSZ(t *testing.T) {
  function TestDecodeExecutionRequests (line 312) | func TestDecodeExecutionRequests(t *testing.T) {
  function TestGetExecutionRequestsList (line 514) | func TestGetExecutionRequestsList(t *testing.T) {

FILE: consensus-types/types/fork.go
  constant ForkSize (line 33) | ForkSize = 16
  type Fork (line 42) | type Fork struct
    method SizeSSZ (line 77) | func (f *Fork) SizeSSZ(*ssz.Sizer) uint32 {
    method DefineSSZ (line 82) | func (f *Fork) DefineSSZ(codec *ssz.Codec) {
    method MarshalSSZ (line 89) | func (f *Fork) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 94) | func (*Fork) ValidateAfterDecodingSSZ() error { return nil }
    method HashTreeRoot (line 97) | func (f *Fork) HashTreeRoot() common.Root {
    method MarshalSSZTo (line 106) | func (f *Fork) MarshalSSZTo(buf []byte) ([]byte, error) {
    method HashTreeRootWith (line 116) | func (f *Fork) HashTreeRootWith(hh fastssz.HashWalker) error {
    method GetTree (line 133) | func (f *Fork) GetTree() (*fastssz.Node, error) {
  function NewFork (line 56) | func NewFork(
  function NewEmptyFork (line 68) | func NewEmptyFork() *Fork {

FILE: consensus-types/types/fork_data.go
  type ForkData (line 38) | type ForkData struct
    method SizeSSZ (line 60) | func (*ForkData) SizeSSZ(*ssz.Sizer) uint32 {
    method DefineSSZ (line 66) | func (fd *ForkData) DefineSSZ(codec *ssz.Codec) {
    method HashTreeRoot (line 72) | func (fd *ForkData) HashTreeRoot() common.Root {
    method MarshalSSZTo (line 78) | func (fd *ForkData) MarshalSSZTo(buf []byte) ([]byte, error) {
    method MarshalSSZ (line 83) | func (fd *ForkData) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 88) | func (*ForkData) ValidateAfterDecodingSSZ() error { return nil }
    method ComputeDomain (line 92) | func (fd *ForkData) ComputeDomain(
    method ComputeRandaoSigningRoot (line 104) | func (fd *ForkData) ComputeRandaoSigningRoot(
  function NewForkData (line 46) | func NewForkData(

FILE: consensus-types/types/fork_data_test.go
  function TestForkData_Serialization (line 35) | func TestForkData_Serialization(t *testing.T) {
  function TestForkData_Unmarshal (line 53) | func TestForkData_Unmarshal(t *testing.T) {
  function TestForkData_SizeSSZ (line 60) | func TestForkData_SizeSSZ(t *testing.T) {
  function TestForkData_HashTreeRoot (line 71) | func TestForkData_HashTreeRoot(t *testing.T) {
  function TestForkData_ComputeDomain (line 82) | func TestForkData_ComputeDomain(t *testing.T) {
  function TestForkData_ComputeRandaoSigningRoot (line 96) | func TestForkData_ComputeRandaoSigningRoot(t *testing.T) {
  function TestNewForkData (line 111) | func TestNewForkData(t *testing.T) {
  function TestNew (line 122) | func TestNew(t *testing.T) {

FILE: consensus-types/types/fork_test.go
  function TestFork_Serialization (line 35) | func TestFork_Serialization(t *testing.T) {
  function TestFork_SizeSSZ (line 60) | func TestFork_SizeSSZ(t *testing.T) {
  function TestFork_HashTreeRoot (line 72) | func TestFork_HashTreeRoot(t *testing.T) {
  function TestFork_GetTree (line 85) | func TestFork_GetTree(t *testing.T) {
  function TestFork_UnmarshalSSZ_ErrSize (line 98) | func TestFork_UnmarshalSSZ_ErrSize(t *testing.T) {

FILE: consensus-types/types/genesis.go
  constant defaultGasLimit (line 37) | defaultGasLimit      = math.U64(30000000)
  constant defaultBaseFeePerGas (line 38) | defaultBaseFeePerGas = int64(3906250)
  type Genesis (line 43) | type Genesis struct
    method GetForkVersion (line 57) | func (g *Genesis) GetForkVersion() common.Version {
    method GetDeposits (line 62) | func (g *Genesis) GetDeposits() []*Deposit {
    method GetExecutionPayloadHeader (line 67) | func (g *Genesis) GetExecutionPayloadHeader() *ExecutionPayloadHeader {
    method UnmarshalJSON (line 72) | func (g *Genesis) UnmarshalJSON(
  function DefaultGenesis (line 97) | func DefaultGenesis(v common.Version) *Genesis {
  function DefaultGenesisExecutionPayloadHeader (line 111) | func DefaultGenesisExecutionPayloadHeader(v common.Version) (*ExecutionP...

FILE: consensus-types/types/genesis_test.go
  function TestDefaultGenesis (line 35) | func TestDefaultGenesis(t *testing.T) {
  function TestDefaultGenesisExecutionPayloadHeader (line 71) | func TestDefaultGenesisExecutionPayloadHeader(t *testing.T) {
  function TestGenesisGetForkVersion (line 80) | func TestGenesisGetForkVersion(t *testing.T) {
  function TestGenesisGetDeposits (line 89) | func TestGenesisGetDeposits(t *testing.T) {
  function TestGenesisGetExecutionPayloadHeader (line 98) | func TestGenesisGetExecutionPayloadHeader(t *testing.T) {
  function TestDefaultGenesisPanics (line 107) | func TestDefaultGenesisPanics(t *testing.T) {
  function TestGenesisUnmarshalJSON (line 116) | func TestGenesisUnmarshalJSON(t *testing.T) {

FILE: consensus-types/types/header.go
  constant BeaconBlockHeaderSize (line 35) | BeaconBlockHeaderSize = 112
  type BeaconBlockHeader (line 43) | type BeaconBlockHeader struct
    method SizeSSZ (line 86) | func (b *BeaconBlockHeader) SizeSSZ(*ssz.Sizer) uint32 {
    method DefineSSZ (line 91) | func (b *BeaconBlockHeader) DefineSSZ(codec *ssz.Codec) {
    method MarshalSSZ (line 100) | func (b *BeaconBlockHeader) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 105) | func (*BeaconBlockHeader) ValidateAfterDecodingSSZ() error { return nil }
    method HashTreeRoot (line 108) | func (b *BeaconBlockHeader) HashTreeRoot() common.Root {
    method MarshalSSZTo (line 117) | func (b *BeaconBlockHeader) MarshalSSZTo(dst []byte) ([]byte, error) {
    method HashTreeRootWith (line 127) | func (b *BeaconBlockHeader) HashTreeRootWith(
    method GetTree (line 152) | func (b *BeaconBlockHeader) GetTree() (*fastssz.Node, error) {
    method Equals (line 161) | func (b *BeaconBlockHeader) Equals(rhs *BeaconBlockHeader) bool {
    method GetSlot (line 177) | func (b *BeaconBlockHeader) GetSlot() math.Slot {
    method SetSlot (line 182) | func (b *BeaconBlockHeader) SetSlot(slot math.Slot) {
    method GetProposerIndex (line 187) | func (b *BeaconBlockHeader) GetProposerIndex() math.ValidatorIndex {
    method SetProposerIndex (line 192) | func (b *BeaconBlockHeader) SetProposerIndex(
    method GetParentBlockRoot (line 199) | func (b *BeaconBlockHeader) GetParentBlockRoot() common.Root {
    method SetParentBlockRoot (line 204) | func (b *BeaconBlockHeader) SetParentBlockRoot(parentBlockRoot common....
    method GetStateRoot (line 209) | func (b *BeaconBlockHeader) GetStateRoot() common.Root {
    method SetStateRoot (line 214) | func (b *BeaconBlockHeader) SetStateRoot(stateRoot common.Root) {
    method GetBodyRoot (line 219) | func (b *BeaconBlockHeader) GetBodyRoot() common.Root {
    method SetBodyRoot (line 224) | func (b *BeaconBlockHeader) SetBodyRoot(bodyRoot common.Root) {
  function NewBeaconBlockHeader (line 61) | func NewBeaconBlockHeader(
  function NewEmptyBeaconBlockHeader (line 77) | func NewEmptyBeaconBlockHeader() *BeaconBlockHeader {

FILE: consensus-types/types/header_test.go
  function TestBeaconBlockHeader_Equals (line 35) | func TestBeaconBlockHeader_Equals(t *testing.T) {
  function TestBeaconBlockHeader_Serialization (line 117) | func TestBeaconBlockHeader_Serialization(t *testing.T) {
  function TestBeaconBlockHeader_SizeSSZ (line 144) | func TestBeaconBlockHeader_SizeSSZ(t *testing.T) {
  function TestBeaconBlockHeader_HashTreeRoot (line 158) | func TestBeaconBlockHeader_HashTreeRoot(t *testing.T) {
  function TestBeaconBlockHeader_GetTree (line 171) | func TestBeaconBlockHeader_GetTree(t *testing.T) {
  function TestBeaconBlockHeader_SetStateRoot (line 187) | func TestBeaconBlockHeader_SetStateRoot(t *testing.T) {
  function TestBeaconBlockHeader_SetSlot (line 203) | func TestBeaconBlockHeader_SetSlot(t *testing.T) {
  function TestBeaconBlockHeader_SetProposerIndex (line 219) | func TestBeaconBlockHeader_SetProposerIndex(t *testing.T) {
  function TestBeaconBlockHeader_SetParentBlockRoot (line 234) | func TestBeaconBlockHeader_SetParentBlockRoot(t *testing.T) {
  function TestBeaconBlockHeader_SetBodyRoot (line 250) | func TestBeaconBlockHeader_SetBodyRoot(t *testing.T) {
  function TestBeaconBlockHeader_UnmarshalSSZ_ErrSize (line 266) | func TestBeaconBlockHeader_UnmarshalSSZ_ErrSize(t *testing.T) {

FILE: consensus-types/types/interfaces.go
  type ProposerDomain (line 25) | type ProposerDomain interface

FILE: consensus-types/types/mocks/blobs_bundle.mock.go
  type BlobsBundle (line 13) | type BlobsBundle struct
    method EXPECT (line 21) | func (_m *BlobsBundle) EXPECT() *BlobsBundle_Expecter {
    method GetBlobs (line 26) | func (_m *BlobsBundle) GetBlobs() []*eip4844.Blob {
    method GetCommitments (line 73) | func (_m *BlobsBundle) GetCommitments() []eip4844.KZGCommitment {
    method GetProofs (line 120) | func (_m *BlobsBundle) GetProofs() []bytes.B48 {
  type BlobsBundle_Expecter (line 17) | type BlobsBundle_Expecter struct
    method GetBlobs (line 51) | func (_e *BlobsBundle_Expecter) GetBlobs() *BlobsBundle_GetBlobs_Call {
    method GetCommitments (line 98) | func (_e *BlobsBundle_Expecter) GetCommitments() *BlobsBundle_GetCommi...
    method GetProofs (line 145) | func (_e *BlobsBundle_Expecter) GetProofs() *BlobsBundle_GetProofs_Call {
  type BlobsBundle_GetBlobs_Call (line 46) | type BlobsBundle_GetBlobs_Call struct
    method Run (line 55) | func (_c *BlobsBundle_GetBlobs_Call) Run(run func()) *BlobsBundle_GetB...
    method Return (line 62) | func (_c *BlobsBundle_GetBlobs_Call) Return(_a0 []*eip4844.Blob) *Blob...
    method RunAndReturn (line 67) | func (_c *BlobsBundle_GetBlobs_Call) RunAndReturn(run func() []*eip484...
  type BlobsBundle_GetCommitments_Call (line 93) | type BlobsBundle_GetCommitments_Call struct
    method Run (line 102) | func (_c *BlobsBundle_GetCommitments_Call) Run(run func()) *BlobsBundl...
    method Return (line 109) | func (_c *BlobsBundle_GetCommitments_Call) Return(_a0 []eip4844.KZGCom...
    method RunAndReturn (line 114) | func (_c *BlobsBundle_GetCommitments_Call) RunAndReturn(run func() []e...
  type BlobsBundle_GetProofs_Call (line 140) | type BlobsBundle_GetProofs_Call struct
    method Run (line 149) | func (_c *BlobsBundle_GetProofs_Call) Run(run func()) *BlobsBundle_Get...
    method Return (line 156) | func (_c *BlobsBundle_GetProofs_Call) Return(_a0 []bytes.B48) *BlobsBu...
    method RunAndReturn (line 161) | func (_c *BlobsBundle_GetProofs_Call) RunAndReturn(run func() []bytes....
  function NewBlobsBundle (line 168) | func NewBlobsBundle(t interface {

FILE: consensus-types/types/mocks/built_execution_payload_env.mock.go
  type BuiltExecutionPayloadEnv (line 13) | type BuiltExecutionPayloadEnv struct
    method EXPECT (line 21) | func (_m *BuiltExecutionPayloadEnv) EXPECT() *BuiltExecutionPayloadEnv...
    method GetBlobsBundle (line 26) | func (_m *BuiltExecutionPayloadEnv) GetBlobsBundle() engineprimitives....
    method GetBlockValue (line 73) | func (_m *BuiltExecutionPayloadEnv) GetBlockValue() *math.U256 {
    method GetEncodedExecutionRequests (line 120) | func (_m *BuiltExecutionPayloadEnv) GetEncodedExecutionRequests() []ty...
    method GetExecutionPayload (line 167) | func (_m *BuiltExecutionPayloadEnv) GetExecutionPayload() *types.Execu...
    method ShouldOverrideBuilder (line 214) | func (_m *BuiltExecutionPayloadEnv) ShouldOverrideBuilder() bool {
  type BuiltExecutionPayloadEnv_Expecter (line 17) | type BuiltExecutionPayloadEnv_Expecter struct
    method GetBlobsBundle (line 51) | func (_e *BuiltExecutionPayloadEnv_Expecter) GetBlobsBundle() *BuiltEx...
    method GetBlockValue (line 98) | func (_e *BuiltExecutionPayloadEnv_Expecter) GetBlockValue() *BuiltExe...
    method GetEncodedExecutionRequests (line 145) | func (_e *BuiltExecutionPayloadEnv_Expecter) GetEncodedExecutionReques...
    method GetExecutionPayload (line 192) | func (_e *BuiltExecutionPayloadEnv_Expecter) GetExecutionPayload() *Bu...
    method ShouldOverrideBuilder (line 237) | func (_e *BuiltExecutionPayloadEnv_Expecter) ShouldOverrideBuilder() *...
  type BuiltExecutionPayloadEnv_GetBlobsBundle_Call (line 46) | type BuiltExecutionPayloadEnv_GetBlobsBundle_Call struct
    method Run (line 55) | func (_c *BuiltExecutionPayloadEnv_GetBlobsBundle_Call) Run(run func()...
    method Return (line 62) | func (_c *BuiltExecutionPayloadEnv_GetBlobsBundle_Call) Return(_a0 eng...
    method RunAndReturn (line 67) | func (_c *BuiltExecutionPayloadEnv_GetBlobsBundle_Call) RunAndReturn(r...
  type BuiltExecutionPayloadEnv_GetBlockValue_Call (line 93) | type BuiltExecutionPayloadEnv_GetBlockValue_Call struct
    method Run (line 102) | func (_c *BuiltExecutionPayloadEnv_GetBlockValue_Call) Run(run func())...
    method Return (line 109) | func (_c *BuiltExecutionPayloadEnv_GetBlockValue_Call) Return(_a0 *mat...
    method RunAndReturn (line 114) | func (_c *BuiltExecutionPayloadEnv_GetBlockValue_Call) RunAndReturn(ru...
  type BuiltExecutionPayloadEnv_GetEncodedExecutionRequests_Call (line 140) | type BuiltExecutionPayloadEnv_GetEncodedExecutionRequests_Call struct
    method Run (line 149) | func (_c *BuiltExecutionPayloadEnv_GetEncodedExecutionRequests_Call) R...
    method Return (line 156) | func (_c *BuiltExecutionPayloadEnv_GetEncodedExecutionRequests_Call) R...
    method RunAndReturn (line 161) | func (_c *BuiltExecutionPayloadEnv_GetEncodedExecutionRequests_Call) R...
  type BuiltExecutionPayloadEnv_GetExecutionPayload_Call (line 187) | type BuiltExecutionPayloadEnv_GetExecutionPayload_Call struct
    method Run (line 196) | func (_c *BuiltExecutionPayloadEnv_GetExecutionPayload_Call) Run(run f...
    method Return (line 203) | func (_c *BuiltExecutionPayloadEnv_GetExecutionPayload_Call) Return(_a...
    method RunAndReturn (line 208) | func (_c *BuiltExecutionPayloadEnv_GetExecutionPayload_Call) RunAndRet...
  type BuiltExecutionPayloadEnv_ShouldOverrideBuilder_Call (line 232) | type BuiltExecutionPayloadEnv_ShouldOverrideBuilder_Call struct
    method Run (line 241) | func (_c *BuiltExecutionPayloadEnv_ShouldOverrideBuilder_Call) Run(run...
    method Return (line 248) | func (_c *BuiltExecutionPayloadEnv_ShouldOverrideBuilder_Call) Return(...
    method RunAndReturn (line 253) | func (_c *BuiltExecutionPayloadEnv_ShouldOverrideBuilder_Call) RunAndR...
  function NewBuiltExecutionPayloadEnv (line 260) | func NewBuiltExecutionPayloadEnv(t interface {

FILE: consensus-types/types/mocks/new_payload_request.mock.go
  type NewPayloadRequest (line 13) | type NewPayloadRequest struct
    method EXPECT (line 21) | func (_m *NewPayloadRequest) EXPECT() *NewPayloadRequest_Expecter {
    method GetEncodedExecutionRequests (line 26) | func (_m *NewPayloadRequest) GetEncodedExecutionRequests() ([]types.En...
    method GetExecutionPayload (line 83) | func (_m *NewPayloadRequest) GetExecutionPayload() *types.ExecutionPay...
    method GetForkVersion (line 130) | func (_m *NewPayloadRequest) GetForkVersion() common.Version {
    method GetParentBeaconBlockRoot (line 177) | func (_m *NewPayloadRequest) GetParentBeaconBlockRoot() common.Root {
    method GetParentProposerPubkey (line 224) | func (_m *NewPayloadRequest) GetParentProposerPubkey() *crypto.BLSPubk...
    method GetVersionedHashes (line 271) | func (_m *NewPayloadRequest) GetVersionedHashes() []common.ExecutionHa...
    method HasValidVersionedAndBlockHashes (line 318) | func (_m *NewPayloadRequest) HasValidVersionedAndBlockHashes() error {
  type NewPayloadRequest_Expecter (line 17) | type NewPayloadRequest_Expecter struct
    method GetEncodedExecutionRequests (line 61) | func (_e *NewPayloadRequest_Expecter) GetEncodedExecutionRequests() *N...
    method GetExecutionPayload (line 108) | func (_e *NewPayloadRequest_Expecter) GetExecutionPayload() *NewPayloa...
    method GetForkVersion (line 155) | func (_e *NewPayloadRequest_Expecter) GetForkVersion() *NewPayloadRequ...
    method GetParentBeaconBlockRoot (line 202) | func (_e *NewPayloadRequest_Expecter) GetParentBeaconBlockRoot() *NewP...
    method GetParentProposerPubkey (line 249) | func (_e *NewPayloadRequest_Expecter) GetParentProposerPubkey() *NewPa...
    method GetVersionedHashes (line 296) | func (_e *NewPayloadRequest_Expecter) GetVersionedHashes() *NewPayload...
    method HasValidVersionedAndBlockHashes (line 341) | func (_e *NewPayloadRequest_Expecter) HasValidVersionedAndBlockHashes(...
  type NewPayloadRequest_GetEncodedExecutionRequests_Call (line 56) | type NewPayloadRequest_GetEncodedExecutionRequests_Call struct
    method Run (line 65) | func (_c *NewPayloadRequest_GetEncodedExecutionRequests_Call) Run(run ...
    method Return (line 72) | func (_c *NewPayloadRequest_GetEncodedExecutionRequests_Call) Return(_...
    method RunAndReturn (line 77) | func (_c *NewPayloadRequest_GetEncodedExecutionRequests_Call) RunAndRe...
  type NewPayloadRequest_GetExecutionPayload_Call (line 103) | type NewPayloadRequest_GetExecutionPayload_Call struct
    method Run (line 112) | func (_c *NewPayloadRequest_GetExecutionPayload_Call) Run(run func()) ...
    method Return (line 119) | func (_c *NewPayloadRequest_GetExecutionPayload_Call) Return(_a0 *type...
    method RunAndReturn (line 124) | func (_c *NewPayloadRequest_GetExecutionPayload_Call) RunAndReturn(run...
  type NewPayloadRequest_GetForkVersion_Call (line 150) | type NewPayloadRequest_GetForkVersion_Call struct
    method Run (line 159) | func (_c *NewPayloadRequest_GetForkVersion_Call) Run(run func()) *NewP...
    method Return (line 166) | func (_c *NewPayloadRequest_GetForkVersion_Call) Return(_a0 common.Ver...
    method RunAndReturn (line 171) | func (_c *NewPayloadRequest_GetForkVersion_Call) RunAndReturn(run func...
  type NewPayloadRequest_GetParentBeaconBlockRoot_Call (line 197) | type NewPayloadRequest_GetParentBeaconBlockRoot_Call struct
    method Run (line 206) | func (_c *NewPayloadRequest_GetParentBeaconBlockRoot_Call) Run(run fun...
    method Return (line 213) | func (_c *NewPayloadRequest_GetParentBeaconBlockRoot_Call) Return(_a0 ...
    method RunAndReturn (line 218) | func (_c *NewPayloadRequest_GetParentBeaconBlockRoot_Call) RunAndRetur...
  type NewPayloadRequest_GetParentProposerPubkey_Call (line 244) | type NewPayloadRequest_GetParentProposerPubkey_Call struct
    method Run (line 253) | func (_c *NewPayloadRequest_GetParentProposerPubkey_Call) Run(run func...
    method Return (line 260) | func (_c *NewPayloadRequest_GetParentProposerPubkey_Call) Return(_a0 *...
    method RunAndReturn (line 265) | func (_c *NewPayloadRequest_GetParentProposerPubkey_Call) RunAndReturn...
  type NewPayloadRequest_GetVersionedHashes_Call (line 291) | type NewPayloadRequest_GetVersionedHashes_Call struct
    method Run (line 300) | func (_c *NewPayloadRequest_GetVersionedHashes_Call) Run(run func()) *...
    method Return (line 307) | func (_c *NewPayloadRequest_GetVersionedHashes_Call) Return(_a0 []comm...
    method RunAndReturn (line 312) | func (_c *NewPayloadRequest_GetVersionedHashes_Call) RunAndReturn(run ...
  type NewPayloadRequest_HasValidVersionedAndBlockHashes_Call (line 336) | type NewPayloadRequest_HasValidVersionedAndBlockHashes_Call struct
    method Run (line 345) | func (_c *NewPayloadRequest_HasValidVersionedAndBlockHashes_Call) Run(...
    method Return (line 352) | func (_c *NewPayloadRequest_HasValidVersionedAndBlockHashes_Call) Retu...
    method RunAndReturn (line 357) | func (_c *NewPayloadRequest_HasValidVersionedAndBlockHashes_Call) RunA...
  function NewNewPayloadRequest (line 364) | func NewNewPayloadRequest(t interface {

FILE: consensus-types/types/mocks/proposer_domain.mock.go
  type ProposerDomain (line 11) | type ProposerDomain struct
    method EXPECT (line 19) | func (_m *ProposerDomain) EXPECT() *ProposerDomain_Expecter {
    method DomainTypeProposer (line 24) | func (_m *ProposerDomain) DomainTypeProposer() common.DomainType {
  type ProposerDomain_Expecter (line 15) | type ProposerDomain_Expecter struct
    method DomainTypeProposer (line 49) | func (_e *ProposerDomain_Expecter) DomainTypeProposer() *ProposerDomai...
  type ProposerDomain_DomainTypeProposer_Call (line 44) | type ProposerDomain_DomainTypeProposer_Call struct
    method Run (line 53) | func (_c *ProposerDomain_DomainTypeProposer_Call) Run(run func()) *Pro...
    method Return (line 60) | func (_c *ProposerDomain_DomainTypeProposer_Call) Return(_a0 common.Do...
    method RunAndReturn (line 65) | func (_c *ProposerDomain_DomainTypeProposer_Call) RunAndReturn(run fun...
  function NewProposerDomain (line 72) | func NewProposerDomain(t interface {

FILE: consensus-types/types/mocks/unused_enforcer.mock.go
  type UnusedEnforcer (line 8) | type UnusedEnforcer struct
    method EXPECT (line 16) | func (_m *UnusedEnforcer) EXPECT() *UnusedEnforcer_Expecter {
    method EnforceUnused (line 21) | func (_m *UnusedEnforcer) EnforceUnused() error {
  type UnusedEnforcer_Expecter (line 12) | type UnusedEnforcer_Expecter struct
    method EnforceUnused (line 44) | func (_e *UnusedEnforcer_Expecter) EnforceUnused() *UnusedEnforcer_Enf...
  type UnusedEnforcer_EnforceUnused_Call (line 39) | type UnusedEnforcer_EnforceUnused_Call struct
    method Run (line 48) | func (_c *UnusedEnforcer_EnforceUnused_Call) Run(run func()) *UnusedEn...
    method Return (line 55) | func (_c *UnusedEnforcer_EnforceUnused_Call) Return(_a0 error) *Unused...
    method RunAndReturn (line 60) | func (_c *UnusedEnforcer_EnforceUnused_Call) RunAndReturn(run func() e...
  function NewUnusedEnforcer (line 67) | func NewUnusedEnforcer(t interface {

FILE: consensus-types/types/payload.go
  constant ExecutionPayloadStaticSize (line 39) | ExecutionPayloadStaticSize uint32 = 528
  constant ExtraDataSize (line 42) | ExtraDataSize = 32
  type ExecutionPayload (line 52) | type ExecutionPayload struct
    method SizeSSZ (line 110) | func (p *ExecutionPayload) SizeSSZ(siz *ssz.Sizer, fixed bool) uint32 {
    method DefineSSZ (line 124) | func (p *ExecutionPayload) DefineSSZ(codec *ssz.Codec) {
    method MarshalSSZ (line 166) | func (p *ExecutionPayload) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 171) | func (p *ExecutionPayload) ValidateAfterDecodingSSZ() error {
    method HashTreeRoot (line 180) | func (p *ExecutionPayload) HashTreeRoot() common.Root {
    method MarshalSSZTo (line 189) | func (p *ExecutionPayload) MarshalSSZTo(dst []byte) ([]byte, error) {
    method HashTreeRootWith (line 201) | func (p *ExecutionPayload) HashTreeRootWith(hh fastssz.HashWalker) err...
    method GetTree (line 302) | func (p *ExecutionPayload) GetTree() (*fastssz.Node, error) {
    method MarshalJSON (line 311) | func (p ExecutionPayload) MarshalJSON() ([]byte, error) {
    method UnmarshalJSON (line 358) | func (p *ExecutionPayload) UnmarshalJSON(input []byte) error {
    method IsBlinded (line 486) | func (p *ExecutionPayload) IsBlinded() bool {
    method GetParentHash (line 491) | func (p *ExecutionPayload) GetParentHash() common.ExecutionHash {
    method GetFeeRecipient (line 496) | func (p *ExecutionPayload) GetFeeRecipient() common.ExecutionAddress {
    method GetStateRoot (line 501) | func (p *ExecutionPayload) GetStateRoot() common.Bytes32 {
    method GetReceiptsRoot (line 506) | func (p *ExecutionPayload) GetReceiptsRoot() common.Bytes32 {
    method GetLogsBloom (line 511) | func (p *ExecutionPayload) GetLogsBloom() bytes.B256 {
    method GetPrevRandao (line 516) | func (p *ExecutionPayload) GetPrevRandao() common.Bytes32 {
    method GetNumber (line 521) | func (p *ExecutionPayload) GetNumber() math.U64 {
    method GetGasLimit (line 526) | func (p *ExecutionPayload) GetGasLimit() math.U64 {
    method GetGasUsed (line 531) | func (p *ExecutionPayload) GetGasUsed() math.U64 {
    method GetTimestamp (line 536) | func (p *ExecutionPayload) GetTimestamp() math.U64 {
    method GetExtraData (line 541) | func (p *ExecutionPayload) GetExtraData() []byte {
    method GetBaseFeePerGas (line 546) | func (p *ExecutionPayload) GetBaseFeePerGas() *math.U256 {
    method GetBlockHash (line 551) | func (p *ExecutionPayload) GetBlockHash() common.ExecutionHash {
    method GetTransactions (line 556) | func (p *ExecutionPayload) GetTransactions() engineprimitives.Transact...
    method GetWithdrawals (line 561) | func (p *ExecutionPayload) GetWithdrawals() engineprimitives.Withdrawa...
    method GetBlobGasUsed (line 566) | func (p *ExecutionPayload) GetBlobGasUsed() math.U64 {
    method GetExcessBlobGas (line 571) | func (p *ExecutionPayload) GetExcessBlobGas() math.U64 {
    method ToHeader (line 576) | func (p *ExecutionPayload) ToHeader() (*ExecutionPayloadHeader, error) {
  function NewEmptyExecutionPayloadWithVersion (line 91) | func NewEmptyExecutionPayloadWithVersion(forkVersion common.Version) *Ex...

FILE: consensus-types/types/payload_env.go
  type BuiltExecutionPayloadEnv (line 32) | type BuiltExecutionPayloadEnv interface
  type executionPayloadEnvelope (line 47) | type executionPayloadEnvelope struct
  function NewEmptyExecutionPayloadEnvelope (line 57) | func NewEmptyExecutionPayloadEnvelope[
  function NewExecutionPayloadEnvelope (line 65) | func NewExecutionPayloadEnvelope[
  method GetExecutionPayload (line 81) | func (e *executionPayloadEnvelope[BlobsBundleT]) GetExecutionPayload() *...
  method GetBlockValue (line 86) | func (e *executionPayloadEnvelope[BlobsBundleT]) GetBlockValue() *math.U...
  method GetBlobsBundle (line 91) | func (e *executionPayloadEnvelope[BlobsBundleT]) GetBlobsBundle() engine...
  method GetEncodedExecutionRequests (line 96) | func (e *executionPayloadEnvelope[BlobsBundleT]) GetEncodedExecutionRequ...
  method ShouldOverrideBuilder (line 101) | func (e *executionPayloadEnvelope[BlobsBundleT]) ShouldOverrideBuilder()...

FILE: consensus-types/types/payload_header.go
  constant ExecutionPayloadHeaderStaticSize (line 35) | ExecutionPayloadHeaderStaticSize uint32 = 584
  type ExecutionPayloadHeader (line 44) | type ExecutionPayloadHeader struct
    method SizeSSZ (line 104) | func (h *ExecutionPayloadHeader) SizeSSZ(siz *ssz.Sizer, fixed bool) u...
    method DefineSSZ (line 115) | func (h *ExecutionPayloadHeader) DefineSSZ(codec *ssz.Codec) {
    method MarshalSSZ (line 143) | func (h *ExecutionPayloadHeader) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 148) | func (*ExecutionPayloadHeader) ValidateAfterDecodingSSZ() error { retu...
    method HashTreeRoot (line 151) | func (h *ExecutionPayloadHeader) HashTreeRoot() common.Root {
    method MarshalSSZTo (line 161) | func (h *ExecutionPayloadHeader) MarshalSSZTo(dst []byte) ([]byte, err...
    method HashTreeRootWith (line 174) | func (h *ExecutionPayloadHeader) HashTreeRootWith(hh fastssz.HashWalke...
    method GetTree (line 252) | func (h *ExecutionPayloadHeader) GetTree() (*fastssz.Node, error) {
    method MarshalJSON (line 261) | func (h ExecutionPayloadHeader) MarshalJSON() ([]byte, error) {
    method UnmarshalJSON (line 305) | func (h *ExecutionPayloadHeader) UnmarshalJSON(input []byte) error {
    method GetParentHash (line 437) | func (h *ExecutionPayloadHeader) GetParentHash() common.ExecutionHash {
    method GetFeeRecipient (line 442) | func (h *ExecutionPayloadHeader) GetFeeRecipient() common.ExecutionAdd...
    method GetStateRoot (line 447) | func (h *ExecutionPayloadHeader) GetStateRoot() common.Bytes32 {
    method GetReceiptsRoot (line 452) | func (h *ExecutionPayloadHeader) GetReceiptsRoot() common.Bytes32 {
    method GetLogsBloom (line 457) | func (h *ExecutionPayloadHeader) GetLogsBloom() bytes.B256 {
    method GetPrevRandao (line 463) | func (h *ExecutionPayloadHeader) GetPrevRandao() common.Bytes32 {
    method GetNumber (line 468) | func (h *ExecutionPayloadHeader) GetNumber() math.U64 {
    method GetGasLimit (line 473) | func (h *ExecutionPayloadHeader) GetGasLimit() math.U64 {
    method GetGasUsed (line 478) | func (h *ExecutionPayloadHeader) GetGasUsed() math.U64 {
    method GetTimestamp (line 483) | func (h *ExecutionPayloadHeader) GetTimestamp() math.U64 {
    method GetExtraData (line 488) | func (h *ExecutionPayloadHeader) GetExtraData() []byte {
    method GetBaseFeePerGas (line 494) | func (h *ExecutionPayloadHeader) GetBaseFeePerGas() *math.U256 {
    method GetBlockHash (line 499) | func (h *ExecutionPayloadHeader) GetBlockHash() common.ExecutionHash {
    method GetTransactionsRoot (line 505) | func (h *ExecutionPayloadHeader) GetTransactionsRoot() common.Root {
    method GetWithdrawalsRoot (line 511) | func (h *ExecutionPayloadHeader) GetWithdrawalsRoot() common.Root {
    method GetBlobGasUsed (line 516) | func (h *ExecutionPayloadHeader) GetBlobGasUsed() math.U64 {
    method GetExcessBlobGas (line 522) | func (h *ExecutionPayloadHeader) GetExcessBlobGas() math.U64 {
  function NewEmptyExecutionPayloadHeaderWithVersion (line 91) | func NewEmptyExecutionPayloadHeaderWithVersion(version common.Version) *...

FILE: consensus-types/types/payload_header_test.go
  function generateExecutionPayloadHeader (line 41) | func generateExecutionPayloadHeader(version common.Version) *types.Execu...
  function TestExecutionPayloadHeader_Getters (line 64) | func TestExecutionPayloadHeader_Getters(t *testing.T) {
  function TestExecutionPayloadHeader_IsNil (line 94) | func TestExecutionPayloadHeader_IsNil(t *testing.T) {
  function TestExecutionPayloadHeader_Version (line 102) | func TestExecutionPayloadHeader_Version(t *testing.T) {
  function TestExecutionPayloadHeader_MarshalUnmarshalJSON (line 110) | func TestExecutionPayloadHeader_MarshalUnmarshalJSON(t *testing.T) {
  function TestExecutionPayloadHeader_Serialization (line 127) | func TestExecutionPayloadHeader_Serialization(t *testing.T) {
  function TestExecutionPayloadHeader_MarshalSSZTo (line 143) | func TestExecutionPayloadHeader_MarshalSSZTo(t *testing.T) {
  function TestExecutionPayloadHeader_NewFromSSZ_EmptyBuf (line 183) | func TestExecutionPayloadHeader_NewFromSSZ_EmptyBuf(t *testing.T) {
  function TestExecutionPayloadHeader_NewFromSSZ_Invalid (line 193) | func TestExecutionPayloadHeader_NewFromSSZ_Invalid(t *testing.T) {
  function TestExecutionPayloadHeader_NewFromSSZ_Invalid_TooSmall (line 240) | func TestExecutionPayloadHeader_NewFromSSZ_Invalid_TooSmall(t *testing.T) {
  function TestExecutionPayloadHeader_SizeSSZ (line 271) | func TestExecutionPayloadHeader_SizeSSZ(t *testing.T) {
  function TestExecutionPayloadHeader_HashTreeRoot (line 280) | func TestExecutionPayloadHeader_HashTreeRoot(t *testing.T) {
  function TestExecutionPayloadHeader_GetTree (line 290) | func TestExecutionPayloadHeader_GetTree(t *testing.T) {
  function TestExecutablePayloadHeader_UnmarshalJSON_Error (line 299) | func TestExecutablePayloadHeader_UnmarshalJSON_Error(t *testing.T) {
  function TestExecutablePayloadHeader_UnmarshalJSON_Empty (line 404) | func TestExecutablePayloadHeader_UnmarshalJSON_Empty(t *testing.T) {
  function TestExecutablePayloadHeader_HashTreeRootWith (line 411) | func TestExecutablePayloadHeader_HashTreeRootWith(t *testing.T) {
  function TestExecutionPayloadHeader_NewFromSSZ (line 442) | func TestExecutionPayloadHeader_NewFromSSZ(t *testing.T) {
  function TestExecutionPayloadHeader_NewFromJSON (line 496) | func TestExecutionPayloadHeader_NewFromJSON(t *testing.T) {

FILE: consensus-types/types/payload_requests.go
  type NewPayloadRequest (line 41) | type NewPayloadRequest interface
  type newPayloadRequest (line 51) | type newPayloadRequest struct
    method GetExecutionPayload (line 110) | func (n *newPayloadRequest) GetExecutionPayload() *ExecutionPayload {
    method GetVersionedHashes (line 114) | func (n *newPayloadRequest) GetVersionedHashes() []common.ExecutionHash {
    method GetParentBeaconBlockRoot (line 118) | func (n *newPayloadRequest) GetParentBeaconBlockRoot() common.Root {
    method GetParentProposerPubkey (line 124) | func (n *newPayloadRequest) GetParentProposerPubkey() *crypto.BLSPubkey {
    method GetEncodedExecutionRequests (line 128) | func (n *newPayloadRequest) GetEncodedExecutionRequests() ([]EncodedEx...
    method HasValidVersionedAndBlockHashes (line 146) | func (n *newPayloadRequest) HasValidVersionedAndBlockHashes() error {
  function BuildNewPayloadRequestFromFork (line 66) | func BuildNewPayloadRequestFromFork(blk *BeaconBlock, parentProposerPubk...
  function MakeEthBlock (line 202) | func MakeEthBlock(
  type ForkchoiceUpdateRequest (line 274) | type ForkchoiceUpdateRequest struct
  function BuildForkchoiceUpdateRequest (line 285) | func BuildForkchoiceUpdateRequest(
  function BuildForkchoiceUpdateRequestNoAttrs (line 300) | func BuildForkchoiceUpdateRequestNoAttrs(
  type GetPayloadRequest (line 311) | type GetPayloadRequest struct
  function BuildGetPayloadRequest (line 320) | func BuildGetPayloadRequest(

FILE: consensus-types/types/payload_requests_test.go
  function TestBuildNewPayloadRequestFromFork (line 38) | func TestBuildNewPayloadRequestFromFork(t *testing.T) {
  function TestBuildForkchoiceUpdateRequest (line 67) | func TestBuildForkchoiceUpdateRequest(t *testing.T) {
  function TestBuildGetPayloadRequest (line 96) | func TestBuildGetPayloadRequest(t *testing.T) {
  function TestHasValidVersionedAndBlockHashesPayloadError (line 108) | func TestHasValidVersionedAndBlockHashesPayloadError(t *testing.T) {
  function TestHasValidVersionedAndBlockHashesMismatchedHashes (line 143) | func TestHasValidVersionedAndBlockHashesMismatchedHashes(t *testing.T) {

FILE: consensus-types/types/payload_test.go
  function generateExecutionPayload (line 39) | func generateExecutionPayload() *types.ExecutionPayload {
  function TestExecutionPayload_Serialization (line 75) | func TestExecutionPayload_Serialization(t *testing.T) {
  function TestExecutionPayload_SizeSSZ (line 96) | func TestExecutionPayload_SizeSSZ(t *testing.T) {
  function TestExecutionPayload_HashTreeRoot (line 110) | func TestExecutionPayload_HashTreeRoot(t *testing.T) {
  function TestExecutionPayload_GetTree (line 118) | func TestExecutionPayload_GetTree(t *testing.T) {
  function TestExecutionPayload_Getters (line 126) | func TestExecutionPayload_Getters(t *testing.T) {
  function TestExecutionPayload_MarshalJSON (line 164) | func TestExecutionPayload_MarshalJSON(t *testing.T) {
  function TestExecutionPayload_MarshalJSON_ValueAndPointer (line 180) | func TestExecutionPayload_MarshalJSON_ValueAndPointer(t *testing.T) {
  function TestExecutionPayload_IsNil (line 195) | func TestExecutionPayload_IsNil(t *testing.T) {
  function TestExecutionPayload_IsBlinded (line 204) | func TestExecutionPayload_IsBlinded(t *testing.T) {
  function TestExecutionPayload_Version (line 210) | func TestExecutionPayload_Version(t *testing.T) {
  function TestExecutionPayload_ToHeader (line 216) | func TestExecutionPayload_ToHeader(t *testing.T) {
  function TestExecutionPayload_UnmarshalJSON_Error (line 262) | func TestExecutionPayload_UnmarshalJSON_Error(t *testing.T) {

FILE: consensus-types/types/pending_partial_withdrawal.go
  constant sszPendingPartialWithdrawalSize (line 39) | sszPendingPartialWithdrawalSize = 24
  type PendingPartialWithdrawal (line 56) | type PendingPartialWithdrawal struct
    method ValidateAfterDecodingSSZ (line 68) | func (p *PendingPartialWithdrawal) ValidateAfterDecodingSSZ() error {
    method DefineSSZ (line 73) | func (p *PendingPartialWithdrawal) DefineSSZ(codec *ssz.Codec) {
    method SizeSSZ (line 80) | func (p *PendingPartialWithdrawal) SizeSSZ(_ *ssz.Sizer) uint32 {
    method MarshalSSZ (line 85) | func (p *PendingPartialWithdrawal) MarshalSSZ() ([]byte, error) {
    method HashTreeRoot (line 91) | func (p *PendingPartialWithdrawal) HashTreeRoot() common.Root {
    method HashTreeRootWith (line 96) | func (p *PendingPartialWithdrawal) HashTreeRootWith(hh fastssz.HashWal...
  type PendingPartialWithdrawals (line 113) | type PendingPartialWithdrawals
    method DefineSSZ (line 121) | func (p *PendingPartialWithdrawals) DefineSSZ(codec *ssz.Codec) {
    method SizeSSZ (line 127) | func (p *PendingPartialWithdrawals) SizeSSZ(siz *ssz.Sizer, fixed bool...
    method MarshalSSZ (line 135) | func (p *PendingPartialWithdrawals) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 141) | func (p *PendingPartialWithdrawals) ValidateAfterDecodingSSZ() error {
    method PendingBalanceToWithdraw (line 153) | func (p PendingPartialWithdrawals) PendingBalanceToWithdraw(validatorI...
  function NewEmptyPendingPartialWithdrawals (line 116) | func NewEmptyPendingPartialWithdrawals() *PendingPartialWithdrawals {

FILE: consensus-types/types/pending_partial_withdrawal_test.go
  function TestPendingPartialWithdrawal_ValidValuesSSZ (line 33) | func TestPendingPartialWithdrawal_ValidValuesSSZ(t *testing.T) {
  function TestPendingPartialWithdrawal_InvalidValuesUnmarshalSSZ (line 106) | func TestPendingPartialWithdrawal_InvalidValuesUnmarshalSSZ(t *testing.T) {
  function TestPendingPartialWithdrawals_ValidValuesSSZ (line 153) | func TestPendingPartialWithdrawals_ValidValuesSSZ(t *testing.T) {
  function TestPendingPartialWithdrawals_InvalidValuesUnmarshalSSZ (line 204) | func TestPendingPartialWithdrawals_InvalidValuesUnmarshalSSZ(t *testing....

FILE: consensus-types/types/proposer_slashings.go
  type ProposerSlashings (line 41) | type ProposerSlashings
    method SizeSSZ (line 45) | func (ps ProposerSlashings) SizeSSZ(siz *ssz.Sizer, _ bool) uint32 {
    method DefineSSZ (line 50) | func (ps ProposerSlashings) DefineSSZ(c *ssz.Codec) {
    method HashTreeRoot (line 63) | func (ps ProposerSlashings) HashTreeRoot() common.Root {
    method EnforceUnused (line 70) | func (ps ProposerSlashings) EnforceUnused() error {

FILE: consensus-types/types/signed_beacon_block.go
  type SignedBeaconBlock (line 43) | type SignedBeaconBlock struct
    method SizeSSZ (line 90) | func (b *SignedBeaconBlock) SizeSSZ(siz *ssz.Sizer, fixed bool) uint32 {
    method DefineSSZ (line 100) | func (b *SignedBeaconBlock) DefineSSZ(codec *ssz.Codec) {
    method MarshalSSZ (line 109) | func (b *SignedBeaconBlock) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 114) | func (b *SignedBeaconBlock) ValidateAfterDecodingSSZ() error {
    method HashTreeRoot (line 120) | func (b *SignedBeaconBlock) HashTreeRoot() common.Root {
    method GetBeaconBlock (line 128) | func (b *SignedBeaconBlock) GetBeaconBlock() *BeaconBlock {
    method GetSignature (line 132) | func (b *SignedBeaconBlock) GetSignature() crypto.BLSSignature {
  function NewSignedBeaconBlock (line 55) | func NewSignedBeaconBlock(
  function NewEmptySignedBeaconBlockWithVersion (line 71) | func NewEmptySignedBeaconBlockWithVersion(forkVersion common.Version) (*...

FILE: consensus-types/types/signed_beacon_block_header.go
  type SignedBeaconBlockHeader (line 39) | type SignedBeaconBlockHeader struct
    method SizeSSZ (line 64) | func (b *SignedBeaconBlockHeader) SizeSSZ(sizer *ssz.Sizer) uint32 {
    method DefineSSZ (line 71) | func (b *SignedBeaconBlockHeader) DefineSSZ(codec *ssz.Codec) {
    method MarshalSSZ (line 77) | func (b *SignedBeaconBlockHeader) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 82) | func (*SignedBeaconBlockHeader) ValidateAfterDecodingSSZ() error { ret...
    method HashTreeRoot (line 86) | func (b *SignedBeaconBlockHeader) HashTreeRoot() common.Root {
    method GetHeader (line 95) | func (b *SignedBeaconBlockHeader) GetHeader() *BeaconBlockHeader {
    method GetSignature (line 100) | func (b *SignedBeaconBlockHeader) GetSignature() crypto.BLSSignature {
  function NewSignedBeaconBlockHeader (line 49) | func NewSignedBeaconBlockHeader(

FILE: consensus-types/types/signed_beacon_block_header_test.go
  function TestSignedBeaconBlockHeader_Serialization (line 35) | func TestSignedBeaconBlockHeader_Serialization(t *testing.T) {
  function TestSignedBeaconBlockHeader_EmptySerialization (line 67) | func TestSignedBeaconBlockHeader_EmptySerialization(t *testing.T) {
  function TestSignedBeaconBlockHeader_SizeSSZ (line 90) | func TestSignedBeaconBlockHeader_SizeSSZ(t *testing.T) {
  function TestSignedBeaconBlockHeader_HashTreeRoot (line 107) | func TestSignedBeaconBlockHeader_HashTreeRoot(t *testing.T) {

FILE: consensus-types/types/signed_beacon_block_test.go
  function runForAllSupportedVersions (line 44) | func runForAllSupportedVersions(t *testing.T, testFunc func(t *testing.T...
  function generateFakeSignedBeaconBlock (line 55) | func generateFakeSignedBeaconBlock(t *testing.T, version common.Version)...
  function generatePrivKey (line 63) | func generatePrivKey() (cmtcrypto.PrivKey, error) {
  function generateSigningRoot (line 71) | func generateSigningRoot(blk *types.BeaconBlock) (common.Root, error) {
  function generateRealSignedBeaconBlock (line 81) | func generateRealSignedBeaconBlock(t *testing.T, blsSigner crypto.BLSSig...
  function TestNewSignedBeaconBlockFromSSZ (line 101) | func TestNewSignedBeaconBlockFromSSZ(t *testing.T) {
  function TestNewSignedBeaconBlockFromSSZForkVersionNotSupported (line 118) | func TestNewSignedBeaconBlockFromSSZForkVersionNotSupported(t *testing.T) {
  function TestSignedBeaconBlock_HashTreeRoot (line 125) | func TestSignedBeaconBlock_HashTreeRoot(t *testing.T) {
  function TestSignedBeaconBlock_SignBeaconBlock (line 135) | func TestSignedBeaconBlock_SignBeaconBlock(t *testing.T) {
  function TestSignedBeaconBlock_SizeSSZ (line 176) | func TestSignedBeaconBlock_SizeSSZ(t *testing.T) {
  function TestSignedBeaconBlock_EmptySerialization (line 185) | func TestSignedBeaconBlock_EmptySerialization(t *testing.T) {

FILE: consensus-types/types/signing_data.go
  type SigningData (line 39) | type SigningData struct
    method SizeSSZ (line 51) | func (*SigningData) SizeSSZ(_ *ssz.Sizer) uint32 {
    method DefineSSZ (line 57) | func (s *SigningData) DefineSSZ(codec *ssz.Codec) {
    method HashTreeRoot (line 63) | func (s *SigningData) HashTreeRoot() common.Root {
    method MarshalSSZTo (line 69) | func (s *SigningData) MarshalSSZTo(buf []byte) ([]byte, error) {
    method MarshalSSZ (line 74) | func (s *SigningData) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 79) | func (*SigningData) ValidateAfterDecodingSSZ() error { return nil }
  function ComputeSigningRoot (line 83) | func ComputeSigningRoot(
  function ComputeSigningRootUInt64 (line 94) | func ComputeSigningRootUInt64(

FILE: consensus-types/types/signing_data_test.go
  function generateSigningData (line 34) | func generateSigningData() *types.SigningData {
  function TestSigningData_MarshalSSZ_UnmarshalSSZ (line 44) | func TestSigningData_MarshalSSZ_UnmarshalSSZ(t *testing.T) {

FILE: consensus-types/types/slashing_info.go
  constant SlashingInfoSize (line 32) | SlashingInfoSize = 16
  type SlashingInfo (line 45) | type SlashingInfo struct
    method SizeSSZ (line 57) | func (*SlashingInfo) SizeSSZ(*ssz.Sizer) uint32 {
    method DefineSSZ (line 62) | func (s *SlashingInfo) DefineSSZ(codec *ssz.Codec) {
    method HashTreeRoot (line 68) | func (s *SlashingInfo) HashTreeRoot() common.Root {
    method MarshalSSZ (line 73) | func (s *SlashingInfo) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 78) | func (*SlashingInfo) ValidateAfterDecodingSSZ() error { return nil }
    method MarshalSSZTo (line 86) | func (s *SlashingInfo) MarshalSSZTo(dst []byte) ([]byte, error) {
    method HashTreeRootWith (line 96) | func (s *SlashingInfo) HashTreeRootWith(hh fastssz.HashWalker) error {
    method GetTree (line 110) | func (s *SlashingInfo) GetTree() (*fastssz.Node, error) {
    method GetSlot (line 119) | func (s *SlashingInfo) GetSlot() math.Slot {
    method GetIndex (line 124) | func (s *SlashingInfo) GetIndex() math.U64 {
    method SetSlot (line 129) | func (s *SlashingInfo) SetSlot(slot math.Slot) {
    method SetIndex (line 134) | func (s *SlashingInfo) SetIndex(index math.U64) {

FILE: consensus-types/types/slashing_info_test.go
  function generateSlashingInfo (line 33) | func generateSlashingInfo() *types.SlashingInfo {
  function TestSlashingInfo_MarshalSSZ_UnmarshalSSZ (line 40) | func TestSlashingInfo_MarshalSSZ_UnmarshalSSZ(t *testing.T) {
  function TestSlashingInfo_GetTree (line 101) | func TestSlashingInfo_GetTree(t *testing.T) {
  function TestSlashingInfo_SetSlot (line 114) | func TestSlashingInfo_SetSlot(t *testing.T) {
  function TestSlashingInfo_SetIndex (line 124) | func TestSlashingInfo_SetIndex(t *testing.T) {

FILE: consensus-types/types/state.go
  type BeaconState (line 34) | type BeaconState struct
    method SizeSSZ (line 83) | func (st *BeaconState) SizeSSZ(siz *ssz.Sizer, fixed bool) uint32 {
    method DefineSSZ (line 134) | func (st *BeaconState) DefineSSZ(codec *ssz.Codec) {
    method MarshalSSZ (line 185) | func (st *BeaconState) MarshalSSZ() ([]byte, error) {
    method UnmarshalSSZ (line 191) | func (st *BeaconState) UnmarshalSSZ(buf []byte) error {
    method HashTreeRoot (line 196) | func (st *BeaconState) HashTreeRoot() common.Root {
    method HashTreeRootWith (line 207) | func (st *BeaconState) HashTreeRootWith(
    method GetTree (line 367) | func (st *BeaconState) GetTree() (*fastssz.Node, error) {
  function NewEmptyBeaconStateWithVersion (line 72) | func NewEmptyBeaconStateWithVersion(version common.Version) *BeaconState {

FILE: consensus-types/types/state_test.go
  function generateValidBeaconState (line 37) | func generateValidBeaconState(forkVersion common.Version) *types.BeaconS...
  function generateRandomBytes32 (line 132) | func generateRandomBytes32(count int) []common.Bytes32 {
  function TestBeaconStateMarshalUnmarshalSSZ (line 144) | func TestBeaconStateMarshalUnmarshalSSZ(t *testing.T) {
  function TestHashTreeRoot (line 164) | func TestHashTreeRoot(t *testing.T) {
  function TestGetTree (line 174) | func TestGetTree(t *testing.T) {
  function TestBeaconState_UnmarshalSSZ_Error (line 184) | func TestBeaconState_UnmarshalSSZ_Error(t *testing.T) {
  function TestBeaconState_HashTreeRoot (line 193) | func TestBeaconState_HashTreeRoot(t *testing.T) {

FILE: consensus-types/types/sync_aggregate.go
  constant syncCommitteeSize (line 40) | syncCommitteeSize       = 512
  constant syncCommitteeBitsLength (line 41) | syncCommitteeBitsLength = syncCommitteeSize / 8
  type SyncAggregate (line 44) | type SyncAggregate struct
    method SizeSSZ (line 50) | func (s *SyncAggregate) SizeSSZ(_ *ssz.Sizer) uint32 {
    method DefineSSZ (line 55) | func (s *SyncAggregate) DefineSSZ(c *ssz.Codec) {
    method MarshalSSZ (line 61) | func (s *SyncAggregate) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 66) | func (*SyncAggregate) ValidateAfterDecodingSSZ() error { return nil }
    method HashTreeRoot (line 69) | func (s *SyncAggregate) HashTreeRoot() common.Root {
    method EnforceUnused (line 77) | func (s *SyncAggregate) EnforceUnused() error {

FILE: consensus-types/types/validator.go
  constant ValidatorSize (line 34) | ValidatorSize = 121
  type Validator (line 44) | type Validator struct
    method SizeSSZ (line 111) | func (*Validator) SizeSSZ(*ssz.Sizer) uint32 {
    method DefineSSZ (line 116) | func (v *Validator) DefineSSZ(codec *ssz.Codec) {
    method HashTreeRoot (line 128) | func (v *Validator) HashTreeRoot() common.Root {
    method MarshalSSZ (line 133) | func (v *Validator) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 138) | func (*Validator) ValidateAfterDecodingSSZ() error { return nil }
    method MarshalSSZTo (line 146) | func (v *Validator) MarshalSSZTo(dst []byte) ([]byte, error) {
    method HashTreeRootWith (line 156) | func (v *Validator) HashTreeRootWith(hh fastssz.HashWalker) error {
    method GetTree (line 188) | func (v *Validator) GetTree() (*fastssz.Node, error) {
    method GetPubkey (line 197) | func (v *Validator) GetPubkey() crypto.BLSPubkey {
    method GetEffectiveBalance (line 202) | func (v *Validator) GetEffectiveBalance() math.Gwei {
    method IsActive (line 208) | func (v Validator) IsActive(epoch math.Epoch) bool {
    method IsEligibleForActivation (line 214) | func (v Validator) IsEligibleForActivation(finalizedEpoch math.Epoch) ...
    method IsEligibleForActivationQueue (line 221) | func (v Validator) IsEligibleForActivationQueue(threshold math.Gwei) b...
    method IsSlashable (line 227) | func (v Validator) IsSlashable(epoch math.Epoch) bool {
    method IsSlashed (line 233) | func (v Validator) IsSlashed() bool {
    method IsFullyWithdrawable (line 239) | func (v Validator) IsFullyWithdrawable(
    method IsPartiallyWithdrawable (line 249) | func (v Validator) IsPartiallyWithdrawable(
    method HasEth1WithdrawalCredentials (line 259) | func (v Validator) HasEth1WithdrawalCredentials() bool {
    method HasExecutionWithdrawalCredential (line 265) | func (v Validator) HasExecutionWithdrawalCredential() bool {
    method HasMaxEffectiveBalance (line 271) | func (v Validator) HasMaxEffectiveBalance(
    method SetEffectiveBalance (line 278) | func (v *Validator) SetEffectiveBalance(balance math.Gwei) {
    method SetActivationEligibilityEpoch (line 282) | func (v *Validator) SetActivationEligibilityEpoch(e math.Epoch) {
    method GetActivationEligibilityEpoch (line 286) | func (v *Validator) GetActivationEligibilityEpoch() math.Epoch {
    method SetActivationEpoch (line 290) | func (v *Validator) SetActivationEpoch(e math.Epoch) {
    method GetActivationEpoch (line 294) | func (v *Validator) GetActivationEpoch() math.Epoch {
    method SetExitEpoch (line 298) | func (v *Validator) SetExitEpoch(e math.Epoch) {
    method GetExitEpoch (line 302) | func (v Validator) GetExitEpoch() math.Epoch {
    method SetWithdrawableEpoch (line 306) | func (v *Validator) SetWithdrawableEpoch(e math.Epoch) {
    method GetWithdrawableEpoch (line 310) | func (v Validator) GetWithdrawableEpoch() math.Epoch {
    method GetWithdrawalCredentials (line 315) | func (v Validator) GetWithdrawalCredentials() WithdrawalCredentials {
    method HasCompoundingWithdrawalCredential (line 322) | func (v Validator) HasCompoundingWithdrawalCredential() bool {
    method Status (line 329) | func (v *Validator) Status(currentEpoch math.Epoch) (string, error) {
  function NewValidatorFromDeposit (line 73) | func NewValidatorFromDeposit(
  function NewEmptyValidator (line 96) | func NewEmptyValidator() *Validator {
  function ComputeEffectiveBalance (line 100) | func ComputeEffectiveBalance(

FILE: consensus-types/types/validator_test.go
  function TestNewValidatorFromDeposit (line 37) | func TestNewValidatorFromDeposit(t *testing.T) {
  function TestValidator_IsActive (line 136) | func TestValidator_IsActive(t *testing.T) {
  function TestValidator_IsEligibleForActivation (line 180) | func TestValidator_IsEligibleForActivation(t *testing.T) {
  function TestValidator_IsEligibleForActivationQueue (line 228) | func TestValidator_IsEligibleForActivationQueue(t *testing.T) {
  function TestValidator_IsSlashable (line 273) | func TestValidator_IsSlashable(t *testing.T) {
  function TestValidator_IsFullyWithdrawable (line 330) | func TestValidator_IsFullyWithdrawable(t *testing.T) {
  function TestValidator_IsPartiallyWithdrawable (line 402) | func TestValidator_IsPartiallyWithdrawable(t *testing.T) {
  function TestValidator_HasEth1WithdrawalCredentials (line 474) | func TestValidator_HasEth1WithdrawalCredentials(t *testing.T) {
  function TestValidator_HasMaxEffectiveBalance (line 513) | func TestValidator_HasMaxEffectiveBalance(t *testing.T) {
  function TestValidator_MarshalUnmarshalSSZ (line 548) | func TestValidator_MarshalUnmarshalSSZ(t *testing.T) {
  function TestValidator_HashTreeRoot (line 669) | func TestValidator_HashTreeRoot(t *testing.T) {
  function TestValidator_SetEffectiveBalance (line 729) | func TestValidator_SetEffectiveBalance(t *testing.T) {
  function TestValidator_GetWithdrawableEpoch (line 764) | func TestValidator_GetWithdrawableEpoch(t *testing.T) {
  function TestValidator_GetWithdrawalCredentials (line 795) | func TestValidator_GetWithdrawalCredentials(t *testing.T) {
  function TestValidator_IsSlashed (line 831) | func TestValidator_IsSlashed(t *testing.T) {
  function TestValidator_GetPubkey (line 862) | func TestValidator_GetPubkey(t *testing.T) {
  function TestValidator_GetEffectiveBalance (line 893) | func TestValidator_GetEffectiveBalance(t *testing.T) {

FILE: consensus-types/types/validators.go
  type Validators (line 31) | type Validators
    method SizeSSZ (line 34) | func (vs Validators) SizeSSZ(siz *ssz.Sizer, _ bool) uint32 {
    method DefineSSZ (line 40) | func (vs Validators) DefineSSZ(c *ssz.Codec) {
    method HashTreeRoot (line 57) | func (vs Validators) HashTreeRoot() common.Root {

FILE: consensus-types/types/versionable.go
  type versionable (line 29) | type versionable struct
    method GetForkVersion (line 39) | func (v *versionable) GetForkVersion() common.Version {
  function NewVersionable (line 34) | func NewVersionable(forkVersion common.Version) constraints.Versionable {

FILE: consensus-types/types/voluntary_exits.go
  type VoluntaryExits (line 41) | type VoluntaryExits
    method SizeSSZ (line 45) | func (vs VoluntaryExits) SizeSSZ(siz *ssz.Sizer, _ bool) uint32 {
    method DefineSSZ (line 50) | func (vs VoluntaryExits) DefineSSZ(c *ssz.Codec) {
    method HashTreeRoot (line 63) | func (vs VoluntaryExits) HashTreeRoot() common.Root {
    method EnforceUnused (line 70) | func (vs VoluntaryExits) EnforceUnused() error {

FILE: consensus-types/types/withdrawal_credentials.go
  constant EthSecp256k1CredentialPrefix (line 30) | EthSecp256k1CredentialPrefix = byte(1)
  constant numZeroBytesInEth1WithdrawalCredentials (line 34) | numZeroBytesInEth1WithdrawalCredentials = 11
  type WithdrawalCredentials (line 38) | type WithdrawalCredentials
    method IsValidEth1WithdrawalCredentials (line 52) | func (wc WithdrawalCredentials) IsValidEth1WithdrawalCredentials() bool {
    method ToExecutionAddress (line 59) | func (wc WithdrawalCredentials) ToExecutionAddress() (common.Execution...
    method UnmarshalJSON (line 68) | func (wc *WithdrawalCredentials) UnmarshalJSON(input []byte) error {
    method String (line 74) | func (wc WithdrawalCredentials) String() string {
    method MarshalText (line 80) | func (wc WithdrawalCredentials) MarshalText() ([]byte, error) {
    method UnmarshalText (line 86) | func (wc *WithdrawalCredentials) UnmarshalText(text []byte) error {
  function NewCredentialsFromExecutionAddress (line 42) | func NewCredentialsFromExecutionAddress(address common.ExecutionAddress)...

FILE: consensus-types/types/withdrawal_credentials_test.go
  function TestNewCredentialsFromExecutionAddress (line 31) | func TestNewCredentialsFromExecutionAddress(t *testing.T) {
  function TestIsValidEth1WithdrawalCredentials (line 68) | func TestIsValidEth1WithdrawalCredentials(t *testing.T) {
  function TestToExecutionAddress (line 122) | func TestToExecutionAddress(t *testing.T) {
  function TestToExecutionAddress_InvalidPrefix (line 149) | func TestToExecutionAddress_InvalidPrefix(t *testing.T) {
  function TestWithdrawalCredentials_UnmarshalJSON (line 161) | func TestWithdrawalCredentials_UnmarshalJSON(t *testing.T) {
  function TestWithdrawalCredentials_String (line 199) | func TestWithdrawalCredentials_String(t *testing.T) {
  function TestWithdrawalCredentials_MarshalText (line 238) | func TestWithdrawalCredentials_MarshalText(t *testing.T) {
  function TestWithdrawalCredentials_UnmarshalText (line 294) | func TestWithdrawalCredentials_UnmarshalText(t *testing.T) {

FILE: consensus-types/types/withdrawal_request.go
  constant sszWithdrawRequestSize (line 35) | sszWithdrawRequestSize = 76
  type WithdrawalRequest (line 44) | type WithdrawalRequest struct
    method ValidateAfterDecodingSSZ (line 54) | func (w *WithdrawalRequest) ValidateAfterDecodingSSZ() error {
    method DefineSSZ (line 58) | func (w *WithdrawalRequest) DefineSSZ(codec *ssz.Codec) {
    method SizeSSZ (line 64) | func (w *WithdrawalRequest) SizeSSZ(_ *ssz.Sizer) uint32 {
    method MarshalSSZ (line 68) | func (w *WithdrawalRequest) MarshalSSZ() ([]byte, error) {
    method HashTreeRoot (line 74) | func (w *WithdrawalRequest) HashTreeRoot() common.Root {
  type WithdrawalRequests (line 86) | type WithdrawalRequests
    method MarshalSSZ (line 89) | func (wr WithdrawalRequests) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 94) | func (wr WithdrawalRequests) ValidateAfterDecodingSSZ() error {
  function DecodeWithdrawalRequests (line 105) | func DecodeWithdrawalRequests(data []byte) (WithdrawalRequests, error) {

FILE: consensus-types/types/withdrawals_request_test.go
  function TestWithdrawalRequest_ValidValuesSSZ (line 35) | func TestWithdrawalRequest_ValidValuesSSZ(t *testing.T) {
  function TestWithdrawalRequest_InvalidValuesUnmarshalSSZ (line 149) | func TestWithdrawalRequest_InvalidValuesUnmarshalSSZ(t *testing.T) {

FILE: consensus/cometbft/cli/commands.go
  function Commands (line 50) | func Commands(
  function StatusCommand (line 73) | func StatusCommand() *cobra.Command {
  function ShowNodeIDCmd (line 121) | func ShowNodeIDCmd() *cobra.Command {
  function ShowValidatorCmd (line 139) | func ShowValidatorCmd() *cobra.Command {
  function ShowAddressCmd (line 177) | func ShowAddressCmd() *cobra.Command {
  function VersionCmd (line 199) | func VersionCmd() *cobra.Command {
  function BootstrapStateCmd (line 227) | func BootstrapStateCmd(

FILE: consensus/cometbft/service/abci.go
  method InitChain (line 39) | func (s *Service) InitChain(
  method PrepareProposal (line 54) | func (s *Service) PrepareProposal(
  method Info (line 69) | func (s *Service) Info(context.Context,
  method ProcessProposal (line 93) | func (s *Service) ProcessProposal(
  method FinalizeBlock (line 108) | func (s *Service) FinalizeBlock(
  method Commit (line 129) | func (s *Service) Commit(
  method Query (line 143) | func (s *Service) Query(
  method ListSnapshots (line 189) | func (Service) ListSnapshots(
  method LoadSnapshotChunk (line 196) | func (Service) LoadSnapshotChunk(
  method OfferSnapshot (line 203) | func (Service) OfferSnapshot(
  method ApplySnapshotChunk (line 210) | func (Service) ApplySnapshotChunk(
  method ExtendVote (line 217) | func (Service) ExtendVote(
  method VerifyVoteExtension (line 224) | func (Service) VerifyVoteExtension(
  method CheckTx (line 231) | func (*Service) CheckTx(

FILE: consensus/cometbft/service/abci_utils.go
  method handleQueryStore (line 34) | func (s *Service) handleQueryStore(path []string, req *abci.QueryRequest...
  function queryResult (line 68) | func queryResult(err error) abci.QueryResponse {
  function splitABCIQueryPath (line 82) | func splitABCIQueryPath(requestPath string) []string {

FILE: consensus/cometbft/service/cache/cache.go
  type TelemetrySink (line 35) | type TelemetrySink interface
  constant minActivationHeight (line 40) | minActivationHeight = 2
  function IsStateCachingActive (line 42) | func IsStateCachingActive(cfg delay.ConfigGetter, height math.Slot) bool {
  type States (line 62) | type States interface
  type Element (line 87) | type Element struct
  type candidateStates (line 92) | type candidateStates struct
    method SetCached (line 111) | func (cs *candidateStates) SetCached(hash string, toCache *Element) {
    method GetCached (line 115) | func (cs *candidateStates) GetCached(hash string) (*Element, error) {
    method MarkAsFinal (line 123) | func (cs *candidateStates) MarkAsFinal(hash string) error {
    method GetFinal (line 131) | func (cs *candidateStates) GetFinal() (string, *State, error) {
    method Reset (line 142) | func (cs *candidateStates) Reset() {
  function New (line 99) | func New(maxSize int, sink TelemetrySink) States {

FILE: consensus/cometbft/service/cache/cache_test.go
  constant maxCachedStates (line 31) | maxCachedStates = 10
  type mockTelemetrySink (line 34) | type mockTelemetrySink struct
    method SetGauge (line 39) | func (m *mockTelemetrySink) SetGauge(key string, value int64, _ ...str...
  function TestCandidateStates_BasicOperations (line 44) | func TestCandidateStates_BasicOperations(t *testing.T) {
  function TestCandidateStates_BoundedSize (line 113) | func TestCandidateStates_BoundedSize(t *testing.T) {

FILE: consensus/cometbft/service/cache/state.go
  type State (line 30) | type State struct
    method CacheMultiStore (line 46) | func (st *State) CacheMultiStore() storetypes.CacheMultiStore {
    method SetContext (line 51) | func (st *State) SetContext(ctx sdk.Context) {
    method Context (line 58) | func (st *State) Context() sdk.Context {
    method Write (line 64) | func (st *State) Write() {
  function NewState (line 37) | func NewState(ms storetypes.CacheMultiStore, ctx sdk.Context) *State {

FILE: consensus/cometbft/service/commit.go
  method commit (line 31) | func (s *Service) commit(
  method GetBlockRetentionHeight (line 87) | func (s *Service) GetBlockRetentionHeight(commitHeight int64) int64 {

FILE: consensus/cometbft/service/configs.go
  constant minTimeoutPropose (line 39) | minTimeoutPropose   = 2000 * time.Millisecond
  constant minTimeoutPrevote (line 40) | minTimeoutPrevote   = 2000 * time.Millisecond
  constant minTimeoutPrecommit (line 41) | minTimeoutPrecommit = 2000 * time.Millisecond
  constant maxBlockSize (line 43) | maxBlockSize = 100 * 1024 * 1024
  constant precision (line 45) | precision    = 505 * time.Millisecond
  constant messageDelay (line 46) | messageDelay = 15 * time.Second
  constant defaultMaxNumInboundPeers (line 48) | defaultMaxNumInboundPeers  = 40
  constant defaultMaxNumOutboundPeers (line 49) | defaultMaxNumOutboundPeers = 10
  function DefaultConfig (line 63) | func DefaultConfig() *cmtcfg.Config {
  function DefaultConsensusParams (line 111) | func DefaultConsensusParams(consensusKeyAlgo string, cs chain.Spec) *cmt...
  function validateConfig (line 134) | func validateConfig(cfg *cmtcfg.Config) error {
  function warnAboutConfigs (line 162) | func warnAboutConfigs(
  function extractConsensusParams (line 182) | func extractConsensusParams(cmtCfg *cmtcfg.Config) (*cmttypes.ConsensusP...
  function validateConsensusParams (line 194) | func validateConsensusParams(params *cmttypes.ConsensusParams) error {

FILE: consensus/cometbft/service/configs_test.go
  function TestSBTEnableHeightAlignedWithChainSpecs (line 35) | func TestSBTEnableHeightAlignedWithChainSpecs(t *testing.T) {

FILE: consensus/cometbft/service/delay/config.go
  constant maxDelayBetweenBlocks (line 36) | maxDelayBetweenBlocks = 5 * time.Minute
  constant targetBlockTime (line 43) | targetBlockTime = 2 * time.Second
  constant constBlockDelay (line 46) | constBlockDelay = 500 * time.Millisecond
  constant sbtEnableHeight (line 49) | sbtEnableHeight = math.MaxInt64
  constant sbtConsensusParamUpdate (line 52) | sbtConsensusParamUpdate = 0
  constant noDelay (line 58) | noDelay = 1 * time.Microsecond
  type ConfigGetter (line 61) | type ConfigGetter interface
  type Config (line 69) | type Config struct
    method SbtMaxBlockDelay (line 91) | func (c Config) SbtMaxBlockDelay() time.Duration {
    method SbtTargetBlockTime (line 94) | func (c Config) SbtTargetBlockTime() time.Duration {
    method SbtConstBlockDelay (line 97) | func (c Config) SbtConstBlockDelay() time.Duration {
    method SbtConsensusUpdateHeight (line 100) | func (c Config) SbtConsensusUpdateHeight() int64 {
    method SbtConsensusEnableHeight (line 103) | func (c Config) SbtConsensusEnableHeight() int64 {
  function DefaultConfig (line 81) | func DefaultConfig() Config {

FILE: consensus/cometbft/service/delay/delay.go
  type BlockDelay (line 37) | type BlockDelay struct
    method ComputeNext (line 51) | func (d *BlockDelay) ComputeNext(cfg ConfigGetter, curBlockTime time.T...
    method ToBytes (line 122) | func (d *BlockDelay) ToBytes() []byte {
  function FromBytes (line 80) | func FromBytes(bz []byte) (*BlockDelay, error) {

FILE: consensus/cometbft/service/delay/delay_test.go
  function TestBlockDelayFromBytes (line 38) | func TestBlockDelayFromBytes(t *testing.T) {
  function TestBlockDelayNext_NoDelay (line 56) | func TestBlockDelayNext_NoDelay(t *testing.T) {
  function TestBlockDelayNext_WithDelay (line 80) | func TestBlockDelayNext_WithDelay(t *testing.T) {
  function TestBlockDelayNext_ResetOnStall (line 104) | func TestBlockDelayNext_ResetOnStall(t *testing.T) {
  function TestBlockDelayNext_Catchup (line 125) | func TestBlockDelayNext_Catchup(t *testing.T) {

FILE: consensus/cometbft/service/delay/errors.go
  type BlockDelayFromBytesError (line 27) | type BlockDelayFromBytesError struct
    method Error (line 32) | func (e *BlockDelayFromBytesError) Error() string {
    method Unwrap (line 36) | func (e *BlockDelayFromBytesError) Unwrap() error {

FILE: consensus/cometbft/service/encoding/encoding.go
  function ExtractBlobsAndBlockFromRequest (line 34) | func ExtractBlobsAndBlockFromRequest(
  function UnmarshalBeaconBlockFromABCIRequest (line 63) | func UnmarshalBeaconBlockFromABCIRequest(
  function UnmarshalBlobSidecarsFromABCIRequest (line 98) | func UnmarshalBlobSidecarsFromABCIRequest(

FILE: consensus/cometbft/service/encoding/interfaces.go
  type ABCIRequest (line 26) | type ABCIRequest interface

FILE: consensus/cometbft/service/finalize_block.go
  method finalizeBlock (line 38) | func (s *Service) finalizeBlock(
  method nextBlockDelay (line 133) | func (s *Service) nextBlockDelay(req *cmtabci.FinalizeBlockRequest) time...
  method workingHash (line 188) | func (s *Service) workingHash() []byte {
  method validateFinalizeBlockHeight (line 213) | func (s *Service) validateFinalizeBlockHeight(req *cmtabci.FinalizeBlock...
  method calculateFinalizeBlockResponse (line 251) | func (s *Service) calculateFinalizeBlockResponse(

FILE: consensus/cometbft/service/genesis.go
  method DefaultGenesis (line 41) | func (s *Service) DefaultGenesis(spec chain.Spec) map[string]json.RawMes...
  method ValidateGenesis (line 58) | func (s *Service) ValidateGenesis(
  function validateDeposits (line 107) | func validateDeposits(deposits []*types.Deposit) error {
  constant maxExtraDataSize (line 134) | maxExtraDataSize = 32
  function validateExecutionHeader (line 138) | func validateExecutionHeader(header *types.ExecutionPayloadHeader) error {
  constant expectedHexLength (line 223) | expectedHexLength = 8
  function isValidForkVersion (line 229) | func isValidForkVersion(forkVersion common.Version) bool {
  function GetGenDocProvider (line 250) | func GetGenDocProvider(

FILE: consensus/cometbft/service/init_chain.go
  method initChain (line 34) | func (s *Service) initChain(
  method initChainer (line 116) | func (s *Service) initChainer(

FILE: consensus/cometbft/service/interfaces.go
  type TelemetrySink (line 28) | type TelemetrySink interface

FILE: consensus/cometbft/service/log/cmt_logger.go
  type CometLogger (line 29) | type CometLogger struct
    method With (line 39) | func (l *CometLogger) With(keyVals ...any) cmtlog.Logger {
    method Impl (line 45) | func (l *CometLogger) Impl() any {
  function WrapCometLogger (line 33) | func WrapCometLogger(logger *phuslu.Logger) *CometLogger {

FILE: consensus/cometbft/service/log/sdk_logger.go
  type SDKLogger (line 29) | type SDKLogger struct
    method With (line 39) | func (l *SDKLogger) With(keyVals ...any) sdklog.Logger {
    method Impl (line 45) | func (l *SDKLogger) Impl() any {
  function WrapSDKLogger (line 33) | func WrapSDKLogger(logger *phuslu.Logger) *SDKLogger {

FILE: consensus/cometbft/service/node_api_support.go
  method IsAppReady (line 41) | func (s *Service) IsAppReady() error {
  method CreateQueryContext (line 52) | func (s *Service) CreateQueryContext(
  method GetSyncData (line 102) | func (s *Service) GetSyncData() (int64, int64) {

FILE: consensus/cometbft/service/options.go
  function SetPruning (line 34) | func SetPruning(opts pruningtypes.PruningOptions) func(*Service) {
  function SetMinRetainBlocks (line 54) | func SetMinRetainBlocks(minRetainBlocks uint64) func(*Service) {
  function SetIAVLCacheSize (line 60) | func SetIAVLCacheSize(size int) func(*Service) {
  function SetIAVLDisableFastNode (line 68) | func SetIAVLDisableFastNode(disable bool) func(*Service) {
  function SetInterBlockCache (line 76) | func SetInterBlockCache(cache storetypes.MultiStorePersistentCache) func...
  function SetChainID (line 83) | func SetChainID(chainID string) func(*Service) {

FILE: consensus/cometbft/service/prepare_proposal.go
  method prepareProposal (line 33) | func (s *Service) prepareProposal(

FILE: consensus/cometbft/service/process_proposal.go
  method processProposal (line 33) | func (s *Service) processProposal(

FILE: consensus/cometbft/service/service.go
  constant initialAppVersion (line 53) | initialAppVersion uint64 = 0
  constant AppName (line 54) | AppName           string = "beacond"
  constant maxCachedStates (line 55) | maxCachedStates          = 10
  type Service (line 58) | type Service struct
    method Start (line 195) | func (s *Service) Start(
    method Stop (line 255) | func (s *Service) Stop() error {
    method ResetAppCtx (line 277) | func (s *Service) ResetAppCtx(ctx context.Context) {
    method SetNodeAddress (line 283) | func (s *Service) SetNodeAddress(addr cmtcrypto.Address) {
    method Name (line 288) | func (s *Service) Name() string {
    method CommitMultiStore (line 294) | func (s *Service) CommitMultiStore() storetypes.CommitMultiStore {
    method GetBlock (line 299) | func (s *Service) GetBlock(height int64) *cmttypes.Block {
    method GetSignedHeader (line 308) | func (s *Service) GetSignedHeader(height int64) *cmttypes.SignedHeader {
    method AppVersion (line 327) | func (s *Service) AppVersion(_ context.Context) (uint64, error) {
    method appVersion (line 331) | func (s *Service) appVersion() (uint64, error) {
    method MountStore (line 338) | func (s *Service) MountStore(
    method lastBlockHeight (line 346) | func (s *Service) lastBlockHeight() int64 {
    method setMinRetainBlocks (line 350) | func (s *Service) setMinRetainBlocks(minRetainBlocks uint64) {
    method setInterBlockCache (line 354) | func (s *Service) setInterBlockCache(
    method resetState (line 364) | func (s *Service) resetState(ctx context.Context) *cache.State {
    method getContextForProposal (line 399) | func (s *Service) getContextForProposal(
  function NewService (line 111) | func NewService(
  function convertValidatorUpdate (line 380) | func convertValidatorUpdate[ValidatorUpdateT any](

FILE: consensus/cometbft/service/state/state.go
  type Manager (line 33) | type Manager struct
    method LoadVersion (line 67) | func (sm *Manager) LoadVersion(version int64) error {
    method LoadLatestVersion (line 77) | func (sm *Manager) LoadLatestVersion() error {
    method Close (line 86) | func (sm *Manager) Close() error {
    method GetCommitMultiStore (line 91) | func (sm *Manager) GetCommitMultiStore() storetypes.CommitMultiStore {
    method LoadBlockDelay (line 101) | func (sm *Manager) LoadBlockDelay() ([]byte, error) {
    method SaveBlockDelay (line 108) | func (sm *Manager) SaveBlockDelay(bz []byte) error {
  function NewManager (line 39) | func NewManager(

FILE: consensus/types/common.go
  type commonConsensusData (line 25) | type commonConsensusData struct
    method GetProposerAddress (line 35) | func (c *commonConsensusData) GetProposerAddress() []byte {
    method GetConsensusTime (line 41) | func (c *commonConsensusData) GetConsensusTime() math.U64 {

FILE: consensus/types/consensus_block.go
  type ConsensusBlock (line 30) | type ConsensusBlock struct
    method GetBeaconBlock (line 52) | func (b *ConsensusBlock) GetBeaconBlock() *types.BeaconBlock {
  function NewConsensusBlock (line 38) | func NewConsensusBlock(

FILE: consensus/types/slot_data.go
  type SlotData (line 31) | type SlotData struct
    method GetSlot (line 63) | func (b *SlotData) GetSlot() math.Slot {
    method GetAttestationData (line 68) | func (b *SlotData) GetAttestationData() []*ctypes.AttestationData {
    method GetSlashingInfo (line 73) | func (b *SlotData) GetSlashingInfo() []*ctypes.SlashingInfo {
    method SetAttestationData (line 78) | func (b *SlotData) SetAttestationData(
    method SetSlashingInfo (line 85) | func (b *SlotData) SetSlashingInfo(
  function NewSlotData (line 44) | func NewSlotData(

FILE: da/blob/factory.go
  type SidecarFactory (line 37) | type SidecarFactory struct
    method BuildSidecars (line 52) | func (f *SidecarFactory) BuildSidecars(
    method BuildKZGInclusionProof (line 100) | func (f *SidecarFactory) BuildKZGInclusionProof(
    method BuildBlockBodyProof (line 126) | func (f *SidecarFactory) BuildBlockBodyProof(
    method BuildCommitmentProof (line 147) | func (f *SidecarFactory) BuildCommitmentProof(
  function NewSidecarFactory (line 43) | func NewSidecarFactory(

FILE: da/blob/factory_metrics.go
  type factoryMetrics (line 30) | type factoryMetrics struct
    method measureBuildSidecarsDuration (line 45) | func (fm *factoryMetrics) measureBuildSidecarsDuration(
    method measureBuildKZGInclusionProofDuration (line 58) | func (fm *factoryMetrics) measureBuildKZGInclusionProofDuration(
    method measureBuildBlockBodyProofDuration (line 69) | func (fm *factoryMetrics) measureBuildBlockBodyProofDuration(
    method measureBuildCommitmentProofDuration (line 80) | func (fm *factoryMetrics) measureBuildCommitmentProofDuration(
  function newFactoryMetrics (line 36) | func newFactoryMetrics(

FILE: da/blob/factory_test.go
  type MockSpec (line 28) | type MockSpec struct
    method MaxBlobCommitmentsPerBlock (line 33) | func (m *MockSpec) MaxBlobCommitmentsPerBlock() uint64 {

FILE: da/blob/interfaces.go
  type TelemetrySink (line 28) | type TelemetrySink interface

FILE: da/blob/processor.go
  type Processor (line 39) | type Processor struct
    method VerifySidecars (line 64) | func (sp *Processor) VerifySidecars(
    method ProcessSidecars (line 89) | func (sp *Processor) ProcessSidecars(
  function NewProcessor (line 49) | func NewProcessor(

FILE: da/blob/processor_metrics.go
  type processorMetrics (line 30) | type processorMetrics struct
    method measureVerifySidecarsDuration (line 45) | func (pm *processorMetrics) measureVerifySidecarsDuration(
    method measureProcessSidecarsDuration (line 58) | func (pm *processorMetrics) measureProcessSidecarsDuration(
  function newProcessorMetrics (line 36) | func newProcessorMetrics(

FILE: da/blob/verifier.go
  type verifier (line 39) | type verifier struct
    method verifySidecars (line 59) | func (bv *verifier) verifySidecars(
    method verifyInclusionProofs (line 121) | func (bv *verifier) verifyInclusionProofs(
    method verifyKZGProofs (line 133) | func (bv *verifier) verifyKZGProofs(
  function newVerifier (line 47) | func newVerifier(

FILE: da/blob/verifier_metrics.go
  type verifierMetrics (line 30) | type verifierMetrics struct
    method measureVerifySidecarsDuration (line 45) | func (vm *verifierMetrics) measureVerifySidecarsDuration(
    method measureVerifyInclusionProofsDuration (line 62) | func (vm *verifierMetrics) measureVerifyInclusionProofsDuration(
    method measureVerifyKZGProofsDuration (line 76) | func (vm *verifierMetrics) measureVerifyKZGProofsDuration(
  function newVerifierMetrics (line 36) | func newVerifierMetrics(

FILE: da/kzg/config.go
  constant defaultTrustedSetupPath (line 25) | defaultTrustedSetupPath = "./testing/files/kzg-trusted-setup.json"
  constant defaultImplementation (line 28) | defaultImplementation = "crate-crypto/go-kzg-4844"
  type Config (line 31) | type Config struct
  function DefaultConfig (line 39) | func DefaultConfig() Config {

FILE: da/kzg/config_test.go
  function TestDefaultConfig (line 30) | func TestDefaultConfig(t *testing.T) {

FILE: da/kzg/gokzg/gokzg.go
  constant Implementation (line 31) | Implementation = "crate-crypto/go-kzg-4844"
  type Verifier (line 34) | type Verifier struct
    method GetImplementation (line 48) | func (v Verifier) GetImplementation() string {
    method VerifyBlobProof (line 54) | func (v Verifier) VerifyBlobProof(
    method VerifyBlobProofBatch (line 69) | func (v Verifier) VerifyBlobProofBatch(
  function NewVerifier (line 39) | func NewVerifier(ts *gokzg4844.JSONTrustedSetup) (*Verifier, error) {

FILE: da/kzg/gokzg/gokzg_test.go
  function TestVerifyBlobProof (line 38) | func TestVerifyBlobProof(t *testing.T) {
  function TestVerifyBlobProofBatch (line 86) | func TestVerifyBlobProofBatch(t *testing.T) {
  function TestGetImplementation (line 132) | func TestGetImplementation(t *testing.T) {
  function setupVerifier (line 142) | func setupVerifier() (*gokzg.Verifier, error) {
  function setupTestData (line 164) | func setupTestData(t *testing.T, fileName string) (

FILE: da/kzg/noop/noop.go
  type Verifier (line 29) | type Verifier struct
    method GetImplementation (line 37) | func (v Verifier) GetImplementation() string {
    method VerifyBlobProof (line 42) | func (v Verifier) VerifyBlobProof(
    method VerifyBlobProofBatch (line 51) | func (v Verifier) VerifyBlobProofBatch(
  function NewVerifier (line 32) | func NewVerifier() *Verifier {

FILE: da/kzg/noop/noop_test.go
  function TestVerifyBlobProof (line 31) | func TestVerifyBlobProof(t *testing.T) {
  function TestVerifyBlobProofBatch (line 44) | func TestVerifyBlobProofBatch(t *testing.T) {

FILE: da/kzg/proof.go
  type BlobProofVerifier (line 33) | type BlobProofVerifier interface
  function NewBlobProofVerifier (line 53) | func NewBlobProofVerifier(
  function ArgsFromSidecars (line 70) | func ArgsFromSidecars(

FILE: da/kzg/proof_test.go
  function TestNewBlobProofVerifier_KzgImpl (line 40) | func TestNewBlobProofVerifier_KzgImpl(t *testing.T) {
  function TestNewBlobProofVerifier_InvalidImpl (line 51) | func TestNewBlobProofVerifier_InvalidImpl(t *testing.T) {
  function loadTrustedSetupFromFile (line 62) | func loadTrustedSetupFromFile() (*gokzg4844.JSONTrustedSetup, error) {
  function TestArgsFromSidecars (line 79) | func TestArgsFromSidecars(t *testing.T) {

FILE: da/kzg/types/args.go
  type BlobProofArgs (line 28) | type BlobProofArgs struct

FILE: da/store/interfaces.go
  type IndexDB (line 24) | type IndexDB interface

FILE: da/store/store.go
  type Store (line 34) | type Store struct
    method IsDataAvailable (line 54) | func (s *Store) IsDataAvailable(
    method GetBlobSidecars (line 70) | func (s *Store) GetBlobSidecars(slot math.Slot) (types.BlobSidecars, e...
    method Persist (line 90) | func (s *Store) Persist(sidecars types.BlobSidecars) error {
    method DeleteBlobSidecars (line 119) | func (s *Store) DeleteBlobSidecars(slot math.Slot) error {
  function New (line 42) | func New(

FILE: da/store/store_test.go
  function setSlot (line 36) | func setSlot(scs datypes.BlobSidecars, slot math.Slot) {
  function TestStore_PersistRace (line 43) | func TestStore_PersistRace(t *testing.T) {

FILE: da/types/sidecar.go
  type BlobSidecar (line 47) | type BlobSidecar struct
    method HasValidInclusionProof (line 86) | func (b *BlobSidecar) HasValidInclusionProof() bool {
    method GetIndex (line 101) | func (b *BlobSidecar) GetIndex() uint64 {
    method GetBlob (line 105) | func (b *BlobSidecar) GetBlob() eip4844.Blob {
    method GetKzgProof (line 109) | func (b *BlobSidecar) GetKzgProof() eip4844.KZGProof {
    method GetKzgCommitment (line 113) | func (b *BlobSidecar) GetKzgCommitment() eip4844.KZGCommitment {
    method GetBeaconBlockHeader (line 117) | func (b *BlobSidecar) GetBeaconBlockHeader() *ctypes.BeaconBlockHeader {
    method GetInclusionProof (line 121) | func (b *BlobSidecar) GetInclusionProof() []common.Root {
    method GetSignature (line 125) | func (b *BlobSidecar) GetSignature() crypto.BLSSignature {
    method DefineSSZ (line 134) | func (b *BlobSidecar) DefineSSZ(codec *ssz.Codec) {
    method SizeSSZ (line 145) | func (b *BlobSidecar) SizeSSZ(sizer *ssz.Sizer) uint32 {
    method MarshalSSZ (line 156) | func (b *BlobSidecar) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 164) | func (b *BlobSidecar) ValidateAfterDecodingSSZ() error {
    method MarshalSSZTo (line 182) | func (b *BlobSidecar) MarshalSSZTo(buf []byte) ([]byte, error) {
    method HashTreeRoot (line 187) | func (b *BlobSidecar) HashTreeRoot() common.Root {
  function BuildBlobSidecar (line 66) | func BuildBlobSidecar(

FILE: da/types/sidecar_test.go
  function TestSidecarMarshalling (line 44) | func TestSidecarMarshalling(t *testing.T) {
  type InclusionSink (line 89) | type InclusionSink struct
    method MeasureSince (line 91) | func (is InclusionSink) MeasureSince(_ string, _ time.Time, _ ...strin...
  function TestHasValidInclusionProof (line 93) | func TestHasValidInclusionProof(t *testing.T) {
  function Test_KZGRootIndex (line 193) | func Test_KZGRootIndex(t *testing.T) {
  function TestHashTreeRoot (line 208) | func TestHashTreeRoot(t *testing.T) {

FILE: da/types/sidecars.go
  type BlobSidecars (line 40) | type BlobSidecars
    method ValidateBlockRoots (line 44) | func (bs *BlobSidecars) ValidateBlockRoots() error {
    method VerifyInclusionProofs (line 63) | func (bs *BlobSidecars) VerifyInclusionProofs() error {
    method DefineSSZ (line 82) | func (bs *BlobSidecars) DefineSSZ(codec *ssz.Codec) {
    method SizeSSZ (line 92) | func (bs *BlobSidecars) SizeSSZ(siz *ssz.Sizer, fixed bool) uint32 {
    method MarshalSSZ (line 100) | func (bs *BlobSidecars) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 105) | func (bs *BlobSidecars) ValidateAfterDecodingSSZ() error {

FILE: da/types/sidecars_test.go
  function TestEmptySidecarMarshalling (line 38) | func TestEmptySidecarMarshalling(t *testing.T) {
  function TestValidateBlockRoots (line 92) | func TestValidateBlockRoots(t *testing.T) {
  function TestZeroSidecarsInBlobSidecarsIsNotNil (line 157) | func TestZeroSidecarsInBlobSidecarsIsNotNil(t *testing.T) {

FILE: engine-primitives/engine-primitives/attributes.go
  type PayloadAttributes (line 31) | type PayloadAttributes struct
    method GetSuggestedFeeRecipient (line 83) | func (p *PayloadAttributes) GetSuggestedFeeRecipient() common.Executio...
    method validate (line 88) | func (p *PayloadAttributes) validate(forkVersion common.Version) error {
  function NewPayloadAttributes (line 57) | func NewPayloadAttributes(

FILE: engine-primitives/engine-primitives/attributes_test.go
  type payloadAttributesInput (line 34) | type payloadAttributesInput struct
  function TestPayloadAttributes (line 44) | func TestPayloadAttributes(t *testing.T) {

FILE: engine-primitives/engine-primitives/blobs_bundle.go
  type BlobsBundle (line 31) | type BlobsBundle interface
  type BlobsBundleV1 (line 43) | type BlobsBundleV1 struct
    method GetCommitments (line 53) | func (b *BlobsBundleV1) GetCommitments() []eip4844.KZGCommitment {
    method GetProofs (line 58) | func (b *BlobsBundleV1) GetProofs() []eip4844.KZGProof {
    method GetBlobs (line 63) | func (b *BlobsBundleV1) GetBlobs() []*eip4844.Blob {

FILE: engine-primitives/engine-primitives/blobs_bundle_test.go
  function TestBlobsBundleV1 (line 31) | func TestBlobsBundleV1(t *testing.T) {

FILE: engine-primitives/engine-primitives/engine.go
  type ClientVersionV1 (line 33) | type ClientVersionV1 struct
    method String (line 40) | func (v *ClientVersionV1) String() string {
  type ForkchoiceResponseV1 (line 58) | type ForkchoiceResponseV1 struct
  type ForkchoiceStateV1 (line 68) | type ForkchoiceStateV1 struct
    method Equals (line 82) | func (fsv1 *ForkchoiceStateV1) Equals(rhs *ForkchoiceStateV1) bool {
  type PayloadStatusV1 (line 98) | type PayloadStatusV1 struct

FILE: engine-primitives/engine-primitives/engine_test.go
  function TestPayloadID (line 32) | func TestPayloadID(t *testing.T) {
  function TestForkchoiceStateV1 (line 57) | func TestForkchoiceStateV1(t *testing.T) {
  function TestPayloadStatusV1 (line 83) | func TestPayloadStatusV1(t *testing.T) {

FILE: engine-primitives/engine-primitives/mocks/blobs_bundle.mock.go
  type BlobsBundle (line 12) | type BlobsBundle struct
    method EXPECT (line 20) | func (_m *BlobsBundle) EXPECT() *BlobsBundle_Expecter {
    method GetBlobs (line 25) | func (_m *BlobsBundle) GetBlobs() []*eip4844.Blob {
    method GetCommitments (line 72) | func (_m *BlobsBundle) GetCommitments() []eip4844.KZGCommitment {
    method GetProofs (line 119) | func (_m *BlobsBundle) GetProofs() []eip4844.KZGProof {
  type BlobsBundle_Expecter (line 16) | type BlobsBundle_Expecter struct
    method GetBlobs (line 50) | func (_e *BlobsBundle_Expecter) GetBlobs() *BlobsBundle_GetBlobs_Call {
    method GetCommitments (line 97) | func (_e *BlobsBundle_Expecter) GetCommitments() *BlobsBundle_GetCommi...
    method GetProofs (line 144) | func (_e *BlobsBundle_Expecter) GetProofs() *BlobsBundle_GetProofs_Call {
  type BlobsBundle_GetBlobs_Call (line 45) | type BlobsBundle_GetBlobs_Call struct
    method Run (line 54) | func (_c *BlobsBundle_GetBlobs_Call) Run(run func()) *BlobsBundle_GetB...
    method Return (line 61) | func (_c *BlobsBundle_GetBlobs_Call) Return(_a0 []*eip4844.Blob) *Blob...
    method RunAndReturn (line 66) | func (_c *BlobsBundle_GetBlobs_Call) RunAndReturn(run func() []*eip484...
  type BlobsBundle_GetCommitments_Call (line 92) | type BlobsBundle_GetCommitments_Call struct
    method Run (line 101) | func (_c *BlobsBundle_GetCommitments_Call) Run(run func()) *BlobsBundl...
    method Return (line 108) | func (_c *BlobsBundle_GetCommitments_Call) Return(_a0 []eip4844.KZGCom...
    method RunAndReturn (line 113) | func (_c *BlobsBundle_GetCommitments_Call) RunAndReturn(run func() []e...
  type BlobsBundle_GetProofs_Call (line 139) | type BlobsBundle_GetProofs_Call struct
    method Run (line 148) | func (_c *BlobsBundle_GetProofs_Call) Run(run func()) *BlobsBundle_Get...
    method Return (line 155) | func (_c *BlobsBundle_GetProofs_Call) Return(_a0 []eip4844.KZGProof) *...
    method RunAndReturn (line 160) | func (_c *BlobsBundle_GetProofs_Call) RunAndReturn(run func() []eip484...
  function NewBlobsBundle (line 167) | func NewBlobsBundle(t interface {

FILE: engine-primitives/engine-primitives/mocks/payload_attributer.mock.go
  type PayloadAttributer (line 13) | type PayloadAttributer struct
    method EXPECT (line 21) | func (_m *PayloadAttributer) EXPECT() *PayloadAttributer_Expecter {
    method GetSuggestedFeeRecipient (line 26) | func (_m *PayloadAttributer) GetSuggestedFeeRecipient() common.Executi...
    method IsNil (line 73) | func (_m *PayloadAttributer) IsNil() bool {
    method GetForkVersion (line 118) | func (_m *PayloadAttributer) GetForkVersion() bytes.B4 {
  type PayloadAttributer_Expecter (line 17) | type PayloadAttributer_Expecter struct
    method GetSuggestedFeeRecipient (line 51) | func (_e *PayloadAttributer_Expecter) GetSuggestedFeeRecipient() *Payl...
    method IsNil (line 96) | func (_e *PayloadAttributer_Expecter) IsNil() *PayloadAttributer_IsNil...
    method Version (line 143) | func (_e *PayloadAttributer_Expecter) Version() *PayloadAttributer_Ver...
  type PayloadAttributer_GetSuggestedFeeRecipient_Call (line 46) | type PayloadAttributer_GetSuggestedFeeRecipient_Call struct
    method Run (line 55) | func (_c *PayloadAttributer_GetSuggestedFeeRecipient_Call) Run(run fun...
    method Return (line 62) | func (_c *PayloadAttributer_GetSuggestedFeeRecipient_Call) Return(_a0 ...
    method RunAndReturn (line 67) | func (_c *PayloadAttributer_GetSuggestedFeeRecipient_Call) RunAndRetur...
  type PayloadAttributer_IsNil_Call (line 91) | type PayloadAttributer_IsNil_Call struct
    method Run (line 100) | func (_c *PayloadAttributer_IsNil_Call) Run(run func()) *PayloadAttrib...
    method Return (line 107) | func (_c *PayloadAttributer_IsNil_Call) Return(_a0 bool) *PayloadAttri...
    method RunAndReturn (line 112) | func (_c *PayloadAttributer_IsNil_Call) RunAndReturn(run func() bool) ...
  type PayloadAttributer_Version_Call (line 138) | type PayloadAttributer_Version_Call struct
    method Run (line 147) | func (_c *PayloadAttributer_Version_Call) Run(run func()) *PayloadAttr...
    method Return (line 154) | func (_c *PayloadAttributer_Version_Call) Return(_a0 bytes.B4) *Payloa...
    method RunAndReturn (line 159) | func (_c *PayloadAttributer_Version_Call) RunAndReturn(run func() byte...
  function NewPayloadAttributer (line 166) | func NewPayloadAttributer(t interface {

FILE: engine-primitives/engine-primitives/transactions.go
  type Transactions (line 37) | type Transactions
    method SizeSSZ (line 44) | func (txs Transactions) SizeSSZ(siz *ssz.Sizer, _ bool) uint32 {
    method DefineSSZ (line 52) | func (txs Transactions) DefineSSZ(codec *ssz.Codec) {
    method HashTreeRoot (line 80) | func (txs Transactions) HashTreeRoot() common.Root {

FILE: engine-primitives/engine-primitives/transactions_test.go
  function TestProperTransactions (line 110) | func TestProperTransactions(t *testing.T) {

FILE: engine-primitives/engine-primitives/withdrawal.go
  constant withdrawalSize (line 35) | withdrawalSize = 44
  type Withdrawal (line 43) | type Withdrawal struct
    method SizeSSZ (line 74) | func (*Withdrawal) SizeSSZ(*ssz.Sizer) uint32 {
    method DefineSSZ (line 79) | func (w *Withdrawal) DefineSSZ(c *ssz.Codec) {
    method HashTreeRoot (line 87) | func (w *Withdrawal) HashTreeRoot() common.Root {
    method MarshalSSZ (line 92) | func (w *Withdrawal) MarshalSSZ() ([]byte, error) {
    method ValidateAfterDecodingSSZ (line 97) | func (*Withdrawal) ValidateAfterDecodingSSZ() error { return nil }
    method MarshalSSZTo (line 104) | func (w *Withdrawal) MarshalSSZTo(dst []byte) ([]byte, error) {
    method HashTreeRootWith (line 114) | func (w *Withdrawal) HashTreeRootWith(hh fastssz.HashWalker) error {
    method GetTree (line 134) | func (w *Withdrawal) GetTree() (*fastssz.Node, error) {
    method EncodeRLP (line 143) | func (w Withdrawal) EncodeRLP(_w io.Writer) error {
    method Equals (line 160) | func (w *Withdrawal) Equals(rhs *Withdrawal) bool {
    method GetIndex (line 175) | func (w *Withdrawal) GetIndex() math.U64 {
    method GetValidatorIndex (line 181) | func (w *Withdrawal) GetValidatorIndex() math.ValidatorIndex {
    method GetAddress (line 186) | func (w *Withdrawal) GetAddress() common.ExecutionAddress {
    method GetAmount (line 191) | func (w *Withdrawal) GetAmount() math.Gwei {
  function NewWithdrawal (line 55) | func NewWithdrawal(

FILE: engine-primitives/engine-primitives/withdrawal_ssz_test.go
  function TestWithdrawalSSZ (line 33) | func TestWithdrawalSSZ(t *testing.T) {
  function TestWithdrawalGetTree (line 58) | func TestWithdrawalGetTree(t *testing.T) {
  function TestWithdrawalUnmarshalSSZ (line 72) | func TestWithdrawalUnmarshalSSZ(t *testing.T) {

FILE: engine-primitives/engine-primitives/withdrawal_test.go
  function TestWithdrawal (line 32) | func TestWithdrawal(t *testing.T) {
  function TestWithdrawal_Equals (line 50) | func TestWithdrawal_Equals(t *testing.T) {
  function TestWithdrawalMethods (line 80) | func TestWithdrawalMethods(t *testing.T) {

FILE: engine-primitives/engine-primitives/withdrawals.go
  type Withdrawals (line 38) | type Withdrawals
    method SizeSSZ (line 45) | func (w Withdrawals) SizeSSZ(siz *ssz.Sizer) uint32 {
    method DefineSSZ (line 50) | func (w Withdrawals) DefineSSZ(codec *ssz.Codec) {
    method HashTreeRoot (line 66) | func (w Withdrawals) HashTreeRoot() common.Root {
    method Len (line 75) | func (w Withdrawals) Len() int { return len(w) }
    method EncodeIndex (line 81) | func (w Withdrawals) EncodeIndex(i int, _w *bytes.Buffer) {

FILE: engine-primitives/engine-primitives/withdrawals_test.go
  function TestWithdrawals (line 36) | func TestWithdrawals(t *testing.T) {

FILE: errors/mod.go
  function IsAny (line 44) | func IsAny(err error, errs ...error) bool {
  type DetailedError (line 55) | type DetailedError struct
  function WrapNonFatal (line 63) | func WrapNonFatal(err error) error {
  function WrapFatal (line 72) | func WrapFatal(err error) error {
  function IsFatal (line 81) | func IsFatal(err error) bool {
  function JoinFatal (line 110) | func JoinFatal(errs ...error) error {

FILE: execution/client/client.go
  type EngineClient (line 40) | type EngineClient struct
    method Name (line 107) | func (s *EngineClient) Name() string {
    method Start (line 112) | func (s *EngineClient) Start(ctx context.Context) error {
    method Stop (line 158) | func (s *EngineClient) Stop() error {
    method IsConnected (line 162) | func (s *EngineClient) IsConnected() bool {
    method HasCapability (line 168) | func (s *EngineClient) HasCapability(capability string) bool {
    method verifyChainIDAndConnection (line 179) | func (s *EngineClient) verifyChainIDAndConnection(
    method GetRPCRetryInterval (line 242) | func (s *EngineClient) GetRPCRetryInterval() time.Duration {
    method GetRPCMaxRetryInterval (line 246) | func (s *EngineClient) GetRPCMaxRetryInterval() time.Duration {
  function New (line 61) | func New(

FILE: execution/client/config.go
  constant MinRPCTimeout (line 30) | MinRPCTimeout = 2 * time.Second
  constant defaultDialURL (line 32) | defaultDialURL                 = "http://localhost:8551"
  constant defaultRPCRetryInterval (line 33) | defaultRPCRetryInterval        = 100 * time.Millisecond
  constant defaultRPCMaxRetryInterval (line 34) | defaultRPCMaxRetryInterval     = 10 * time.Second
  constant defaultRPCStartupCheckInterval (line 35) | defaultRPCStartupCheckInterval = 3 * time.Second
  constant defaultRPCJWTRefreshInterval (line 36) | defaultRPCJWTRefreshInterval   = 30 * time.Second
  constant defaultJWTSecretPath (line 38) | defaultJWTSecretPath = "./jwt.hex"
  function DefaultConfig (line 42) | func DefaultConfig() Config {
  type Config (line 57) | type Config struct

FILE: execution/client/engine.go
  method NewPayload (line 40) | func (s *EngineClient) NewPayload(
  method ForkchoiceUpdated (line 81) | func (s *EngineClient) ForkchoiceUpdated(
  method GetPayload (line 127) | func (s *EngineClient) GetPayload(
  method ExchangeCapabilities (line 160) | func (s *EngineClient) ExchangeCapabilities(

FILE: execution/client/errors.go
  constant UnauthenticatedConnectionErrorStr (line 31) | UnauthenticatedConnectionErrorStr = `could not verify execution chain ID...
  method handleRPCError (line 48) | func (s *EngineClient) handleRPCError(
  function IsFatalError (line 125) | func IsFatalError(err error) bool {
  function IsNonFatalError (line 134) | func IsNonFatalError(err error) bool {

FILE: execution/client/ethclient/constants.go
  function BeaconKitSupportedCapabilities (line 25) | func BeaconKitSupportedCapabilities() []string {
  constant NewPayloadMethodV3 (line 42) | NewPayloadMethodV3 = "engine_newPayloadV3"
  constant NewPayloadMethodV4 (line 44) | NewPayloadMethodV4 = "engine_newPayloadV4"
  constant NewPayloadMethodV4P11 (line 46) | NewPayloadMethodV4P11 = "engine_newPayloadV4P11"
  constant ForkchoiceUpdatedMethodV3 (line 48) | ForkchoiceUpdatedMethodV3 = "engine_forkchoiceUpdatedV3"
  constant ForkchoiceUpdatedMethodV3P11 (line 50) | ForkchoiceUpdatedMethodV3P11 = "engine_forkchoiceUpdatedV3P11"
  constant GetPayloadMethodV3 (line 52) | GetPayloadMethodV3 = "engine_getPayloadV3"
  constant GetPayloadMethodV4 (line 54) | GetPayloadMethodV4 = "engine_getPayloadV4"
  constant GetPayloadMethodV4P11 (line 56) | GetPayloadMethodV4P11 = "engine_getPayloadV4P11"
  constant BlockByHashMethod (line 58) | BlockByHashMethod = "eth_getBlockByHash"
  constant BlockByNumberMethod (line 60) | BlockByNumberMethod = "eth_getBlockByNumber"
  constant ExchangeCapabilities (line 62) | ExchangeCapabilities = "engine_exchangeCapabilities"
  constant GetClientVersionV1 (line 64) | GetClientVersionV1 = "engine_getClientVersionV1"

FILE: execution/client/ethclient/engine.go
  method NewPayload (line 40) | func (s *Client) NewPayload(
  method NewPayloadV3 (line 95) | func (s *Client) NewPayloadV3(
  method NewPayloadV4 (line 111) | func (s *Client) NewPayloadV4(
  method NewPayloadV4P11 (line 128) | func (s *Client) NewPayloadV4P11(
  method ForkchoiceUpdated (line 150) | func (s *Client) ForkchoiceUpdated(
  method ForkchoiceUpdatedV3 (line 179) | func (s *Client) ForkchoiceUpdatedV3(
  method ForkchoiceUpdatedV3P11 (line 199) | func (s *Client) ForkchoiceUpdatedV3P11(
  method GetPayload (line 223) | func (s *Client) GetPayload(
  method GetPayloadV3 (line 249) | func (s *Client) GetPayloadV3(
  method GetPayloadV4 (line 262) | func (s *Client) GetPayloadV4(
  method GetPayloadV4P11 (line 275) | func (s *Client) GetPayloadV4P11(
  method ExchangeCapabilities (line 292) | func (s *Client) ExchangeCapabilities(
  method GetClientVersionV1 (line 306) | func (s *Client) GetClientVersionV1(

FILE: execution/client/ethclient/engine_test.go
  function TestGetPayloadV3NeverReturnsEmptyPayload (line 39) | func TestGetPayloadV3NeverReturnsEmptyPayload(t *testing.T) {
  function TestNewPayloadWithValidVersion (line 57) | func TestNewPayloadWithValidVersion(t *testing.T) {
  function TestNewPayloadWithInvalidVersion (line 73) | func TestNewPayloadWithInvalidVersion(t *testing.T) {
  function TestForkchoiceUpdatedWithValidVersion (line 85) | func TestForkchoiceUpdatedWithValidVersion(t *testing.T) {
  function TestForkchoiceUpdatedWithValidVersion2 (line 98) | func TestForkchoiceUpdatedWithValidVersion2(t *testing.T) {
  function TestForkchoiceUpdatedWithInvalidVersion (line 112) | func TestForkchoiceUpdatedWithInvalidVersion(t *testing.T) {
  function TestGetPayloadWithValidVersion (line 126) | func TestGetPayloadWithValidVersion(t *testing.T) {
  function TestGetPayloadWithInvalidVersion (line 139) | func TestGetPayloadWithInvalidVersion(t *testing.T) {
  type stubRPCClient (line 153) | type stubRPCClient struct
    method Initialize (line 157) | func (tc *stubRPCClient) Initialize() error     { return nil }
    method Start (line 158) | func (tc *stubRPCClient) Start(context.Context) {}
    method Call (line 159) | func (tc *stubRPCClient) Call(_ context.Context, target any, _ string,...
    method Close (line 173) | func (tc *stubRPCClient) Close() error { return nil }

FILE: execution/client/ethclient/eth.go
  method ChainID (line 37) | func (s *Client) ChainID(
  method FilterLogs (line 50) | func (s *Client) FilterLogs(
  method SubscribeFilterLogs (line 64) | func (s *Client) SubscribeFilterLogs(
  function toFilterArg (line 72) | func toFilterArg(q ethereum.FilterQuery) (interface{}, error) {
  function toBlockNumArg (line 95) | func toBlockNumArg(number *big.Int) string {

FILE: execution/client/ethclient/ethclient.go
  type Client (line 28) | type Client struct
  function New (line 33) | func New(client rpc.Client) *Client {

FILE: execution/client/ethclient/rpc/client.go
  type Client (line 40) | type Client interface
  type client (line 49) | type client struct
    method Start (line 99) | func (rpc *client) Start(ctx context.Context) {
    method Initialize (line 119) | func (rpc *client) Initialize() error {
    method Close (line 128) | func (rpc *client) Close() error {
    method Call (line 134) | func (rpc *client) Call(
    method callRaw (line 153) | func (rpc *client) callRaw(
  function NewClient (line 72) | func NewClient(

FILE: execution/client/ethclient/rpc/header.go
  method updateHeader (line 25) | func (rpc *client) updateHeader() error {

FILE: execution/client/ethclient/rpc/types.go
  type Request (line 30) | type Request struct
  type Response (line 42) | type Response struct
  type Error (line 54) | type Error struct
    method Error (line 62) | func (err Error) Error() string {
    method ErrorCode (line 67) | func (err Error) ErrorCode() int {

FILE: execution/client/helpers.go
  method createContextWithTimeout (line 33) | func (s *EngineClient) createContextWithTimeout(
  function processPayloadStatusResult (line 46) | func processPayloadStatusResult(

FILE: execution/client/interfaces.go
  type TelemetrySink (line 28) | type TelemetrySink interface

FILE: execution/client/metrics.go
  type clientMetrics (line 30) | type clientMetrics struct
    method measureForkchoiceUpdateDuration (line 50) | func (cm *clientMetrics) measureForkchoiceUpdateDuration(startTime tim...
    method measureNewPayloadDuration (line 59) | func (cm *clientMetrics) measureNewPayloadDuration(startTime time.Time) {
    method measureGetPayloadDuration (line 68) | func (cm *clientMetrics) measureGetPayloadDuration(startTime time.Time) {
    method incrementEngineAPITimeout (line 78) | func (cm *clientMetrics) incrementEngineAPITimeout() {
    method incrementForkchoiceUpdateTimeout (line 85) | func (cm *clientMetrics) incrementForkchoiceUpdateTimeout() {
    method incrementNewPayloadTimeout (line 92) | func (cm *clientMetrics) incrementNewPayloadTimeout() {
    method incrementGetPayloadTimeout (line 99) | func (cm *clientMetrics) incrementGetPayloadTimeout() {
    method incrementHTTPTimeoutCounter (line 105) | func (cm *clientMetrics) incrementHTTPTimeoutCounter() {
    method incrementTimeoutCounter (line 111) | func (cm *clientMetrics) incrementTimeoutCounter(metricName string) {
    method incrementParseErrorCounter (line 117) | func (cm *clientMetrics) incrementParseErrorCounter() {
    method incrementInvalidRequestCounter (line 123) | func (cm *clientMetrics) incrementInvalidRequestCounter() {
    method incrementMethodNotFoundCounter (line 129) | func (cm *clientMetrics) incrementMethodNotFoundCounter() {
    method incrementInvalidParamsCounter (line 135) | func (cm *clientMetrics) incrementInvalidParamsCounter() {
    method incrementInternalErrorCounter (line 141) | func (cm *clientMetrics) incrementInternalErrorCounter() {
    method incrementUnknownPayloadErrorCounter (line 148) | func (cm *clientMetrics) incrementUnknownPayloadErrorCounter() {
    method incrementInvalidForkchoiceStateCounter (line 157) | func (cm *clientMetrics) incrementInvalidForkchoiceStateCounter() {
    method incrementInvalidPayloadAttributesCounter (line 166) | func (cm *clientMetrics) incrementInvalidPayloadAttributesCounter() {
    method incrementRequestTooLargeCounter (line 174) | func (cm *clientMetrics) incrementRequestTooLargeCounter() {
    method incrementInternalServerErrorCounter (line 181) | func (cm *clientMetrics) incrementInternalServerErrorCounter() {
    method incrementErrorCounter (line 189) | func (cm *clientMetrics) incrementErrorCounter(metricName string) {
  function newClientMetrics (line 38) | func newClientMetrics(

FILE: execution/deposit/contract.go
  type WrappedDepositContract (line 38) | type WrappedDepositContract struct
    method ReadDeposits (line 64) | func (dc *WrappedDepositContract) ReadDeposits(
  function NewWrappedDepositContract (line 44) | func NewWrappedDepositContract(

FILE: execution/deposit/interfaces.go
  type Contract (line 31) | type Contract interface

FILE: execution/engine/engine.go
  type Engine (line 38) | type Engine struct
    method GetPayload (line 62) | func (ee *Engine) GetPayload(
    method NotifyForkchoiceUpdate (line 73) | func (ee *Engine) NotifyForkchoiceUpdate(
    method NotifyNewPayload (line 162) | func (ee *Engine) NotifyNewPayload(
    method newBackoff (line 266) | func (ee *Engine) newBackoff() *backoff.ExponentialBackOff {
  function New (line 49) | func New(

FILE: execution/engine/interfaces.go
  type TelemetrySink (line 24) | type TelemetrySink interface

FILE: execution/engine/metrics.go
  type engineMetrics (line 35) | type engineMetrics struct
    method markNewPayloadCalled (line 54) | func (em *engineMetrics) markNewPayloadCalled(
    method markNewPayloadValid (line 66) | func (em *engineMetrics) markNewPayloadValid(
    method markNewPayloadAcceptedSyncingPayloadStatus (line 83) | func (em *engineMetrics) markNewPayloadAcceptedSyncingPayloadStatus(
    method markNewPayloadInvalidPayloadStatus (line 105) | func (em *engineMetrics) markNewPayloadInvalidPayloadStatus(
    method markNewPayloadNonFatalError (line 120) | func (em *engineMetrics) markNewPayloadNonFatalError(
    method markNewPayloadFatalError (line 140) | func (em *engineMetrics) markNewPayloadFatalError(
    method markNewPayloadUndefinedError (line 160) | func (em *engineMetrics) markNewPayloadUndefinedError(
    method markNotifyForkchoiceUpdateCalled (line 179) | func (em *engineMetrics) markNotifyForkchoiceUpdateCalled(
    method markForkchoiceUpdateValid (line 190) | func (em *engineMetrics) markForkchoiceUpdateValid(
    method markForkchoiceUpdateSyncing (line 213) | func (em *engineMetrics) markForkchoiceUpdateSyncing(
    method markForkchoiceUpdateInvalid (line 236) | func (em *engineMetrics) markForkchoiceUpdateInvalid(
    method markForkchoiceUpdateFatalError (line 257) | func (em *engineMetrics) markForkchoiceUpdateFatalError(err error) {
    method markForkchoiceUpdateNonFatalError (line 271) | func (em *engineMetrics) markForkchoiceUpdateNonFatalError(err error) {
    method markForkchoiceUpdateUndefinedError (line 285) | func (em *engineMetrics) markForkchoiceUpdateUndefinedError(err error) {
  function newEngineMetrics (line 43) | func newEngineMetrics(

FILE: execution/requests/eip7002/interfaces.go
  type rpcClient (line 25) | type rpcClient interface

FILE: execution/requests/eip7002/withdrawal.go
  type feeOpts (line 36) | type feeOpts struct
  function GetWithdrawalFee (line 42) | func GetWithdrawalFee(ctx context.Context, client rpcClient) (*big.Int, ...
  function CreateWithdrawalRequestData (line 60) | func CreateWithdrawalRequestData(blsPubKey crypto.BLSPubkey, withdrawAmo...

FILE: execution/requests/eip7002/withdrawal_test.go
  function TestCreateWithdrawalRequestData (line 34) | func TestCreateWithdrawalRequestData(t *testing.T) {

FILE: execution/requests/eip7251/consolidation.go
  type feeOpts (line 34) | type feeOpts struct
  function GetConsolidationFee (line 40) | func GetConsolidationFee(ctx context.Context, client rpcClient) (*big.In...
  function CreateConsolidationRequestData (line 58) | func CreateConsolidationRequestData(sourcePubKey, targetPubKey crypto.BL...

FILE: execution/requests/eip7251/interfaces.go
  type rpcClient (line 25) | type rpcClient interface

FILE: gethlib/deposit/contract.abigen.go
  function DeployDepositContract (line 47) | func DeployDepositContract(auth *bind.TransactOpts, backend bind.Contrac...
  type DepositContract (line 64) | type DepositContract struct
  type DepositContractCaller (line 71) | type DepositContractCaller struct
    method DepositCount (line 208) | func (_DepositContract *DepositContractCaller) DepositCount(opts *bind...
    method GenesisDepositsRoot (line 239) | func (_DepositContract *DepositContractCaller) GenesisDepositsRoot(opt...
    method GetOperator (line 270) | func (_DepositContract *DepositContractCaller) GetOperator(opts *bind....
    method QueuedOperator (line 301) | func (_DepositContract *DepositContractCaller) QueuedOperator(opts *bi...
    method SupportsInterface (line 346) | func (_DepositContract *DepositContractCaller) SupportsInterface(opts ...
  type DepositContractTransactor (line 76) | type DepositContractTransactor struct
    method AcceptOperatorChange (line 377) | func (_DepositContract *DepositContractTransactor) AcceptOperatorChang...
    method CancelOperatorChange (line 398) | func (_DepositContract *DepositContractTransactor) CancelOperatorChang...
    method Deposit (line 419) | func (_DepositContract *DepositContractTransactor) Deposit(opts *bind....
    method RequestOperatorChange (line 440) | func (_DepositContract *DepositContractTransactor) RequestOperatorChan...
  type DepositContractFilterer (line 81) | type DepositContractFilterer struct
    method FilterDeposit (line 538) | func (_DepositContract *DepositContractFilterer) FilterDeposit(opts *b...
    method WatchDeposit (line 550) | func (_DepositContract *DepositContractFilterer) WatchDeposit(opts *bi...
    method ParseDeposit (line 587) | func (_DepositContract *DepositContractFilterer) ParseDeposit(log type...
    method FilterOperatorChangeCancelled (line 672) | func (_DepositContract *DepositContractFilterer) FilterOperatorChangeC...
    method WatchOperatorChangeCancelled (line 689) | func (_DepositContract *DepositContractFilterer) WatchOperatorChangeCa...
    method ParseOperatorChangeCancelled (line 731) | func (_DepositContract *DepositContractFilterer) ParseOperatorChangeCa...
    method FilterOperatorChangeQueued (line 819) | func (_DepositContract *DepositContractFilterer) FilterOperatorChangeQ...
    method WatchOperatorChangeQueued (line 836) | func (_DepositContract *DepositContractFilterer) WatchOperatorChangeQu...
    method ParseOperatorChangeQueued (line 878) | func (_DepositContract *DepositContractFilterer) ParseOperatorChangeQu...
    method FilterOperatorUpdated (line 965) | func (_DepositContract *DepositContractFilterer) FilterOperatorUpdated...
    method WatchOperatorUpdated (line 982) | func (_DepositContract *DepositContractFilterer) WatchOperatorUpdated(...
    method ParseOperatorUpdated (line 1024) | func (_DepositContract *DepositContractFilterer) ParseOperatorUpdated(...
  type DepositContractSession (line 87) | type DepositContractSession struct
    method DepositCount (line 225) | func (_DepositContract *DepositContractSession) DepositCount() (uint64...
    method GenesisDepositsRoot (line 256) | func (_DepositContract *DepositContractSession) GenesisDepositsRoot() ...
    method GetOperator (line 287) | func (_DepositContract *DepositContractSession) GetOperator(pubkey []b...
    method QueuedOperator (line 326) | func (_DepositContract *DepositContractSession) QueuedOperator(arg0 []...
    method SupportsInterface (line 363) | func (_DepositContract *DepositContractSession) SupportsInterface(inte...
    method AcceptOperatorChange (line 384) | func (_DepositContract *DepositContractSession) AcceptOperatorChange(p...
    method CancelOperatorChange (line 405) | func (_DepositContract *DepositContractSession) CancelOperatorChange(p...
    method Deposit (line 426) | func (_DepositContract *DepositContractSession) Deposit(pubkey []byte,...
    method RequestOperatorChange (line 447) | func (_DepositContract *DepositContractSession) RequestOperatorChange(...
  type DepositContractCallerSession (line 95) | type DepositContractCallerSession struct
    method DepositCount (line 232) | func (_DepositContract *DepositContractCallerSession) DepositCount() (...
    method GenesisDepositsRoot (line 263) | func (_DepositContract *DepositContractCallerSession) GenesisDepositsR...
    method GetOperator (line 294) | func (_DepositContract *DepositContractCallerSession) GetOperator(pubk...
    method QueuedOperator (line 336) | func (_DepositContract *DepositContractCallerSession) QueuedOperator(a...
    method SupportsInterface (line 370) | func (_DepositContract *DepositContractCallerSession) SupportsInterfac...
  type DepositContractTransactorSession (line 102) | type DepositContractTransactorSession struct
    method AcceptOperatorChange (line 391) | func (_DepositContract *DepositContractTransactorSession) AcceptOperat...
    method CancelOperatorChange (line 412) | func (_DepositContract *DepositContractTransactorSession) CancelOperat...
    method Deposit (line 433) | func (_DepositContract *DepositContractTransactorSession) Deposit(pubk...
    method RequestOperatorChange (line 454) | func (_DepositContract *DepositContractTransactorSession) RequestOpera...
  type DepositContractRaw (line 108) | type DepositContractRaw struct
    method Call (line 171) | func (_DepositContract *DepositContractRaw) Call(opts *bind.CallOpts, ...
    method Transfer (line 177) | func (_DepositContract *DepositContractRaw) Transfer(opts *bind.Transa...
    method Transact (line 182) | func (_DepositContract *DepositContractRaw) Transact(opts *bind.Transa...
  type DepositContractCallerRaw (line 113) | type DepositContractCallerRaw struct
    method Call (line 190) | func (_DepositContract *DepositContractCallerRaw) Call(opts *bind.Call...
  type DepositContractTransactorRaw (line 118) | type DepositContractTransactorRaw struct
    method Transfer (line 196) | func (_DepositContract *DepositContractTransactorRaw) Transfer(opts *b...
    method Transact (line 201) | func (_DepositContract *DepositContractTransactorRaw) Transact(opts *b...
  function NewDepositContract (line 123) | func NewDepositContract(address common.Address, backend bind.ContractBac...
  function NewDepositContractCaller (line 132) | func NewDepositContractCaller(address common.Address, caller bind.Contra...
  function NewDepositContractTransactor (line 141) | func NewDepositContractTransactor(address common.Address, transactor bin...
  function NewDepositContractFilterer (line 150) | func NewDepositContractFilterer(address common.Address, filterer bind.Co...
  function bindDepositContract (line 159) | func bindDepositContract(address common.Address, caller bind.ContractCal...
  type DepositContractDepositIterator (line 459) | type DepositContractDepositIterator struct
    method Next (line 474) | func (it *DepositContractDepositIterator) Next() bool {
    method Error (line 514) | func (it *DepositContractDepositIterator) Error() error {
    method Close (line 520) | func (it *DepositContractDepositIterator) Close() error {
  type DepositContractDeposit (line 526) | type DepositContractDeposit struct
  type DepositContractOperatorChangeCancelledIterator (line 597) | type DepositContractOperatorChangeCancelledIterator struct
    method Next (line 612) | func (it *DepositContractOperatorChangeCancelledIterator) Next() bool {
    method Error (line 652) | func (it *DepositContractOperatorChangeCancelledIterator) Error() error {
    method Close (line 658) | func (it *DepositContractOperatorChangeCancelledIterator) Close() error {
  type DepositContractOperatorChangeCancelled (line 664) | type DepositContractOperatorChangeCancelled struct
  type DepositContractOperatorChangeQueuedIterator (line 741) | type DepositContractOperatorChangeQueuedIterator struct
    method Next (line 756) | func (it *DepositContractOperatorChangeQueuedIterator) Next() bool {
    method Error (line 796) | func (it *DepositContractOperatorChangeQueuedIterator) Error() error {
    method Close (line 802) | func (it *DepositContractOperatorChangeQueuedIterator) Close() error {
  type DepositContractOperatorChangeQueued (line 808) | type DepositContractOperatorChangeQueued struct
  type DepositContractOperatorUpdatedIterator (line 888) | type DepositContractOperatorUpdatedIterator struct
    method Next (line 903) | func (it *DepositContractOperatorUpdatedIterator) Next() bool {
    method Error (line 943) | func (it *DepositContractOperatorUpdatedIterator) Error() error {
    method Close (line 949) | func (it *DepositContractOperatorUpdatedIterator) Close() error {
  type DepositContractOperatorUpdated (line 955) | type DepositContractOperatorUpdated struct

FILE: gethlib/ethclient/ethclient.go
  type Client (line 41) | type Client struct
    method BlockByNumber (line 51) | func (c *Client) BlockByNumber(ctx context.Context, number *big.Int) (...
    method BlockByHash (line 56) | func (c *Client) BlockByHash(ctx context.Context, hash gethcommon.Hash...
    method TransactionByHash (line 61) | func (c *Client) TransactionByHash(
    method TransactionInBlock (line 80) | func (c *Client) TransactionInBlock(ctx context.Context, blockHash get...
    method getBlock (line 241) | func (c *Client) getBlock(ctx context.Context, method string, args ......
  function Wrap (line 46) | func Wrap(c *gethclient.Client) *Client {
  type rpcBlock (line 96) | type rpcBlock struct
  type rpcTransaction (line 103) | type rpcTransaction struct
    method UnmarshalJSON (line 114) | func (tx *rpcTransaction) UnmarshalJSON(msg []byte) error {
  type txExtraInfo (line 108) | type txExtraInfo struct
  type rpcHeader (line 121) | type rpcHeader struct
    method toHeader (line 147) | func (h *rpcHeader) toHeader() (*types.Header, error) {
  function ensureTransactionHasRequiredSignature (line 301) | func ensureTransactionHasRequiredSignature(tx *types.Transaction) error {
  function toBlockNumArg (line 315) | func toBlockNumArg(number *big.Int) string {

FILE: gethlib/ethclient/ethclient_test.go
  function TestBlockByNumberWithPoLTransaction (line 49) | func TestBlockByNumberWithPoLTransaction(t *testing.T) {
  function TestBlockByHashWithPoLTransaction (line 69) | func TestBlockByHashWithPoLTransaction(t *testing.T) {
  function TestTransactionByHashWithPoLTransaction (line 89) | func TestTransactionByHashWithPoLTransaction(t *testing.T) {
  function TestTransactionInBlockWithPoLTransaction (line 109) | func TestTransactionInBlockWithPoLTransaction(t *testing.T) {
  type mockEthService (line 126) | type mockEthService struct
    method GetBlockByNumber (line 128) | func (s *mockEthService) GetBlockByNumber(ctx context.Context, number ...
    method GetBlockByHash (line 135) | func (s *mockEthService) GetBlockByHash(ctx context.Context, hash geth...
    method GetTransactionByHash (line 142) | func (s *mockEthService) GetTransactionByHash(ctx context.Context, has...
    method GetTransactionByBlockHashAndIndex (line 148) | func (s *mockEthService) GetTransactionByBlockHashAndIndex(
  function newMockClient (line 159) | func newMockClient(t *testing.T) *beraclient.Client {
  function mockTransactionJSON (line 175) | func mockTransactionJSON() json.RawMessage {
  function mockTransactionObject (line 184) | func mockTransactionObject() map[string]any {
  function mockBlockJSON (line 201) | func mockBlockJSON() json.RawMessage {

FILE: gethlib/ssztest/contract.abigen.go
  function DeploySSZTest (line 47) | func DeploySSZTest(auth *bind.TransactOpts, backend bind.ContractBackend...
  type SSZTest (line 64) | type SSZTest struct
  type SSZTestCaller (line 71) | type SSZTestCaller struct
    method BEACONROOTS (line 208) | func (_SSZTest *SSZTestCaller) BEACONROOTS(opts *bind.CallOpts) (commo...
    method GetParentBlockRootAt (line 239) | func (_SSZTest *SSZTestCaller) GetParentBlockRootAt(opts *bind.CallOpt...
    method MustVerifyProof (line 270) | func (_SSZTest *SSZTestCaller) MustVerifyProof(opts *bind.CallOpts, pr...
    method VerifyProof (line 299) | func (_SSZTest *SSZTestCaller) VerifyProof(opts *bind.CallOpts, proof ...
  type SSZTestTransactor (line 76) | type SSZTestTransactor struct
  type SSZTestFilterer (line 81) | type SSZTestFilterer struct
  type SSZTestSession (line 87) | type SSZTestSession struct
    method BEACONROOTS (line 225) | func (_SSZTest *SSZTestSession) BEACONROOTS() (common.Address, error) {
    method GetParentBlockRootAt (line 256) | func (_SSZTest *SSZTestSession) GetParentBlockRootAt(ts uint64) ([32]b...
    method MustVerifyProof (line 285) | func (_SSZTest *SSZTestSession) MustVerifyProof(proof [][32]byte, root...
    method VerifyProof (line 316) | func (_SSZTest *SSZTestSession) VerifyProof(proof [][32]byte, root [32...
  type SSZTestCallerSession (line 95) | type SSZTestCallerSession struct
    method BEACONROOTS (line 232) | func (_SSZTest *SSZTestCallerSession) BEACONROOTS() (common.Address, e...
    method GetParentBlockRootAt (line 263) | func (_SSZTest *SSZTestCallerSession) GetParentBlockRootAt(ts uint64) ...
    method MustVerifyProof (line 292) | func (_SSZTest *SSZTestCallerSession) MustVerifyProof(proof [][32]byte...
    method VerifyProof (line 323) | func (_SSZTest *SSZTestCallerSession) VerifyProof(proof [][32]byte, ro...
  type SSZTestTransactorSession (line 102) | type SSZTestTransactorSession struct
  type SSZTestRaw (line 108) | type SSZTestRaw struct
    method Call (line 171) | func (_SSZTest *SSZTestRaw) Call(opts *bind.CallOpts, result *[]interf...
    method Transfer (line 177) | func (_SSZTest *SSZTestRaw) Transfer(opts *bind.TransactOpts) (*types....
    method Transact (line 182) | func (_SSZTest *SSZTestRaw) Transact(opts *bind.TransactOpts, method s...
  type SSZTestCallerRaw (line 113) | type SSZTestCallerRaw struct
    method Call (line 190) | func (_SSZTest *SSZTestCallerRaw) Call(opts *bind.CallOpts, result *[]...
  type SSZTestTransactorRaw (line 118) | type SSZTestTransactorRaw struct
    method Transfer (line 196) | func (_SSZTest *SSZTestTransactorRaw) Transfer(opts *bind.TransactOpts...
    method Transact (line 201) | func (_SSZTest *SSZTestTransactorRaw) Transact(opts *bind.TransactOpts...
  function NewSSZTest (line 123) | func NewSSZTest(address common.Address, backend bind.ContractBackend) (*...
  function NewSSZTestCaller (line 132) | func NewSSZTestCaller(address common.Address, caller bind.ContractCaller...
  function NewSSZTestTransactor (line 141) | func NewSSZTestTransactor(address common.Address, transactor bind.Contra...
  function NewSSZTestFilterer (line 150) | func NewSSZTestFilterer(address common.Address, filterer bind.ContractFi...
  function bindSSZTest (line 159) | func bindSSZTest(address common.Address, caller bind.ContractCaller, tra...

FILE: gethlib/types/block.go
  type Block (line 52) | type Block struct
    method WithBody (line 146) | func (b *Block) WithBody(body Body) *Block {
    method Hash (line 161) | func (b *Block) Hash() common.Hash {
    method Transactions (line 172) | func (b *Block) Transactions() Transactions         { return b.transac...
    method Withdrawals (line 173) | func (b *Block) Withdrawals() coretypes.Withdrawals { return b.withdra...
    method GasLimit (line 176) | func (b *Block) GasLimit() uint64         { return b.header.GasLimit }
    method GasUsed (line 177) | func (b *Block) GasUsed() uint64          { return b.header.GasUsed }
    method Time (line 178) | func (b *Block) Time() uint64             { return b.header.Time }
    method NumberU64 (line 179) | func (b *Block) NumberU64() uint64        { return b.header.Number.Uin...
    method MixDigest (line 180) | func (b *Block) MixDigest() common.Hash   { return b.header.MixDigest }
    method Bloom (line 181) | func (b *Block) Bloom() coretypes.Bloom   { return b.header.Bloom }
    method Coinbase (line 182) | func (b *Block) Coinbase() common.Address { return b.header.Coinbase }
    method Root (line 183) | func (b *Block) Root() common.Hash        { return b.header.Root }
    method ParentHash (line 184) | func (b *Block) ParentHash() common.Hash  { return b.header.ParentHash }
    method ReceiptHash (line 185) | func (b *Block) ReceiptHash() common.Hash { return b.header.ReceiptHash }
    method Extra (line 186) | func (b *Block) Extra() []byte            { return common.CopyBytes(b....
    method BaseFee (line 188) | func (b *Block) BaseFee() *big.Int {
    method ExcessBlobGas (line 195) | func (b *Block) ExcessBlobGas() *uint64 {
    method BlobGasUsed (line 204) | func (b *Block) BlobGasUsed() *uint64 {
  type Body (line 69) | type Body struct
  function NewBlock (line 83) | func NewBlock(header *Header, body *Body, receipts []*coretypes.Receipt,...
  function NewBlockWithHeader (line 140) | func NewBlockWithHeader(header *Header) *Block {
  function BlockToExecutableData (line 215) | func BlockToExecutableData(
  function encodeTransactions (line 275) | func encodeTransactions(txs []*Transaction) [][]byte {

FILE: gethlib/types/config.go
  type ChainConfig (line 35) | type ChainConfig struct
    method IsLondon (line 158) | func (c *ChainConfig) IsLondon(num *big.Int) bool {
    method IsShanghai (line 163) | func (c *ChainConfig) IsShanghai(num *big.Int, time uint64) bool {
    method IsCancun (line 168) | func (c *ChainConfig) IsCancun(num *big.Int, time uint64) bool {
    method IsPrague (line 173) | func (c *ChainConfig) IsPrague(num *big.Int, time uint64) bool {
    method IsPrague1 (line 179) | func (c *ChainConfig) IsPrague1(num *big.Int, time uint64) bool {
    method IsVerkleGenesis (line 193) | func (c *ChainConfig) IsVerkleGenesis() bool {
  type BerachainConfig (line 105) | type BerachainConfig struct
  type Prague1Config (line 120) | type Prague1Config struct
  type Prague2Config (line 132) | type Prague2Config struct
  type Prague3Config (line 140) | type Prague3Config struct
  type Prague4Config (line 152) | type Prague4Config struct
  function isBlockForked (line 200) | func isBlockForked(s, head *big.Int) bool {
  function isTimestampForked (line 210) | func isTimestampForked(s *uint64, head uint64) bool {

FILE: gethlib/types/genesis.go
  type Genesis (line 45) | type Genesis struct
    method IsVerkle (line 68) | func (g *Genesis) IsVerkle() bool {
    method ToBlock (line 73) | func (g *Genesis) ToBlock() *Block {
    method UnmarshalJSON (line 82) | func (g *Genesis) UnmarshalJSON(input []byte) error {
    method toBlockWithRoot (line 161) | func (g *Genesis) toBlockWithRoot(root common.Hash) *Block {
  function hashAlloc (line 234) | func hashAlloc(ga *types.GenesisAlloc, isVerkle bool) (common.Hash, erro...

FILE: gethlib/types/header.go
  type Header (line 40) | type Header struct
    method Hash 
Condensed preview — 804 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,279K chars).
[
  {
    "path": ".dockerignore",
    "chars": 124,
    "preview": "assets/\nbuild/\nbin/\ndocs/\nnetworks/\nproto/\ntools/\nkurtosis/\ntesting/\n.github/\n.git/\n.vscode/\n*.md\ncontracts/\ndocs/\nscrip"
  },
  {
    "path": ".gitattributes",
    "chars": 25,
    "preview": "docs/** linguist-vendored"
  },
  {
    "path": ".github/workflows/berachain_release.asc",
    "chars": 660,
    "preview": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmDMEaIky1hYJKwYBBAHaRw8BAQdAnxP3mNWC+miF0OKvOg4+BzzswbrTWLbluSJU\n+NBib3q0H2NhbGJlc"
  },
  {
    "path": ".github/workflows/docker-nightly-preconf.yml",
    "chars": 2046,
    "preview": "# SPDX-License-Identifier: MIT\n#\n# Copyright (c) 2025 Berachain Foundation\n#\n# Permission is hereby granted, free of cha"
  },
  {
    "path": ".github/workflows/pipeline.yml",
    "chars": 9548,
    "preview": "# SPDX-License-Identifier: MIT\n#\n# Copyright (c) 2025 Berachain Foundation\n#\n# Permission is hereby granted, free of cha"
  },
  {
    "path": ".github/workflows/release.yaml",
    "chars": 9526,
    "preview": "# SPDX-License-Identifier: MIT\n#\n# Copyright (c) 2025 Berachain Foundation\n#\n# Permission is hereby granted, free of cha"
  },
  {
    "path": ".github/workflows/vuln-and-dep-check.yml",
    "chars": 2864,
    "preview": "# SPDX-License-Identifier: MIT\n#\n# Copyright (c) 2025 Berachain Foundation\n#\n# Permission is hereby granted, free of cha"
  },
  {
    "path": ".gitignore",
    "chars": 3483,
    "preview": "###########\n# Project #\n###########\n\n# Outputs\nbin/\n./out/\ndata/\nsite/\ncontracts/cache\ncontracts/out\ntmp/\ncscope.files\n\n"
  },
  {
    "path": ".gitmodules",
    "chars": 225,
    "preview": "[submodule \"contracts/lib/solady\"]\n\tpath = contracts/lib/solady\n\turl = https://github.com/Vectorized/solady\n[submodule \""
  },
  {
    "path": ".golangci.yaml",
    "chars": 17026,
    "preview": "# This code is licensed under the terms of the MIT license https://opensource.org/license/mit\n# Copyright (c) 2021 Marat"
  },
  {
    "path": ".mockery.yaml",
    "chars": 3367,
    "preview": "# SPDX-License-Identifier: MIT\n#\n# Copyright (c) 2025 Berachain Foundation\n#\n# Permission is hereby granted, free of cha"
  },
  {
    "path": ".vscode/launch.json",
    "chars": 5358,
    "preview": "{\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"name\": \"Init local devnet\",\n            \"type\":"
  },
  {
    "path": ".vscode/tasks.json",
    "chars": 267,
    "preview": "{\n    \"version\": \"2.0.0\",\n    \"tasks\": [\n        {\n            \"label\": \"build\",\n            \"type\": \"shell\",\n          "
  },
  {
    "path": "CLAUDE.md",
    "chars": 28919,
    "preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
  },
  {
    "path": "CODEOWNERS",
    "chars": 28,
    "preview": "*     @berachain/core-admin\n"
  },
  {
    "path": "Dockerfile",
    "chars": 3729,
    "preview": "# syntax=docker/dockerfile:1\n#\n# Copyright (C) 2022, Berachain Foundation. All rights reserved.\n# See the file LICENSE f"
  },
  {
    "path": "LICENSE",
    "chars": 4694,
    "preview": "Business Source License 1.1\n\nLicense text copyright © 2023 MariaDB plc, All Rights Reserved.\n“Business Source License” i"
  },
  {
    "path": "LICENSE.header",
    "chars": 914,
    "preview": "SPDX-License-Identifier: BUSL-1.1\n\nCopyright (C) 2025, Berachain Foundation. All rights reserved.\nUse of this software i"
  },
  {
    "path": "Makefile",
    "chars": 1088,
    "preview": "#!/usr/bin/make -f\n\ninclude scripts/build/build.mk\ninclude scripts/build/codegen.mk\ninclude scripts/build/constants.mk\ni"
  },
  {
    "path": "README.md",
    "chars": 7376,
    "preview": "<div align=\"center\">\n  <a href=\"https://github.com/berachain/beacon-kit\">\n    <img alt=\"beacon-kit-banner\" src=\".github/"
  },
  {
    "path": "beacon/blockchain/common.go",
    "chars": 2217,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/blockchain/deposit.go",
    "chars": 3648,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/blockchain/errors.go",
    "chars": 2222,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/blockchain/execution_engine.go",
    "chars": 2829,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/blockchain/finalize_block.go",
    "chars": 7409,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/blockchain/init_chain.go",
    "chars": 2869,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/blockchain/interfaces.go",
    "chars": 6677,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/blockchain/metrics.go",
    "chars": 3562,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/blockchain/mocks/genesis_state_processor.mock.go",
    "chars": 4354,
    "preview": "// Code generated by mockery v2.53.5. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcommon \"github.com/berachain/beacon-kit/pri"
  },
  {
    "path": "beacon/blockchain/mocks/local_builder.mock.go",
    "chars": 6363,
    "preview": "// Code generated by mockery v2.53.5. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcontext \"context\"\n\n\ttypes \"github.com/berac"
  },
  {
    "path": "beacon/blockchain/mocks/storage_backend.mock.go",
    "chars": 6685,
    "preview": "// Code generated by mockery v2.53.5. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tblock \"github.com/berachain/beacon-kit/stor"
  },
  {
    "path": "beacon/blockchain/payload.go",
    "chars": 8834,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/blockchain/payload_test.go",
    "chars": 13971,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/blockchain/process_proposal.go",
    "chars": 14670,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/blockchain/pruning.go",
    "chars": 2151,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/blockchain/service.go",
    "chars": 5631,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/payload-time/time.go",
    "chars": 2158,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/payload-time/time_test.go",
    "chars": 3401,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/validator/block_builder.go",
    "chars": 14410,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/validator/config.go",
    "chars": 1408,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/validator/errors.go",
    "chars": 1534,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/validator/interfaces.go",
    "chars": 4511,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/validator/metrics.go",
    "chars": 2376,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "beacon/validator/service.go",
    "chars": 2837,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "chain/chain_ids.go",
    "chars": 1461,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "chain/data.go",
    "chars": 10017,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "chain/errors.go",
    "chars": 1621,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "chain/helpers.go",
    "chars": 2737,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "chain/helpers_test.go",
    "chars": 4241,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "chain/spec.go",
    "chars": 19690,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "chain/spec_test.go",
    "chars": 10557,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/builder/builder.go",
    "chars": 3649,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/builder/config.go",
    "chars": 2120,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/builder/options.go",
    "chars": 2078,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/deposit/commands.go",
    "chars": 1754,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/deposit/commands_test.go",
    "chars": 3121,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/deposit/create.go",
    "chars": 6459,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/deposit/db_check.go",
    "chars": 3262,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/deposit/errors.go",
    "chars": 1648,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/deposit/interfaces.go",
    "chars": 1227,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/deposit/keys.go",
    "chars": 3177,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/deposit/utils.go",
    "chars": 2150,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/deposit/validate.go",
    "chars": 4605,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/genesis/collect.go",
    "chars": 4671,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/genesis/deposit.go",
    "chars": 6037,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/genesis/deposit_test.go",
    "chars": 2622,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/genesis/genesis.go",
    "chars": 1967,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/genesis/interfaces.go",
    "chars": 1312,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/genesis/payload.go",
    "chars": 6867,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/genesis/root.go",
    "chars": 1942,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/genesis/storage.go",
    "chars": 6292,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/genesis/storage_test.go",
    "chars": 5618,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/genesis/types/constants.go",
    "chars": 1097,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/genesis/types/json.go",
    "chars": 1278,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/initialize/initialize.go",
    "chars": 8433,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/jwt/errors.go",
    "chars": 1163,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/jwt/jwt.go",
    "chars": 5656,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/jwt/jwt_test.go",
    "chars": 5388,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/root.go",
    "chars": 2683,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/server/cmd/execute.go",
    "chars": 2941,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/server/pruning.go",
    "chars": 2207,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/server/rollback.go",
    "chars": 2951,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/server/start.go",
    "chars": 5049,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/server/types/types.go",
    "chars": 1722,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/commands/setup.go",
    "chars": 2383,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/components/client_context.go",
    "chars": 1848,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/components/defaults.go",
    "chars": 1165,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/components/logger.go",
    "chars": 1613,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/config/app.go",
    "chars": 3471,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/config/client.go",
    "chars": 1310,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/config/comet.go",
    "chars": 2220,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/config/errors.go",
    "chars": 1144,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/config/server.go",
    "chars": 4967,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/context/cmd.go",
    "chars": 2133,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/context/keys.go",
    "chars": 1168,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/flags/flags.go",
    "chars": 5526,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/utils/genesis/interfaces.go",
    "chars": 1082,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/utils/genesis/root.go",
    "chars": 2844,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/utils/genesis/root_test.go",
    "chars": 4045,
    "preview": "//go:build test\n\n// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserve"
  },
  {
    "path": "cli/utils/parser/errors.go",
    "chars": 1960,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cli/utils/parser/validator.go",
    "chars": 3457,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cmd/beacond/defaults.go",
    "chars": 2121,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "cmd/beacond/main.go",
    "chars": 2597,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "codecov.yml",
    "chars": 1558,
    "preview": "# SPDX-License-Identifier: MIT\n#\n# Copyright (c) 2025 Berachain Foundation\n#\n# Permission is hereby granted, free of cha"
  },
  {
    "path": "config/config/config.go",
    "chars": 4599,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "config/config/config.toml.tpl",
    "chars": 4458,
    "preview": "# This is a TOML config file.\n# For more information, see https://github.com/toml-lang/toml\n\n###########################"
  },
  {
    "path": "config/config/toml.go",
    "chars": 2354,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "config/config.go",
    "chars": 5069,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "config/spec/creator.go",
    "chars": 5075,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "config/spec/creator_test.go",
    "chars": 6163,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "config/spec/defaults.go",
    "chars": 3090,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "config/spec/defaults_test.go",
    "chars": 1934,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "config/spec/devnet.go",
    "chars": 5059,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "config/spec/mainnet.go",
    "chars": 9919,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "config/spec/testnet.go",
    "chars": 2322,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "config/template/template.go",
    "chars": 4254,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "config/viper/parser.go",
    "chars": 3286,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/cli/commands.go",
    "chars": 7328,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/abci.go",
    "chars": 7609,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/abci_utils.go",
    "chars": 3161,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/cache/cache.go",
    "chars": 5111,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/cache/cache_test.go",
    "chars": 4106,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/cache/state.go",
    "chars": 1847,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/commit.go",
    "chars": 4466,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/configs.go",
    "chars": 6637,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/configs_test.go",
    "chars": 2605,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/delay/config.go",
    "chars": 3828,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/delay/delay.go",
    "chars": 4349,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/delay/delay_test.go",
    "chars": 4918,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/delay/errors.go",
    "chars": 1330,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/encoding/encoding.go",
    "chars": 3326,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/encoding/errors.go",
    "chars": 2123,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/encoding/interfaces.go",
    "chars": 1194,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/finalize_block.go",
    "chars": 9854,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/genesis.go",
    "chars": 8237,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/init_chain.go",
    "chars": 4003,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/interfaces.go",
    "chars": 1447,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/log/cmt_logger.go",
    "chars": 1506,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/log/sdk_logger.go",
    "chars": 1471,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/node_api_support.go",
    "chars": 3111,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/options.go",
    "chars": 2969,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/prepare_proposal.go",
    "chars": 2892,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/process_proposal.go",
    "chars": 3410,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/service.go",
    "chars": 12362,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/cometbft/service/state/state.go",
    "chars": 2899,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/types/common.go",
    "chars": 1648,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/types/consensus_block.go",
    "chars": 1710,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus/types/slot_data.go",
    "chars": 2854,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/attestation_data.go",
    "chars": 4657,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/attestation_data_test.go",
    "chars": 3832,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/attester_slashings.go",
    "chars": 2948,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/attestions.go",
    "chars": 2826,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/block.go",
    "chars": 6149,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/block_test.go",
    "chars": 5263,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/bls_to_execution_changes.go",
    "chars": 3024,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/body.go",
    "chars": 13650,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/body_test.go",
    "chars": 11804,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/consolidation_request.go",
    "chars": 4990,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/consolidation_request_test.go",
    "chars": 7114,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/deposit.go",
    "chars": 6358,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/deposit_message.go",
    "chars": 4450,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/deposit_message_test.go",
    "chars": 4283,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/deposit_request.go",
    "chars": 2814,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/deposit_request_test.go",
    "chars": 13992,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/deposit_test.go",
    "chars": 5549,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/deposits.go",
    "chars": 2452,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/errors.go",
    "chars": 2393,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/eth1data.go",
    "chars": 4412,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/eth1data_test.go",
    "chars": 2769,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/execution_requests.go",
    "chars": 6615,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/execution_requests_test.go",
    "chars": 22200,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/fork.go",
    "chars": 4473,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/fork_data.go",
    "chars": 3856,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/fork_data_test.go",
    "chars": 3743,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/fork_test.go",
    "chars": 2951,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/genesis.go",
    "chars": 5152,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/genesis_test.go",
    "chars": 10046,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/header.go",
    "chars": 7556,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/header_test.go",
    "chars": 6498,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/interfaces.go",
    "chars": 1184,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/mocks/blobs_bundle.mock.go",
    "chars": 4619,
    "preview": "// Code generated by mockery v2.49.0. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tbytes \"github.com/berachain/beacon-kit/prim"
  },
  {
    "path": "consensus-types/types/mocks/built_execution_payload_env.mock.go",
    "chars": 8860,
    "preview": "// Code generated by mockery v2.53.5. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\ttypes \"github.com/berachain/beacon-kit/cons"
  },
  {
    "path": "consensus-types/types/mocks/new_payload_request.mock.go",
    "chars": 11836,
    "preview": "// Code generated by mockery v2.53.5. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\ttypes \"github.com/berachain/beacon-kit/cons"
  },
  {
    "path": "consensus-types/types/mocks/proposer_domain.mock.go",
    "chars": 2297,
    "preview": "// Code generated by mockery v2.53.5. DO NOT EDIT.\n\npackage mocks\n\nimport (\n\tcommon \"github.com/berachain/beacon-kit/pri"
  },
  {
    "path": "consensus-types/types/mocks/unused_enforcer.mock.go",
    "chars": 2043,
    "preview": "// Code generated by mockery v2.49.0. DO NOT EDIT.\n\npackage mocks\n\nimport mock \"github.com/stretchr/testify/mock\"\n\n// Un"
  },
  {
    "path": "consensus-types/types/payload.go",
    "chars": 20079,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/payload_env.go",
    "chars": 4196,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/payload_header.go",
    "chars": 17730,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/payload_header_test.go",
    "chars": 16971,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/payload_requests.go",
    "chars": 11729,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/payload_requests_test.go",
    "chars": 6142,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/payload_test.go",
    "chars": 11837,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/pending_partial_withdrawal.go",
    "chars": 6280,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/pending_partial_withdrawal_test.go",
    "chars": 7668,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/proposer_slashings.go",
    "chars": 2936,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/signed_beacon_block.go",
    "chars": 5053,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/signed_beacon_block_header.go",
    "chars": 4013,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/signed_beacon_block_header_test.go",
    "chars": 3634,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/signed_beacon_block_test.go",
    "chars": 6748,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  },
  {
    "path": "consensus-types/types/signing_data.go",
    "chars": 3651,
    "preview": "// SPDX-License-Identifier: BUSL-1.1\n//\n// Copyright (C) 2025, Berachain Foundation. All rights reserved.\n// Use of this"
  }
]

// ... and 604 more files (download for full content)

About this extraction

This page contains the full source code of the berachain/beacon-kit GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 804 files (53.1 MB), approximately 1.8M tokens, and a symbol index with 4272 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!