Files
nixpkgs/pkgs/by-name/li/lighthouse/package.nix
Philip White 1b3e1e8e6f lighthouse: 8.1.0 -> 8.2.2
The autoupdate bot has been unable to update to new versions because the sqlite
patch could not apply cleanly. This change updates the patch.
2026-09-02 10:23:27 -07:00

354 lines
16 KiB
Nix

{
cmake,
fetchFromGitHub,
fetchurl,
lib,
lighthouse,
nix-update-script,
openssl,
pkg-config,
protobuf,
rustPlatform,
rust-jemalloc-sys,
sqlite,
stdenv,
testers,
}:
rustPlatform.buildRustPackage rec {
pname = "lighthouse";
version = "8.2.2";
# lighthouse/common/deposit_contract/build.rs, `TAG`
depositContractSpecVersion = "0.12.1";
# lighthouse/common/deposit_contract/build.rs, `UNSAFE_TAG`
testnetDepositContractSpecVersion = "0.9.2.1";
src = fetchFromGitHub {
owner = "sigp";
repo = "lighthouse";
tag = "v${version}";
hash = "sha256-Eb4C6uBJmrb7NOwSDp+Fxkuw7fGcPrtuU8DLGxd2cCM=";
};
patches = [
./use-system-sqlite.patch
];
cargoHash = "sha256-5lSDbwL1+x91yI8YjgXrkZ2C1CwiaoJjrnGcylFbArs=";
buildFeatures = [
"gnosis"
];
nativeBuildInputs = [
rustPlatform.bindgenHook
cmake
pkg-config
protobuf
];
buildInputs = [
rust-jemalloc-sys
sqlite
]
++ lib.optionals (!stdenv.hostPlatform.isDarwin) [
openssl
];
depositContractSpec = fetchurl {
url = "https://raw.githubusercontent.com/ethereum/eth2.0-specs/v${depositContractSpecVersion}/deposit_contract/contracts/validator_registration.json";
hash = "sha256-ZslAe1wkmkg8Tua/AmmEfBmjqMVcGIiYHwi+WssEwa8=";
};
testnetDepositContractSpec = fetchurl {
url = "https://raw.githubusercontent.com/sigp/unsafe-eth2-deposit-contract/v${testnetDepositContractSpecVersion}/unsafe_validator_registration.json";
hash = "sha256-aeTeHRT3QtxBRSNMCITIWmx89vGtox2OzSff8vZ+RYY=";
};
env = {
LIGHTHOUSE_DEPOSIT_CONTRACT_SPEC_URL = "file://${depositContractSpec}";
LIGHTHOUSE_DEPOSIT_CONTRACT_TESTNET_URL = "file://${testnetDepositContractSpec}";
OPENSSL_NO_VENDOR = true;
# This is needed by the unit tests.
FORK_NAME = "capella";
};
cargoBuildFlags = [
"--package"
"lighthouse"
];
__darwinAllowLocalNetworking = true;
checkFeatures = [ ];
# All of these tests require network access and/or docker
cargoTestFlags = [
"--workspace"
"--exclude=beacon_chain"
"--exclude=beacon_node"
"--exclude=http_api"
"--exclude=lighthouse"
"--exclude=lighthouse_network"
"--exclude=network"
"--exclude=slashing_protection"
"--exclude=watch"
"--exclude=web3signer_tests"
];
# All of these tests require network access
checkFlags = [
"--skip=tests::broadcast_should_send_to_all_bns"
"--skip=tests::check_candidate_order"
"--skip=tests::first_success_should_try_nodes_in_order"
"--skip=tests::update_all_candidates_should_update_sync_status"
"--skip=engine_api::http::test::forkchoice_updated_v1_request"
"--skip=engine_api::http::test::forkchoice_updated_v1_with_payload_attributes_request"
"--skip=engine_api::http::test::get_block_by_hash_request"
"--skip=engine_api::http::test::get_block_by_number_request"
"--skip=engine_api::http::test::get_payload_v1_request"
"--skip=engine_api::http::test::geth_test_vectors"
"--skip=engine_api::http::test::new_payload_v1_request"
"--skip=test::finds_valid_terminal_block_hash"
"--skip=test::produce_three_valid_pos_execution_blocks"
"--skip=test::rejects_invalid_terminal_block_hash"
"--skip=test::rejects_terminal_block_with_equal_timestamp"
"--skip=test::rejects_unknown_terminal_block_hash"
"--skip=test::test_forked_terminal_block"
"--skip=test::verifies_valid_terminal_block_hash"
"--skip=deposit_tree::cache_consistency"
"--skip=deposit_tree::double_update"
"--skip=deposit_tree::updating"
"--skip=eth1_cache::big_skip"
"--skip=eth1_cache::double_update"
"--skip=eth1_cache::pruning"
"--skip=eth1_cache::simple_scenario"
"--skip=fast::deposit_cache_query"
"--skip=http::incrementing_deposits"
"--skip=persist::test_persist_caches"
"--skip=can_read_finalized_block"
"--skip=invalid_attestation_delayed_slot"
"--skip=invalid_attestation_empty_bitfield"
"--skip=invalid_attestation_future_block"
"--skip=invalid_attestation_future_epoch"
"--skip=invalid_attestation_inconsistent_ffg_vote"
"--skip=invalid_attestation_past_epoch"
"--skip=invalid_attestation_target_epoch"
"--skip=invalid_attestation_unknown_beacon_block_root"
"--skip=invalid_attestation_unknown_target_root"
"--skip=invalid_block_finalized_descendant"
"--skip=invalid_block_finalized_slot"
"--skip=invalid_block_future_slot"
"--skip=invalid_block_unknown_parent"
"--skip=justified_and_finalized_blocks"
"--skip=justified_balances"
"--skip=justified_checkpoint_updates_with_descendent"
"--skip=justified_checkpoint_updates_with_descendent_first_justification"
"--skip=justified_checkpoint_updates_with_non_descendent"
"--skip=progressive_balances_cache_attester_slashing"
"--skip=progressive_balances_cache_proposer_slashing"
"--skip=valid_attestation"
"--skip=valid_attestation_skip_across_epoch"
"--skip=weak_subjectivity_check_epoch_boundary_is_skip_slot"
"--skip=weak_subjectivity_check_epoch_boundary_is_skip_slot_failure"
"--skip=weak_subjectivity_check_fails_early_epoch"
"--skip=weak_subjectivity_check_fails_incorrect_root"
"--skip=weak_subjectivity_check_fails_late_epoch"
"--skip=weak_subjectivity_check_passes"
"--skip=weak_subjectivity_pass_on_startup"
"--skip=basic"
"--skip=returns_200_ok"
"--skip=release_tests::attestation_aggregation_insert_get_prune"
"--skip=release_tests::attestation_duplicate"
"--skip=release_tests::attestation_get_max"
"--skip=release_tests::attestation_pairwise_overlapping"
"--skip=release_tests::attestation_rewards"
"--skip=release_tests::cross_fork_attester_slashings"
"--skip=release_tests::cross_fork_exits"
"--skip=release_tests::cross_fork_proposer_slashings"
"--skip=release_tests::duplicate_proposer_slashing"
"--skip=release_tests::max_coverage_attester_proposer_slashings"
"--skip=release_tests::max_coverage_different_indices_set"
"--skip=release_tests::max_coverage_effective_balances"
"--skip=release_tests::overlapping_max_cover_attester_slashing"
"--skip=release_tests::prune_attester_slashing_noop"
"--skip=release_tests::prune_proposer_slashing_noop"
"--skip=release_tests::simple_max_cover_attester_slashing"
"--skip=release_tests::sync_contribution_aggregation_insert_get_prune"
"--skip=release_tests::sync_contribution_duplicate"
"--skip=release_tests::sync_contribution_with_fewer_bits"
"--skip=release_tests::sync_contribution_with_more_bits"
"--skip=release_tests::test_earliest_attestation"
"--skip=per_block_processing::tests::block_replayer_peeking_state_roots"
"--skip=per_block_processing::tests::fork_spanning_exit"
"--skip=per_block_processing::tests::invalid_attester_slashing_1_invalid"
"--skip=per_block_processing::tests::invalid_attester_slashing_2_invalid"
"--skip=per_block_processing::tests::invalid_attester_slashing_not_slashable"
"--skip=per_block_processing::tests::invalid_bad_proposal_1_signature"
"--skip=per_block_processing::tests::invalid_bad_proposal_2_signature"
"--skip=per_block_processing::tests::invalid_block_header_state_slot"
"--skip=per_block_processing::tests::invalid_block_signature"
"--skip=per_block_processing::tests::invalid_deposit_bad_merkle_proof"
"--skip=per_block_processing::tests::invalid_deposit_count_too_small"
"--skip=per_block_processing::tests::invalid_deposit_deposit_count_too_big"
"--skip=per_block_processing::tests::invalid_deposit_invalid_pub_key"
"--skip=per_block_processing::tests::invalid_deposit_wrong_sig"
"--skip=per_block_processing::tests::invalid_parent_block_root"
"--skip=per_block_processing::tests::invalid_proposer_slashing_duplicate_slashing"
"--skip=per_block_processing::tests::invalid_proposer_slashing_proposal_epoch_mismatch"
"--skip=per_block_processing::tests::invalid_proposer_slashing_proposals_identical"
"--skip=per_block_processing::tests::invalid_proposer_slashing_proposer_unknown"
"--skip=per_block_processing::tests::invalid_randao_reveal_signature"
"--skip=per_block_processing::tests::valid_4_deposits"
"--skip=per_block_processing::tests::valid_block_ok"
"--skip=per_block_processing::tests::valid_insert_attester_slashing"
"--skip=per_block_processing::tests::valid_insert_proposer_slashing"
"--skip=per_epoch_processing::tests::release_tests::altair_state_on_base_fork"
"--skip=per_epoch_processing::tests::release_tests::base_state_on_altair_fork"
"--skip=per_epoch_processing::tests::runs_without_error"
"--skip=exit::custom_tests::valid"
"--skip=exit::custom_tests::valid_three"
"--skip=exit::tests::invalid_bad_signature"
"--skip=exit::tests::invalid_duplicate"
"--skip=exit::tests::invalid_exit_already_initiated"
"--skip=exit::tests::invalid_future_exit_epoch"
"--skip=exit::tests::invalid_not_active_after_exit_epoch"
"--skip=exit::tests::invalid_not_active_before_activation_epoch"
"--skip=exit::tests::invalid_too_young_by_a_lot"
"--skip=exit::tests::invalid_too_young_by_one_epoch"
"--skip=exit::tests::invalid_validator_unknown"
"--skip=exit::tests::valid_genesis_epoch"
"--skip=exit::tests::valid_previous_epoch"
"--skip=exit::tests::valid_single_exit"
"--skip=exit::tests::valid_three_exits"
"--skip=iter::test::block_root_iter"
"--skip=iter::test::state_root_iter"
"--skip=beacon_state::committee_cache::tests::initializes_with_the_right_epoch"
"--skip=beacon_state::committee_cache::tests::min_randao_epoch_correct"
"--skip=beacon_state::committee_cache::tests::shuffles_for_the_right_epoch"
"--skip=beacon_state::tests::beacon_proposer_index"
"--skip=beacon_state::tests::cache_initialization"
"--skip=beacon_state::tests::committees::current_epoch_committee_consistency"
"--skip=beacon_state::tests::committees::next_epoch_committee_consistency"
"--skip=beacon_state::tests::committees::previous_epoch_committee_consistency"
"--skip=tests::hd_validator_creation"
"--skip=tests::invalid_pubkey"
"--skip=tests::keystore_validator_creation"
"--skip=tests::keystores::check_get_set_fee_recipient"
"--skip=tests::keystores::check_get_set_gas_limit"
"--skip=tests::keystores::delete_concurrent_with_signing"
"--skip=tests::keystores::delete_keystores_twice"
"--skip=tests::keystores::delete_nonexistent_keystores"
"--skip=tests::keystores::delete_nonexistent_remotekey"
"--skip=tests::keystores::delete_remotekey_then_reimport_different_url"
"--skip=tests::keystores::delete_remotekeys_twice"
"--skip=tests::keystores::delete_then_reimport"
"--skip=tests::keystores::delete_then_reimport_remotekeys"
"--skip=tests::keystores::get_auth_no_token"
"--skip=tests::keystores::get_empty_keystores"
"--skip=tests::keystores::get_empty_remotekeys"
"--skip=tests::keystores::get_web3_signer_keystores"
"--skip=tests::keystores::import_and_delete_conflicting_web3_signer_keystores"
"--skip=tests::keystores::import_invalid_slashing_protection"
"--skip=tests::keystores::import_keystores_wrong_password"
"--skip=tests::keystores::import_new_keystores"
"--skip=tests::keystores::import_new_remotekeys"
"--skip=tests::keystores::import_only_duplicate_keystores"
"--skip=tests::keystores::import_only_duplicate_remotekeys"
"--skip=tests::keystores::import_remote_and_local_keys"
"--skip=tests::keystores::import_remotekey_web3signer"
"--skip=tests::keystores::import_remotekey_web3signer_disabled"
"--skip=tests::keystores::import_remotekey_web3signer_enabled"
"--skip=tests::keystores::import_same_local_and_remote_keys"
"--skip=tests::keystores::import_same_remote_and_local_keys"
"--skip=tests::keystores::import_same_remotekey_different_url"
"--skip=tests::keystores::import_some_duplicate_keystores"
"--skip=tests::keystores::import_some_duplicate_remotekeys"
"--skip=tests::keystores::import_wrong_number_of_passwords"
"--skip=tests::keystores::migrate_all_with_slashing_protection"
"--skip=tests::keystores::migrate_some_extra_slashing_protection"
"--skip=tests::keystores::migrate_some_missing_slashing_protection"
"--skip=tests::keystores::migrate_some_with_slashing_protection"
"--skip=tests::prefer_builder_proposals_validator"
"--skip=tests::routes_with_invalid_auth"
"--skip=tests::simple_getters"
"--skip=tests::validator_builder_boost_factor"
"--skip=tests::validator_builder_boost_factor_global_builder_proposals_false"
"--skip=tests::validator_builder_boost_factor_global_builder_proposals_true"
"--skip=tests::validator_builder_boost_factor_global_prefer_builder_proposals_true"
"--skip=tests::validator_builder_boost_factor_global_prefer_builder_proposals_true_override"
"--skip=tests::validator_builder_proposals"
"--skip=tests::validator_derived_builder_boost_factor_with_process_defaults"
"--skip=tests::validator_enabling"
"--skip=tests::validator_exit"
"--skip=tests::validator_gas_limit"
"--skip=tests::validator_graffiti"
"--skip=tests::validator_graffiti_api"
"--skip=tests::web3signer_validator_creation"
"--skip=create_validators::tests::bogus_bn_url"
"--skip=delete_validators::test::delete_multiple_validators"
"--skip=import_validators::tests::create_one_validator"
"--skip=import_validators::tests::create_one_validator_keystore_format"
"--skip=import_validators::tests::create_one_validator_with_offset"
"--skip=import_validators::tests::create_one_validator_with_offset_keystore_format"
"--skip=import_validators::tests::create_three_validators"
"--skip=import_validators::tests::create_three_validators_with_offset"
"--skip=import_validators::tests::import_duplicates_when_allowed"
"--skip=import_validators::tests::import_duplicates_when_allowed_keystore_format"
"--skip=import_validators::tests::import_duplicates_when_disallowed"
"--skip=import_validators::tests::import_duplicates_when_disallowed_keystore_format"
"--skip=list_validators::test::list_all_validators"
"--skip=move_validators::test::no_validators"
"--skip=move_validators::test::one_validator_move_all"
"--skip=move_validators::test::one_validator_move_all_with_password_files"
"--skip=move_validators::test::one_validator_move_one"
"--skip=move_validators::test::one_validator_to_non_empty_dest"
"--skip=move_validators::test::one_validators_move_two_by_count"
"--skip=move_validators::test::three_validators_move_all"
"--skip=move_validators::test::three_validators_move_one"
"--skip=move_validators::test::three_validators_move_one_by_count"
"--skip=move_validators::test::three_validators_move_three"
"--skip=move_validators::test::three_validators_move_two"
"--skip=move_validators::test::three_validators_move_two_by_count"
"--skip=move_validators::test::two_validator_move_all_and_back_again"
"--skip=move_validators::test::two_validator_move_all_passwords_removed"
"--skip=move_validators::test::two_validator_move_all_passwords_removed_failed_password_attempt"
"--skip=move_validators::test::two_validators_move_all_where_one_is_a_duplicate"
"--skip=move_validators::test::two_validators_move_one_where_one_is_a_duplicate"
"--skip=move_validators::test::two_validators_move_one_with_identical_password_files"
]
++ lib.optionals (stdenv.hostPlatform.isAarch64 && stdenv.hostPlatform.isDarwin) [
"--skip=subnet_service::tests::attestation_service::test_subscribe_same_subnet_several_slots_apart"
"--skip=subnet_service::tests::sync_committee_service::same_subscription_with_lower_until_epoch"
"--skip=subnet_service::tests::sync_committee_service::subscribe_and_unsubscribe"
];
passthru = {
tests.version = testers.testVersion {
package = lighthouse;
command = "lighthouse --version";
version = "v${lighthouse.version}";
};
updateScript = nix-update-script { };
};
enableParallelBuilding = true;
meta = {
description = "Ethereum consensus client in Rust";
homepage = "https://lighthouse.sigmaprime.io/";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [
centromere
pmw
];
mainProgram = "lighthouse";
# can't compile build script with host libraries
broken =
stdenv.hostPlatform.isDarwin || !lib.systems.equals stdenv.buildPlatform stdenv.hostPlatform;
};
}