From 1633afe6eb2fc22c97293713ee7c65cdbf0055cc Mon Sep 17 00:00:00 2001 From: Mac L Date: Wed, 30 Oct 2024 03:59:44 +1100 Subject: [PATCH 1/9] Move timeout quotients to eth2 crate --- common/eth2/src/lib.rs | 34 ++++++++++++++++++++++++++++++++++ validator_client/src/lib.rs | 33 +-------------------------------- 2 files changed, 35 insertions(+), 32 deletions(-) diff --git a/common/eth2/src/lib.rs b/common/eth2/src/lib.rs index 522c6414eae..01c61826ab8 100644 --- a/common/eth2/src/lib.rs +++ b/common/eth2/src/lib.rs @@ -48,6 +48,21 @@ pub const CONSENSUS_BLOCK_VALUE_HEADER: &str = "Eth-Consensus-Block-Value"; pub const CONTENT_TYPE_HEADER: &str = "Content-Type"; pub const SSZ_CONTENT_TYPE_HEADER: &str = "application/octet-stream"; +/// Specific optimized timeout constants for HTTP requests involved in different validator duties. +/// This can help ensure that proper endpoint fallback occurs. +const HTTP_ATTESTATION_TIMEOUT_QUOTIENT: u32 = 4; +const HTTP_ATTESTER_DUTIES_TIMEOUT_QUOTIENT: u32 = 4; +const HTTP_ATTESTATION_SUBSCRIPTIONS_TIMEOUT_QUOTIENT: u32 = 24; +const HTTP_LIVENESS_TIMEOUT_QUOTIENT: u32 = 4; +const HTTP_PROPOSAL_TIMEOUT_QUOTIENT: u32 = 2; +const HTTP_PROPOSER_DUTIES_TIMEOUT_QUOTIENT: u32 = 4; +const HTTP_SYNC_COMMITTEE_CONTRIBUTION_TIMEOUT_QUOTIENT: u32 = 4; +const HTTP_SYNC_DUTIES_TIMEOUT_QUOTIENT: u32 = 4; +const HTTP_GET_BEACON_BLOCK_SSZ_TIMEOUT_QUOTIENT: u32 = 4; +const HTTP_GET_DEBUG_BEACON_STATE_QUOTIENT: u32 = 4; +const HTTP_GET_DEPOSIT_SNAPSHOT_QUOTIENT: u32 = 4; +const HTTP_GET_VALIDATOR_BLOCK_TIMEOUT_QUOTIENT: u32 = 4; + #[derive(Debug)] pub enum Error { /// The `reqwest` client raised an error. @@ -151,6 +166,25 @@ impl Timeouts { get_validator_block: timeout, } } + + pub fn use_optimized_timeouts(base_timeout: Duration) -> Self { + Timeouts { + attestation: base_timeout / HTTP_ATTESTATION_TIMEOUT_QUOTIENT, + attester_duties: base_timeout / HTTP_ATTESTER_DUTIES_TIMEOUT_QUOTIENT, + attestation_subscriptions: base_timeout + / HTTP_ATTESTATION_SUBSCRIPTIONS_TIMEOUT_QUOTIENT, + liveness: base_timeout / HTTP_LIVENESS_TIMEOUT_QUOTIENT, + proposal: base_timeout / HTTP_PROPOSAL_TIMEOUT_QUOTIENT, + proposer_duties: base_timeout / HTTP_PROPOSER_DUTIES_TIMEOUT_QUOTIENT, + sync_committee_contribution: base_timeout + / HTTP_SYNC_COMMITTEE_CONTRIBUTION_TIMEOUT_QUOTIENT, + sync_duties: base_timeout / HTTP_SYNC_DUTIES_TIMEOUT_QUOTIENT, + get_beacon_blocks_ssz: base_timeout / HTTP_GET_BEACON_BLOCK_SSZ_TIMEOUT_QUOTIENT, + get_debug_beacon_states: base_timeout / HTTP_GET_DEBUG_BEACON_STATE_QUOTIENT, + get_deposit_snapshot: base_timeout / HTTP_GET_DEPOSIT_SNAPSHOT_QUOTIENT, + get_validator_block: base_timeout / HTTP_GET_VALIDATOR_BLOCK_TIMEOUT_QUOTIENT, + } + } } /// A wrapper around `reqwest::Client` which provides convenience methods for interfacing with a diff --git a/validator_client/src/lib.rs b/validator_client/src/lib.rs index 2cc22357fbc..1e44d3100c2 100644 --- a/validator_client/src/lib.rs +++ b/validator_client/src/lib.rs @@ -56,21 +56,6 @@ const RETRY_DELAY: Duration = Duration::from_secs(2); /// The time between polls when waiting for genesis. const WAITING_FOR_GENESIS_POLL_TIME: Duration = Duration::from_secs(12); -/// Specific timeout constants for HTTP requests involved in different validator duties. -/// This can help ensure that proper endpoint fallback occurs. -const HTTP_ATTESTATION_TIMEOUT_QUOTIENT: u32 = 4; -const HTTP_ATTESTER_DUTIES_TIMEOUT_QUOTIENT: u32 = 4; -const HTTP_ATTESTATION_SUBSCRIPTIONS_TIMEOUT_QUOTIENT: u32 = 24; -const HTTP_LIVENESS_TIMEOUT_QUOTIENT: u32 = 4; -const HTTP_PROPOSAL_TIMEOUT_QUOTIENT: u32 = 2; -const HTTP_PROPOSER_DUTIES_TIMEOUT_QUOTIENT: u32 = 4; -const HTTP_SYNC_COMMITTEE_CONTRIBUTION_TIMEOUT_QUOTIENT: u32 = 4; -const HTTP_SYNC_DUTIES_TIMEOUT_QUOTIENT: u32 = 4; -const HTTP_GET_BEACON_BLOCK_SSZ_TIMEOUT_QUOTIENT: u32 = 4; -const HTTP_GET_DEBUG_BEACON_STATE_QUOTIENT: u32 = 4; -const HTTP_GET_DEPOSIT_SNAPSHOT_QUOTIENT: u32 = 4; -const HTTP_GET_VALIDATOR_BLOCK_TIMEOUT_QUOTIENT: u32 = 4; - const DOPPELGANGER_SERVICE_NAME: &str = "doppelganger"; #[derive(Clone)] @@ -307,23 +292,7 @@ impl ProductionValidatorClient { log, "Fallback endpoints are available, using optimized timeouts."; ); - Timeouts { - attestation: slot_duration / HTTP_ATTESTATION_TIMEOUT_QUOTIENT, - attester_duties: slot_duration / HTTP_ATTESTER_DUTIES_TIMEOUT_QUOTIENT, - attestation_subscriptions: slot_duration - / HTTP_ATTESTATION_SUBSCRIPTIONS_TIMEOUT_QUOTIENT, - liveness: slot_duration / HTTP_LIVENESS_TIMEOUT_QUOTIENT, - proposal: slot_duration / HTTP_PROPOSAL_TIMEOUT_QUOTIENT, - proposer_duties: slot_duration / HTTP_PROPOSER_DUTIES_TIMEOUT_QUOTIENT, - sync_committee_contribution: slot_duration - / HTTP_SYNC_COMMITTEE_CONTRIBUTION_TIMEOUT_QUOTIENT, - sync_duties: slot_duration / HTTP_SYNC_DUTIES_TIMEOUT_QUOTIENT, - get_beacon_blocks_ssz: slot_duration - / HTTP_GET_BEACON_BLOCK_SSZ_TIMEOUT_QUOTIENT, - get_debug_beacon_states: slot_duration / HTTP_GET_DEBUG_BEACON_STATE_QUOTIENT, - get_deposit_snapshot: slot_duration / HTTP_GET_DEPOSIT_SNAPSHOT_QUOTIENT, - get_validator_block: slot_duration / HTTP_GET_VALIDATOR_BLOCK_TIMEOUT_QUOTIENT, - } + Timeouts::use_optimized_timeouts(slot_duration) } else { Timeouts::set_all(slot_duration) }; From 8d0d15435eefad4e353329ded6407074a51248db Mon Sep 17 00:00:00 2001 From: Mac L Date: Wed, 30 Oct 2024 06:18:01 +1100 Subject: [PATCH 2/9] Add replace_candidates function --- .../beacon_node_fallback/src/lib.rs | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/validator_client/beacon_node_fallback/src/lib.rs b/validator_client/beacon_node_fallback/src/lib.rs index 95a221f1897..7338f2cc093 100644 --- a/validator_client/beacon_node_fallback/src/lib.rs +++ b/validator_client/beacon_node_fallback/src/lib.rs @@ -8,8 +8,9 @@ use beacon_node_health::{ IsOptimistic, SyncDistanceTier, }; use environment::RuntimeContext; -use eth2::BeaconNodeHttpClient; +use eth2::{BeaconNodeHttpClient, Timeouts}; use futures::future; +use sensitive_url::SensitiveUrl; use serde::{ser::SerializeStruct, Deserialize, Serialize, Serializer}; use slog::{debug, error, warn, Logger}; use slot_clock::SlotClock; @@ -461,6 +462,42 @@ impl BeaconNodeFallback { (candidate_info, num_available, num_synced) } + /// Update the list of candidates with a new list. + /// Returns `Ok(new_list)` if the update was successful. + /// Returns `Err(some_err)` if the list is empty. + pub async fn replace_candidates( + &self, + new_list: Vec, + use_long_timeouts: bool, + ) -> Result, String> { + if new_list.is_empty() { + return Err("Beacon Node list cannot be empty".to_string()); + } + + let timeouts: Timeouts = if new_list.len() == 1 || use_long_timeouts { + Timeouts::set_all(Duration::from_secs(self.spec.seconds_per_slot)) + } else { + Timeouts::use_optimized_timeouts(Duration::from_secs(self.spec.seconds_per_slot)) + }; + + let new_candidates: Vec> = new_list + .clone() + .into_iter() + .enumerate() + .map(|(index, url)| { + CandidateBeaconNode::::new( + BeaconNodeHttpClient::new(url, timeouts.clone()), + index, + ) + }) + .collect(); + + let mut candidates = self.candidates.write().await; + *candidates = new_candidates; + + Ok(new_list) + } + /// Loop through ALL candidates in `self.candidates` and update their sync status. /// /// It is possible for a node to return an unsynced status while continuing to serve From 9ab780d147ca8ddbd03f72f956d1550af09ea95d Mon Sep 17 00:00:00 2001 From: Mac L Date: Mon, 2 Dec 2024 20:05:58 +1100 Subject: [PATCH 3/9] Add endpoint --- Cargo.lock | 1 + common/eth2/src/lighthouse_vc/types.rs | 10 +++ .../beacon_node_fallback/Cargo.toml | 1 + .../beacon_node_fallback/src/lib.rs | 4 +- validator_client/http_api/src/lib.rs | 62 ++++++++++++++++++- validator_client/http_api/src/test_utils.rs | 1 + 6 files changed, 75 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1ddeecf7116..ec21bf9f929 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -871,6 +871,7 @@ dependencies = [ "eth2", "futures", "itertools 0.10.5", + "sensitive_url", "serde", "slog", "slot_clock", diff --git a/common/eth2/src/lighthouse_vc/types.rs b/common/eth2/src/lighthouse_vc/types.rs index 1921549bcb5..f58da9ff96f 100644 --- a/common/eth2/src/lighthouse_vc/types.rs +++ b/common/eth2/src/lighthouse_vc/types.rs @@ -198,3 +198,13 @@ pub struct SingleExportKeystoresResponse { pub struct SetGraffitiRequest { pub graffiti: GraffitiString, } + +#[derive(Serialize, Deserialize, Debug)] +pub struct UpdateCandidatesRequest { + pub beacon_nodes: Vec, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct UpdateCandidatesResponse { + pub new_beacon_nodes_list: Vec, +} diff --git a/validator_client/beacon_node_fallback/Cargo.toml b/validator_client/beacon_node_fallback/Cargo.toml index c15ded43d78..5b7ca1eec2b 100644 --- a/validator_client/beacon_node_fallback/Cargo.toml +++ b/validator_client/beacon_node_fallback/Cargo.toml @@ -20,3 +20,4 @@ strum = { workspace = true } tokio = { workspace = true } types = { workspace = true } validator_metrics = { workspace = true } +sensitive_url = { workspace = true } diff --git a/validator_client/beacon_node_fallback/src/lib.rs b/validator_client/beacon_node_fallback/src/lib.rs index 7338f2cc093..38104224e58 100644 --- a/validator_client/beacon_node_fallback/src/lib.rs +++ b/validator_client/beacon_node_fallback/src/lib.rs @@ -465,13 +465,13 @@ impl BeaconNodeFallback { /// Update the list of candidates with a new list. /// Returns `Ok(new_list)` if the update was successful. /// Returns `Err(some_err)` if the list is empty. - pub async fn replace_candidates( + pub async fn update_candidates_list( &self, new_list: Vec, use_long_timeouts: bool, ) -> Result, String> { if new_list.is_empty() { - return Err("Beacon Node list cannot be empty".to_string()); + return Err("list cannot be empty".to_string()); } let timeouts: Timeouts = if new_list.len() == 1 || use_long_timeouts { diff --git a/validator_client/http_api/src/lib.rs b/validator_client/http_api/src/lib.rs index b58c7ccec02..96890b2256d 100644 --- a/validator_client/http_api/src/lib.rs +++ b/validator_client/http_api/src/lib.rs @@ -20,6 +20,7 @@ use account_utils::{ }; pub use api_secret::ApiSecret; use beacon_node_fallback::CandidateInfo; +use core::convert::Infallible; use create_validator::{ create_validators_mnemonic, create_validators_web3signer, get_voting_password_storage, }; @@ -27,12 +28,13 @@ use eth2::lighthouse_vc::{ std_types::{AuthResponse, GetFeeRecipientResponse, GetGasLimitResponse}, types::{ self as api_types, GenericResponse, GetGraffitiResponse, Graffiti, PublicKey, - PublicKeyBytes, SetGraffitiRequest, + PublicKeyBytes, SetGraffitiRequest, UpdateCandidatesRequest, UpdateCandidatesResponse, }, }; use lighthouse_version::version_with_platform; use logging::SSELoggingComponents; use parking_lot::RwLock; +use sensitive_url::SensitiveUrl; use serde::{Deserialize, Serialize}; use slog::{crit, info, warn, Logger}; use slot_clock::SlotClock; @@ -49,7 +51,8 @@ use tokio_stream::{wrappers::BroadcastStream, StreamExt}; use types::{ChainSpec, ConfigAndPreset, EthSpec}; use validator_dir::Builder as ValidatorDirBuilder; use validator_services::block_service::BlockService; -use warp::{sse::Event, Filter}; +use warp::{reply::Response, sse::Event, Filter}; +use warp_utils::reject::convert_rejection; use warp_utils::task::blocking_json_task; #[derive(Debug)] @@ -99,6 +102,7 @@ pub struct Config { pub allow_origin: Option, pub allow_keystore_export: bool, pub store_passwords_in_secrets_dir: bool, + pub bn_long_timeouts: bool, } impl Default for Config { @@ -110,6 +114,7 @@ impl Default for Config { allow_origin: None, allow_keystore_export: false, store_passwords_in_secrets_dir: false, + bn_long_timeouts: false, } } } @@ -136,6 +141,7 @@ pub fn serve( let config = &ctx.config; let allow_keystore_export = config.allow_keystore_export; let store_passwords_in_secrets_dir = config.store_passwords_in_secrets_dir; + let use_long_timeouts = config.bn_long_timeouts; let log = ctx.log.clone(); // Configure CORS. @@ -835,6 +841,57 @@ pub fn serve( }) }); + // POST /lighthouse/update_beacon_nodes + let post_lighthouse_update_beacon_nodes = warp::path("lighthouse") + .and(warp::path("update_beacon_nodes")) + .and(warp::path::end()) + .and(warp::body::json()) + .and(block_service_filter.clone()) + .then( + move |request: UpdateCandidatesRequest, block_service: BlockService| async move { + async fn parse_urls(urls: &[String]) -> Result, Response> { + match urls + .iter() + .map(|url| SensitiveUrl::parse(url).map_err(|e| e.to_string())) + .collect() + { + Ok(sensitive_urls) => Ok(sensitive_urls), + Err(_) => Err(convert_rejection::(Err( + warp_utils::reject::custom_bad_request( + "one or more urls could not be parsed".to_string(), + ), + )) + .await), + } + } + + let beacons: Vec = match parse_urls(&request.beacon_nodes).await { + Ok(new_beacons) => { + match block_service + .beacon_nodes + .update_candidates_list(new_beacons, use_long_timeouts) + .await + { + Ok(beacons) => beacons, + Err(e) => { + return convert_rejection::(Err( + warp_utils::reject::custom_bad_request(e.to_string()), + )) + .await + } + } + } + Err(e) => return e, + }; + + let response: UpdateCandidatesResponse = UpdateCandidatesResponse { + new_beacon_nodes_list: beacons.iter().map(|surl| surl.to_string()).collect(), + }; + + blocking_json_task(move || Ok(api_types::GenericResponse::from(response))).await + }, + ); + // Standard key-manager endpoints. let eth_v1 = warp::path("eth").and(warp::path("v1")); let std_keystores = eth_v1.and(warp::path("keystores")).and(warp::path::end()); @@ -1322,6 +1379,7 @@ pub fn serve( .or(post_std_keystores) .or(post_std_remotekeys) .or(post_graffiti) + .or(post_lighthouse_update_beacon_nodes) .recover(warp_utils::reject::handle_rejection), )) .or(warp::patch() diff --git a/validator_client/http_api/src/test_utils.rs b/validator_client/http_api/src/test_utils.rs index 931c4ea08ed..0bba6a29909 100644 --- a/validator_client/http_api/src/test_utils.rs +++ b/validator_client/http_api/src/test_utils.rs @@ -177,6 +177,7 @@ impl ApiTester { allow_origin: None, allow_keystore_export: true, store_passwords_in_secrets_dir: false, + bn_long_timeouts: false, } } From 386d338a6e5fee0cadc492fca1aa68ebd051c1e3 Mon Sep 17 00:00:00 2001 From: Mac L Date: Mon, 2 Dec 2024 22:36:26 +1100 Subject: [PATCH 4/9] Fix tests --- validator_client/http_api/src/tests.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/validator_client/http_api/src/tests.rs b/validator_client/http_api/src/tests.rs index 76a6952153b..03a8c6a43b4 100644 --- a/validator_client/http_api/src/tests.rs +++ b/validator_client/http_api/src/tests.rs @@ -126,6 +126,7 @@ impl ApiTester { allow_origin: None, allow_keystore_export: true, store_passwords_in_secrets_dir: false, + bn_long_timeouts: false, }, sse_logging_components: None, log, From 7fa68f3a280eb6d8dabdab8d63688f2f7224c9d5 Mon Sep 17 00:00:00 2001 From: Mac L Date: Tue, 3 Dec 2024 15:27:08 +1100 Subject: [PATCH 5/9] Add endpoint docs --- book/src/api-vc-endpoints.md | 55 ++++++++++++++++++++++++++++ book/src/api-vc-sig-header.md | 1 + validator_client/http_api/src/lib.rs | 9 +++-- 3 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 book/src/api-vc-sig-header.md diff --git a/book/src/api-vc-endpoints.md b/book/src/api-vc-endpoints.md index 80eba7a0590..7e90568902b 100644 --- a/book/src/api-vc-endpoints.md +++ b/book/src/api-vc-endpoints.md @@ -18,6 +18,7 @@ | [`POST /lighthouse/validators/mnemonic`](#post-lighthousevalidatorsmnemonic) | Create a new validator from an existing mnemonic. | | [`POST /lighthouse/validators/web3signer`](#post-lighthousevalidatorsweb3signer) | Add web3signer validators. | | [`GET /lighthouse/logs`](#get-lighthouselogs) | Get logs | +| [`POST /lighthouse/beacon/update`](#post-lighthousebeaconupdate) | Update the `--beacon-nodes` list. | The query to Lighthouse API endpoints requires authorization, see [Authorization Header](./api-vc-auth-header.md). @@ -816,3 +817,57 @@ logs emitted are INFO level or higher. } } ``` + +## `POST /lighthouse/beacon/update` + +Updates the list of beacon nodes originally specified by the `--beacon-nodes` CLI flag. +Use this endpoint when you don't want to restart the VC to add, remove or reorder beacon nodes. + +### HTTP Specification + +| Property | Specification | +|-------------------|--------------------------------------------| +| Path | `/lighthouse/validators/beacon/update` | +| Method | POST | +| Required Headers | [`Authorization`](./api-vc-auth-header.md) | +| Typical Responses | 200, 400 | + +### Example Request Body + +```json +{ + "beacon_nodes": [ + "http://beacon-node1:5052", + "http://beacon-node2:5052", + "http://beacon-node3:5052" + ] +} +``` + +Command: + +```bash +DATADIR=/var/lib/lighthouse +curl -X POST http://localhost:5062/lighthouse/beacon/update \ + -H "Authorization: Bearer $(cat ${DATADIR}/validators/api-token.txt)" \ + -H "Content-Type: application/json" \ + -d "{\"beacon_nodes\":[\"http://beacon-node1:5052\",\"http://beacon-node2:5052\",\"http://beacon-node3:5052\"]}" +``` + +### Example Response Body + +```json +{ + "data": { + "new_beacon_nodes_list": [ + "http://beacon-node1:5052", + "http://beacon-node2:5052", + "http://beacon-node3:5052" + ] + } +} +``` + +If successful, the response will be a copy of the new list included in the request. +If unsuccessful, an error will be shown and the beacon nodes list will not be updated. +You can verify the results of the endpoint by using the `/lighthouse/beacon/health` endpoint. diff --git a/book/src/api-vc-sig-header.md b/book/src/api-vc-sig-header.md new file mode 100644 index 00000000000..35f5573a405 --- /dev/null +++ b/book/src/api-vc-sig-header.md @@ -0,0 +1 @@ +# Signature Header diff --git a/validator_client/http_api/src/lib.rs b/validator_client/http_api/src/lib.rs index 96890b2256d..c193bff4126 100644 --- a/validator_client/http_api/src/lib.rs +++ b/validator_client/http_api/src/lib.rs @@ -841,9 +841,10 @@ pub fn serve( }) }); - // POST /lighthouse/update_beacon_nodes - let post_lighthouse_update_beacon_nodes = warp::path("lighthouse") - .and(warp::path("update_beacon_nodes")) + // POST /lighthouse/beacon/update + let post_lighthouse_beacon_update = warp::path("lighthouse") + .and(warp::path("beacon")) + .and(warp::path("update")) .and(warp::path::end()) .and(warp::body::json()) .and(block_service_filter.clone()) @@ -1379,7 +1380,7 @@ pub fn serve( .or(post_std_keystores) .or(post_std_remotekeys) .or(post_graffiti) - .or(post_lighthouse_update_beacon_nodes) + .or(post_lighthouse_beacon_update) .recover(warp_utils::reject::handle_rejection), )) .or(warp::patch() From 79b0cbaab45b788d4fa3732448860db49d7d811b Mon Sep 17 00:00:00 2001 From: Mac L Date: Wed, 4 Dec 2024 20:24:31 +1100 Subject: [PATCH 6/9] Fix errors in book --- book/src/api-vc-endpoints.md | 2 +- book/src/api-vc-sig-header.md | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 book/src/api-vc-sig-header.md diff --git a/book/src/api-vc-endpoints.md b/book/src/api-vc-endpoints.md index 7e90568902b..1caa4298f7e 100644 --- a/book/src/api-vc-endpoints.md +++ b/book/src/api-vc-endpoints.md @@ -827,7 +827,7 @@ Use this endpoint when you don't want to restart the VC to add, remove or reorde | Property | Specification | |-------------------|--------------------------------------------| -| Path | `/lighthouse/validators/beacon/update` | +| Path | `/lighthouse/beacon/update` | | Method | POST | | Required Headers | [`Authorization`](./api-vc-auth-header.md) | | Typical Responses | 200, 400 | diff --git a/book/src/api-vc-sig-header.md b/book/src/api-vc-sig-header.md deleted file mode 100644 index 35f5573a405..00000000000 --- a/book/src/api-vc-sig-header.md +++ /dev/null @@ -1 +0,0 @@ -# Signature Header From 5e8778920d87d64f7d8ccbdfe40f7c3dffa2c113 Mon Sep 17 00:00:00 2001 From: Mac L Date: Thu, 27 Mar 2025 23:03:35 +1100 Subject: [PATCH 7/9] Fix ci --- book/src/api_vc_endpoints.md | 2 +- book/src/archived_key_management.md | 1 + book/src/archived_merge_migration.md | 1 + validator_client/beacon_node_fallback/Cargo.toml | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 book/src/archived_key_management.md create mode 100644 book/src/archived_merge_migration.md diff --git a/book/src/api_vc_endpoints.md b/book/src/api_vc_endpoints.md index cfe35584e40..aa4f1c860c9 100644 --- a/book/src/api_vc_endpoints.md +++ b/book/src/api_vc_endpoints.md @@ -829,7 +829,7 @@ Use this endpoint when you don't want to restart the VC to add, remove or reorde |-------------------|--------------------------------------------| | Path | `/lighthouse/beacon/update` | | Method | POST | -| Required Headers | [`Authorization`](./api-vc-auth-header.md) | +| Required Headers | [`Authorization`](./api_vc_auth_header.md) | | Typical Responses | 200, 400 | ### Example Request Body diff --git a/book/src/archived_key_management.md b/book/src/archived_key_management.md new file mode 100644 index 00000000000..7ec26c0bab4 --- /dev/null +++ b/book/src/archived_key_management.md @@ -0,0 +1 @@ +# Key Management diff --git a/book/src/archived_merge_migration.md b/book/src/archived_merge_migration.md new file mode 100644 index 00000000000..afb48aeec57 --- /dev/null +++ b/book/src/archived_merge_migration.md @@ -0,0 +1 @@ +# Merge Migration diff --git a/validator_client/beacon_node_fallback/Cargo.toml b/validator_client/beacon_node_fallback/Cargo.toml index 2c56e53c5aa..e0a0c461059 100644 --- a/validator_client/beacon_node_fallback/Cargo.toml +++ b/validator_client/beacon_node_fallback/Cargo.toml @@ -14,6 +14,7 @@ environment = { workspace = true } eth2 = { workspace = true } futures = { workspace = true } itertools = { workspace = true } +sensitive_url = { workspace = true } serde = { workspace = true } slot_clock = { workspace = true } strum = { workspace = true } @@ -21,7 +22,6 @@ tokio = { workspace = true } tracing = { workspace = true } types = { workspace = true } validator_metrics = { workspace = true } -sensitive_url = { workspace = true } [dev-dependencies] logging = { workspace = true } From 0897b0369ce5a6e75aaddff94069299136bf05ae Mon Sep 17 00:00:00 2001 From: Mac L Date: Thu, 27 Mar 2025 23:10:27 +1100 Subject: [PATCH 8/9] Remove old files --- book/src/archived_key_management.md | 1 - book/src/archived_merge_migration.md | 1 - 2 files changed, 2 deletions(-) delete mode 100644 book/src/archived_key_management.md delete mode 100644 book/src/archived_merge_migration.md diff --git a/book/src/archived_key_management.md b/book/src/archived_key_management.md deleted file mode 100644 index 7ec26c0bab4..00000000000 --- a/book/src/archived_key_management.md +++ /dev/null @@ -1 +0,0 @@ -# Key Management diff --git a/book/src/archived_merge_migration.md b/book/src/archived_merge_migration.md deleted file mode 100644 index afb48aeec57..00000000000 --- a/book/src/archived_merge_migration.md +++ /dev/null @@ -1 +0,0 @@ -# Merge Migration From af6fe5cf8fad2723fb49b73396f8b6e44627ce31 Mon Sep 17 00:00:00 2001 From: Mac L Date: Wed, 4 Jun 2025 05:28:17 +1000 Subject: [PATCH 9/9] Fix markdown --- book/src/api_vc_endpoints.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/book/src/api_vc_endpoints.md b/book/src/api_vc_endpoints.md index 85538d2bcad..14f4933e171 100644 --- a/book/src/api_vc_endpoints.md +++ b/book/src/api_vc_endpoints.md @@ -18,11 +18,8 @@ | [`POST /lighthouse/validators/mnemonic`](#post-lighthousevalidatorsmnemonic) | Create a new validator from an existing mnemonic. | | [`POST /lighthouse/validators/web3signer`](#post-lighthousevalidatorsweb3signer) | Add web3signer validators. | | [`GET /lighthouse/logs`](#get-lighthouselogs) | Get logs | -<<<<<<< HEAD -| [`POST /lighthouse/beacon/update`](#post-lighthousebeaconupdate) | Update the `--beacon-nodes` list. | -======= | [`GET /lighthouse/beacon/health`](#get-lighthousebeaconhealth) | Get health information for each connected beacon node. | ->>>>>>> unstable +| [`POST /lighthouse/beacon/update`](#post-lighthousebeaconupdate) | Update the `--beacon-nodes` list. | The query to Lighthouse API endpoints requires authorization, see [Authorization Header](./api_vc_auth_header.md).