From 8dd92491772fccf2b99210a9cb7a14217739a7a9 Mon Sep 17 00:00:00 2001 From: Age Manning Date: Tue, 14 Feb 2023 03:25:42 +0000 Subject: [PATCH 01/29] Enforce a timeout on peer disconnect (#3757) On heavily crowded networks, we are seeing many attempted connections to our node every second. Often these connections come from peers that have just been disconnected. This can be for a number of reasons including: - We have deemed them to be not as useful as other peers - They have performed poorly - They have dropped the connection with us - The connection was spontaneously lost - They were randomly removed because we have too many peers In all of these cases, if we have reached or exceeded our target peer limit, there is no desire to accept new connections immediately after the disconnect from these peers. In fact, it often costs us resources to handle the established connections and defeats some of the logic of dropping them in the first place. This PR adds a timeout, that prevents recently disconnected peers from reconnecting to us. Technically we implement a ban at the swarm layer to prevent immediate re connections for at least 10 minutes. I decided to keep this light, and use a time-based LRUCache which only gets updated during the peer manager heartbeat to prevent added stress of polling a delay map for what could be a large number of peers. This cache is bounded in time. An extra space bound could be added should people consider this a risk. Co-authored-by: Diva M --- Cargo.lock | 54 +++++++------- beacon_node/lighthouse_network/Cargo.toml | 1 + .../src/peer_manager/mod.rs | 44 ++++++++++++ .../src/peer_manager/network_behaviour.rs | 2 +- .../src/peer_manager/peerdb.rs | 11 ++- common/lru_cache/src/time.rs | 71 +++++++++++++++++++ 6 files changed, 154 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6159778b7..d568ade04 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1433,9 +1433,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.89" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc831ee6a32dd495436e317595e639a587aa9907bef96fe6e6abc290ab6204e9" +checksum = "90d59d9acd2a682b4e40605a242f6670eaa58c5957471cbf85e8aa6a0b97a5e8" dependencies = [ "cc", "cxxbridge-flags", @@ -1445,9 +1445,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.89" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94331d54f1b1a8895cd81049f7eaaaef9d05a7dcb4d1fd08bf3ff0806246789d" +checksum = "ebfa40bda659dd5c864e65f4c9a2b0aff19bea56b017b9b77c73d3766a453a38" dependencies = [ "cc", "codespan-reporting", @@ -1460,15 +1460,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.89" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48dcd35ba14ca9b40d6e4b4b39961f23d835dbb8eed74565ded361d93e1feb8a" +checksum = "457ce6757c5c70dc6ecdbda6925b958aae7f959bda7d8fb9bde889e34a09dc03" [[package]] name = "cxxbridge-macro" -version = "1.0.89" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bbeb29798b407ccd82a3324ade1a7286e0d29851475990b612670f6f5124d2" +checksum = "ebf883b7aacd7b2aeb2a7b338648ee19f57c140d4ee8e52c68979c6b2f7f2263" dependencies = [ "proc-macro2", "quote", @@ -2982,7 +2982,7 @@ dependencies = [ "indexmap", "slab", "tokio", - "tokio-util 0.7.4", + "tokio-util 0.7.7", "tracing", ] @@ -3463,7 +3463,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ - "parity-scale-codec 3.3.0", + "parity-scale-codec 3.4.0", ] [[package]] @@ -4215,7 +4215,7 @@ dependencies = [ "thiserror", "tinytemplate", "tokio", - "tokio-util 0.7.4", + "tokio-util 0.7.7", "webrtc", ] @@ -4391,6 +4391,7 @@ dependencies = [ "lighthouse_metrics", "lighthouse_version", "lru 0.7.8", + "lru_cache", "parking_lot 0.12.1", "prometheus-client", "quickcheck", @@ -5402,9 +5403,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3840933452adf7b3b9145e27086a5a3376c619dca1a21b1e5a5af0d54979bed" +checksum = "637935964ff85a605d114591d4d2c13c5d1ba2806dae97cea6bf180238a749ac" dependencies = [ "arrayvec", "bitvec 1.0.1", @@ -6281,7 +6282,7 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-rustls 0.23.4", - "tokio-util 0.7.4", + "tokio-util 0.7.7", "tower-service", "url", "wasm-bindgen", @@ -6567,7 +6568,7 @@ checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" dependencies = [ "cfg-if", "derive_more", - "parity-scale-codec 3.3.0", + "parity-scale-codec 3.4.0", "scale-info-derive", ] @@ -6813,9 +6814,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7434af0dc1cbd59268aa98b4c22c131c0584d2232f6fb166efb993e2832e896a" +checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" dependencies = [ "itoa 1.0.5", "ryu", @@ -6977,9 +6978,9 @@ checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] @@ -7665,10 +7666,11 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.4" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" dependencies = [ + "cfg-if", "once_cell", ] @@ -7867,7 +7869,7 @@ dependencies = [ "futures-core", "pin-project-lite 0.2.9", "tokio", - "tokio-util 0.7.4", + "tokio-util 0.7.7", ] [[package]] @@ -7917,9 +7919,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.4" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" dependencies = [ "bytes", "futures-core", @@ -8964,9 +8966,9 @@ dependencies = [ [[package]] name = "webrtc-ice" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494483fbb2f5492620871fdc78b084aed8807377f6e3fe88b2e49f0a9c9c41d7" +checksum = "465a03cc11e9a7d7b4f9f99870558fe37a102b65b93f8045392fef7c67b39e80" dependencies = [ "arc-swap", "async-trait", diff --git a/beacon_node/lighthouse_network/Cargo.toml b/beacon_node/lighthouse_network/Cargo.toml index 474ebebb5..9b00c39d2 100644 --- a/beacon_node/lighthouse_network/Cargo.toml +++ b/beacon_node/lighthouse_network/Cargo.toml @@ -25,6 +25,7 @@ lighthouse_metrics = { path = "../../common/lighthouse_metrics" } smallvec = "1.6.1" tokio-io-timeout = "1.1.1" lru = "0.7.1" +lru_cache = { path = "../../common/lru_cache" } parking_lot = "0.12.0" sha2 = "0.10" snap = "1.0.1" diff --git a/beacon_node/lighthouse_network/src/peer_manager/mod.rs b/beacon_node/lighthouse_network/src/peer_manager/mod.rs index 89670a2eb..03f6a746a 100644 --- a/beacon_node/lighthouse_network/src/peer_manager/mod.rs +++ b/beacon_node/lighthouse_network/src/peer_manager/mod.rs @@ -8,6 +8,7 @@ use crate::{Subnet, SubnetDiscovery}; use delay_map::HashSetDelay; use discv5::Enr; use libp2p::identify::Info as IdentifyInfo; +use lru_cache::LRUTimeCache; use peerdb::{client::ClientKind, BanOperation, BanResult, ScoreUpdateResult}; use rand::seq::SliceRandom; use slog::{debug, error, trace, warn}; @@ -39,6 +40,9 @@ mod network_behaviour; /// requests. This defines the interval in seconds. const HEARTBEAT_INTERVAL: u64 = 30; +/// The minimum amount of time we allow peers to reconnect to us after a disconnect when we are +/// saturated with peers. This effectively looks like a swarm BAN for this amount of time. +pub const PEER_RECONNECTION_TIMEOUT: Duration = Duration::from_secs(600); /// This is used in the pruning logic. We avoid pruning peers on sync-committees if doing so would /// lower our peer count below this number. Instead we favour a non-uniform distribution of subnet /// peers. @@ -74,6 +78,20 @@ pub struct PeerManager { target_peers: usize, /// Peers queued to be dialed. peers_to_dial: VecDeque<(PeerId, Option)>, + /// The number of temporarily banned peers. This is used to prevent instantaneous + /// reconnection. + // NOTE: This just prevents re-connections. The state of the peer is otherwise unaffected. A + // peer can be in a disconnected state and new connections will be refused and logged as if the + // peer is banned without it being reflected in the peer's state. + // Also the banned state can out-last the peer's reference in the peer db. So peers that are + // unknown to us can still be temporarily banned. This is fundamentally a relationship with + // the swarm. Regardless of our knowledge of the peer in the db, it will be temporarily banned + // at the swarm layer. + // NOTE: An LRUTimeCache is used compared to a structure that needs to be polled to avoid very + // frequent polling to unban peers. Instead, this cache piggy-backs the PeerManager heartbeat + // to update and clear the cache. Therefore the PEER_RECONNECTION_TIMEOUT only has a resolution + // of the HEARTBEAT_INTERVAL. + temporary_banned_peers: LRUTimeCache, /// A collection of sync committee subnets that we need to stay subscribed to. /// Sync committee subnets are longer term (256 epochs). Hence, we need to re-run /// discovery queries for subnet peers if we disconnect from existing sync @@ -143,6 +161,7 @@ impl PeerManager { outbound_ping_peers: HashSetDelay::new(Duration::from_secs(ping_interval_outbound)), status_peers: HashSetDelay::new(Duration::from_secs(status_interval)), target_peers: target_peer_count, + temporary_banned_peers: LRUTimeCache::new(PEER_RECONNECTION_TIMEOUT), sync_committee_subnets: Default::default(), heartbeat, discovery_enabled, @@ -243,6 +262,15 @@ impl PeerManager { reason: Option, ) { match ban_operation { + BanOperation::TemporaryBan => { + // The peer could be temporarily banned. We only do this in the case that + // we have currently reached our peer target limit. + if self.network_globals.connected_peers() >= self.target_peers { + // We have enough peers, prevent this reconnection. + self.temporary_banned_peers.raw_insert(*peer_id); + self.events.push(PeerManagerEvent::Banned(*peer_id, vec![])); + } + } BanOperation::DisconnectThePeer => { // The peer was currently connected, so we start a disconnection. // Once the peer has disconnected, its connection state will transition to a @@ -259,6 +287,11 @@ impl PeerManager { BanOperation::ReadyToBan(banned_ips) => { // The peer is not currently connected, we can safely ban it at the swarm // level. + + // If a peer is being banned, this trumps any temporary ban the peer might be + // under. We no longer track it in the temporary ban list. + self.temporary_banned_peers.raw_remove(peer_id); + // Inform the Swarm to ban the peer self.events .push(PeerManagerEvent::Banned(*peer_id, banned_ips)); @@ -1109,6 +1142,14 @@ impl PeerManager { } } + /// Unbans any temporarily banned peers that have served their timeout. + fn unban_temporary_banned_peers(&mut self) { + for peer_id in self.temporary_banned_peers.remove_expired() { + self.events + .push(PeerManagerEvent::UnBanned(peer_id, Vec::new())); + } + } + /// The Peer manager's heartbeat maintains the peer count and maintains peer reputations. /// /// It will request discovery queries if the peer count has not reached the desired number of @@ -1141,6 +1182,9 @@ impl PeerManager { // Prune any excess peers back to our target in such a way that incentivises good scores and // a uniform distribution of subnets. self.prune_excess_peers(); + + // Unban any peers that have served their temporary ban timeout + self.unban_temporary_banned_peers(); } // Update metrics related to peer scoring. diff --git a/beacon_node/lighthouse_network/src/peer_manager/network_behaviour.rs b/beacon_node/lighthouse_network/src/peer_manager/network_behaviour.rs index 42eb270c4..21288473e 100644 --- a/beacon_node/lighthouse_network/src/peer_manager/network_behaviour.rs +++ b/beacon_node/lighthouse_network/src/peer_manager/network_behaviour.rs @@ -170,7 +170,7 @@ impl PeerManager { BanResult::NotBanned => {} } - // Count dialing peers in the limit if the peer dialied us. + // Count dialing peers in the limit if the peer dialed us. let count_dialing = endpoint.is_listener(); // Check the connection limits if self.peer_limit_reached(count_dialing) diff --git a/beacon_node/lighthouse_network/src/peer_manager/peerdb.rs b/beacon_node/lighthouse_network/src/peer_manager/peerdb.rs index 1f44488a5..61cf8de1c 100644 --- a/beacon_node/lighthouse_network/src/peer_manager/peerdb.rs +++ b/beacon_node/lighthouse_network/src/peer_manager/peerdb.rs @@ -844,8 +844,12 @@ impl PeerDB { .collect::>(); return Some(BanOperation::ReadyToBan(banned_ips)); } - PeerConnectionStatus::Disconnecting { .. } - | PeerConnectionStatus::Unknown + PeerConnectionStatus::Disconnecting { .. } => { + // The peer has been disconnected but not banned. Inform the peer manager + // that this peer could be eligible for a temporary ban. + return Some(BanOperation::TemporaryBan); + } + PeerConnectionStatus::Unknown | PeerConnectionStatus::Connected { .. } | PeerConnectionStatus::Dialing { .. } => { self.disconnected_peers += 1; @@ -1177,6 +1181,9 @@ impl From> for ScoreUpdateResult { /// When attempting to ban a peer provides the peer manager with the operation that must be taken. pub enum BanOperation { + /// Optionally temporarily ban this peer to prevent instantaneous reconnection. + /// The peer manager will decide if temporary banning is required. + TemporaryBan, // The peer is currently connected. Perform a graceful disconnect before banning at the swarm // level. DisconnectThePeer, diff --git a/common/lru_cache/src/time.rs b/common/lru_cache/src/time.rs index 5c0e4c1ca..1253ef1ec 100644 --- a/common/lru_cache/src/time.rs +++ b/common/lru_cache/src/time.rs @@ -31,6 +31,77 @@ where } } + /// Inserts a key without removal of potentially expired elements. + /// Returns true if the key does not already exist. + pub fn raw_insert(&mut self, key: Key) -> bool { + // check the cache before removing elements + let is_new = self.map.insert(key.clone()); + + // add the new key to the list, if it doesn't already exist. + if is_new { + self.list.push_back(Element { + key, + inserted: Instant::now(), + }); + } else { + let position = self + .list + .iter() + .position(|e| e.key == key) + .expect("Key is not new"); + let mut element = self + .list + .remove(position) + .expect("Position is not occupied"); + element.inserted = Instant::now(); + self.list.push_back(element); + } + #[cfg(test)] + self.check_invariant(); + is_new + } + + /// Removes a key from the cache without purging expired elements. Returns true if the key + /// existed. + pub fn raw_remove(&mut self, key: &Key) -> bool { + if self.map.remove(key) { + let position = self + .list + .iter() + .position(|e| &e.key == key) + .expect("Key must exist"); + self.list + .remove(position) + .expect("Position is not occupied"); + true + } else { + false + } + } + + /// Removes all expired elements and returns them + pub fn remove_expired(&mut self) -> Vec { + if self.list.is_empty() { + return Vec::new(); + } + + let mut removed_elements = Vec::new(); + let now = Instant::now(); + // remove any expired results + while let Some(element) = self.list.pop_front() { + if element.inserted + self.ttl > now { + self.list.push_front(element); + break; + } + self.map.remove(&element.key); + removed_elements.push(element.key); + } + #[cfg(test)] + self.check_invariant(); + + removed_elements + } + // Inserts a new key. It first purges expired elements to do so. // // If the key was not present this returns `true`. If the value was already present this From 2fcfdf1a01218f78f3241b85bb8c6f526de17c35 Mon Sep 17 00:00:00 2001 From: Michael Sproul Date: Wed, 15 Feb 2023 11:51:46 +0000 Subject: [PATCH 02/29] Fix docker and deps (#3978) ## Proposed Changes - Fix this cargo-audit failure for `sqlite3-sys`: https://github.com/sigp/lighthouse/actions/runs/4179008889/jobs/7238473962 - Prevent the Docker builds from running out of RAM on CI by removing `gnosis` and LMDB support from the `-dev` images (see: https://github.com/sigp/lighthouse/pull/3959#issuecomment-1430531155, successful run on my fork: https://github.com/michaelsproul/lighthouse/actions/runs/4179162480/jobs/7239537947). --- .github/workflows/docker.yml | 5 +- Cargo.lock | 79 ++++++++----------- consensus/types/Cargo.toml | 2 +- .../slashing_protection/Cargo.toml | 4 +- .../src/slashing_database.rs | 4 +- 5 files changed, 40 insertions(+), 54 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 46896073a..c3119db37 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -53,7 +53,7 @@ jobs: x86_64-portable] features: [ {version_suffix: "", env: "gnosis,slasher-lmdb,slasher-mdbx,jemalloc"}, - {version_suffix: "-dev", env: "gnosis,slasher-lmdb,slasher-mdbx,jemalloc,spec-minimal"} + {version_suffix: "-dev", env: "jemalloc,spec-minimal"} ] include: - profile: maxperf @@ -65,8 +65,6 @@ jobs: VERSION: ${{ needs.extract-version.outputs.VERSION }} VERSION_SUFFIX: ${{ needs.extract-version.outputs.VERSION_SUFFIX }} FEATURE_SUFFIX: ${{ matrix.features.version_suffix }} - FEATURES: ${{ matrix.features.env }} - CROSS_FEATURES: ${{ matrix.features.env }} steps: - uses: actions/checkout@v3 - name: Update Rust @@ -106,7 +104,6 @@ jobs: --platform=linux/${SHORT_ARCH} \ --file ./Dockerfile.cross . \ --tag ${IMAGE_NAME}:${VERSION}-${SHORT_ARCH}${VERSION_SUFFIX}${MODERNITY_SUFFIX}${FEATURE_SUFFIX} \ - --build-arg FEATURES=${FEATURES} \ --provenance=false \ --push build-docker-multiarch: diff --git a/Cargo.lock b/Cargo.lock index d568ade04..37c6fe667 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -464,7 +464,7 @@ dependencies = [ "http", "http-body", "hyper", - "itoa 1.0.5", + "itoa", "matchit", "memchr", "mime", @@ -816,18 +816,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" -[[package]] -name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "lazy_static", - "memchr", - "regex-automata", - "serde", -] - [[package]] name = "buf_redux" version = "0.8.4" @@ -1356,13 +1344,12 @@ dependencies = [ [[package]] name = "csv" -version = "1.1.6" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" +checksum = "af91f40b7355f82b0a891f50e70399475945bb0b0da4f1700ce60761c9d3e359" dependencies = [ - "bstr", "csv-core", - "itoa 0.4.8", + "itoa", "ryu", "serde", ] @@ -1827,7 +1814,7 @@ dependencies = [ "enr", "fnv", "futures", - "hashlink", + "hashlink 0.7.0", "hex", "hkdf", "lazy_static", @@ -2558,9 +2545,9 @@ checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fastrand" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" dependencies = [ "instant", ] @@ -3043,6 +3030,15 @@ dependencies = [ "hashbrown 0.11.2", ] +[[package]] +name = "hashlink" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa" +dependencies = [ + "hashbrown 0.12.3", +] + [[package]] name = "headers" version = "0.3.8" @@ -3182,7 +3178,7 @@ checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ "bytes", "fnv", - "itoa 1.0.5", + "itoa", ] [[package]] @@ -3299,7 +3295,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.5", + "itoa", "pin-project-lite 0.2.9", "socket2", "tokio", @@ -3590,12 +3586,6 @@ dependencies = [ "either", ] -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - [[package]] name = "itoa" version = "1.0.5" @@ -4302,9 +4292,9 @@ dependencies = [ [[package]] name = "libsqlite3-sys" -version = "0.22.2" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290b64917f8b0cb885d9de0f9959fe1f775d7fa12f1da2db9001c1c8ab60f89d" +checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa" dependencies = [ "cc", "pkg-config", @@ -4731,14 +4721,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -5223,9 +5213,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "oneshot_broadcast" @@ -5845,7 +5835,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" dependencies = [ "dtoa", - "itoa 1.0.5", + "itoa", "parking_lot 0.12.1", "prometheus-client-derive-text-encode", ] @@ -6047,9 +6037,9 @@ dependencies = [ [[package]] name = "r2d2_sqlite" -version = "0.18.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d24607049214c5e42d3df53ac1d8a23c34cc6a5eefe3122acb2c72174719959" +checksum = "b4f5d0337e99cd5cacd91ffc326c6cc9d8078def459df560c4f9bf9ba4a51034" dependencies = [ "r2d2", "rusqlite", @@ -6408,16 +6398,15 @@ dependencies = [ [[package]] name = "rusqlite" -version = "0.25.4" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4b1eaf239b47034fb450ee9cdedd7d0226571689d8823030c4b6c2cb407152" +checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a" dependencies = [ "bitflags", "fallible-iterator", "fallible-streaming-iterator", - "hashlink", + "hashlink 0.8.1", "libsqlite3-sys", - "memchr", "smallvec", ] @@ -6818,7 +6807,7 @@ version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" dependencies = [ - "itoa 1.0.5", + "itoa", "ryu", "serde", ] @@ -6841,7 +6830,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.5", + "itoa", "ryu", "serde", ] @@ -7700,7 +7689,7 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" dependencies = [ - "itoa 1.0.5", + "itoa", "libc", "num_threads", "serde", diff --git a/consensus/types/Cargo.toml b/consensus/types/Cargo.toml index 6ae185f7f..7fd730a51 100644 --- a/consensus/types/Cargo.toml +++ b/consensus/types/Cargo.toml @@ -37,7 +37,7 @@ cached_tree_hash = { path = "../cached_tree_hash" } serde_yaml = "0.8.13" tempfile = "3.1.0" derivative = "2.1.1" -rusqlite = { version = "0.25.3", features = ["bundled"], optional = true } +rusqlite = { version = "0.28.0", features = ["bundled"], optional = true } arbitrary = { version = "1.0", features = ["derive"], optional = true } eth2_serde_utils = "0.1.1" regex = "1.5.5" diff --git a/validator_client/slashing_protection/Cargo.toml b/validator_client/slashing_protection/Cargo.toml index 55e7f3f71..631e54dc4 100644 --- a/validator_client/slashing_protection/Cargo.toml +++ b/validator_client/slashing_protection/Cargo.toml @@ -12,9 +12,9 @@ path = "tests/main.rs" [dependencies] tempfile = "3.1.0" types = { path = "../../consensus/types" } -rusqlite = { version = "0.25.3", features = ["bundled"] } +rusqlite = { version = "0.28.0", features = ["bundled"] } r2d2 = "0.8.9" -r2d2_sqlite = "0.18.0" +r2d2_sqlite = "0.21.0" serde = "1.0.116" serde_derive = "1.0.116" serde_json = "1.0.58" diff --git a/validator_client/slashing_protection/src/slashing_database.rs b/validator_client/slashing_protection/src/slashing_database.rs index bd5f97f4d..c8be85147 100644 --- a/validator_client/slashing_protection/src/slashing_database.rs +++ b/validator_client/slashing_protection/src/slashing_database.rs @@ -162,8 +162,8 @@ impl SlashingDatabase { /// The exclusive locking mode also has the benefit of applying to other processes, so multiple /// Lighthouse processes trying to access the same database will also be blocked. fn apply_pragmas(conn: &mut rusqlite::Connection) -> Result<(), rusqlite::Error> { - conn.pragma_update(None, "foreign_keys", &true)?; - conn.pragma_update(None, "locking_mode", &"EXCLUSIVE")?; + conn.pragma_update(None, "foreign_keys", true)?; + conn.pragma_update(None, "locking_mode", "EXCLUSIVE")?; Ok(()) } From 461bda6e8569fbd11e8386b58ea9849b98748cc2 Mon Sep 17 00:00:00 2001 From: Michael Sproul Date: Thu, 16 Feb 2023 16:54:05 +1100 Subject: [PATCH 03/29] Execution engine suggestions from code review Co-authored-by: Paul Hauner --- .../execution_layer/src/engine_api/http.rs | 18 ++++++++---------- beacon_node/execution_layer/src/engines.rs | 5 ++--- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/beacon_node/execution_layer/src/engine_api/http.rs b/beacon_node/execution_layer/src/engine_api/http.rs index 3871ca27a..8f88de79a 100644 --- a/beacon_node/execution_layer/src/engine_api/http.rs +++ b/beacon_node/execution_layer/src/engine_api/http.rs @@ -570,8 +570,8 @@ impl CapabilitiesCacheEntry { } } - pub fn engine_capabilities(&self) -> &EngineCapabilities { - &self.engine_capabilities + pub fn engine_capabilities(&self) -> EngineCapabilities { + self.engine_capabilities } pub fn age(&self) -> Duration { @@ -817,7 +817,9 @@ impl HttpJsonRpc { Ok(GetPayloadResponse::Merge(GetPayloadResponseMerge { execution_payload: payload_v1.into(), - // Have to guess zero here as we don't know the value + // Set the V1 payload values from the EE to be zero. This simulates + // the pre-block-value functionality of always choosing the builder + // block. block_value: Uint256::zero(), })) } @@ -984,16 +986,12 @@ impl HttpJsonRpc { ) -> Result { let mut lock = self.engine_capabilities_cache.lock().await; - if lock - .as_ref() - .map_or(true, |entry| entry.older_than(age_limit)) - { + if let Some(lock) = lock.as_ref().filter(|entry| !entry.older_than(age_limit)) { + Ok(lock.engine_capabilities()) + } else { let engine_capabilities = self.exchange_capabilities().await?; *lock = Some(CapabilitiesCacheEntry::new(engine_capabilities)); Ok(engine_capabilities) - } else { - // here entry is guaranteed to exist so unwrap() is safe - Ok(*lock.as_ref().unwrap().engine_capabilities()) } } diff --git a/beacon_node/execution_layer/src/engines.rs b/beacon_node/execution_layer/src/engines.rs index fe4058af0..1ee355e47 100644 --- a/beacon_node/execution_layer/src/engines.rs +++ b/beacon_node/execution_layer/src/engines.rs @@ -17,8 +17,7 @@ use types::ExecutionBlockHash; /// The number of payload IDs that will be stored for each `Engine`. /// -/// Since the size of each value is small (~100 bytes) a large number is used for safety. -/// FIXME: check this assumption now that the key includes entire payload attributes which now includes withdrawals +/// Since the size of each value is small (~800 bytes) a large number is used for safety. const PAYLOAD_ID_LRU_CACHE_SIZE: usize = 512; const CACHED_ENGINE_CAPABILITIES_AGE_LIMIT: Duration = Duration::from_secs(900); // 15 minutes @@ -276,7 +275,7 @@ impl Engine { let mut state = self.state.write().await; state.update(EngineStateInternal::AuthFailed); - (**state, CapabilitiesCacheAction::None) + (**state, CapabilitiesCacheAction::Clear) } Err(e) => { error!( From ffeb8b6e05d4023e122138c10fbef6048c801025 Mon Sep 17 00:00:00 2001 From: Divma Date: Thu, 16 Feb 2023 23:34:30 +0000 Subject: [PATCH 04/29] blacklist tests in windows (#3961) ## Issue Addressed Windows tests for subscription and unsubscriptions fail in CI sporadically. We usually ignore this failures, so this PR aims to help reduce the failure noise. Associated issue is https://github.com/sigp/lighthouse/issues/3960 --- beacon_node/network/src/subnet_service/tests/mod.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/beacon_node/network/src/subnet_service/tests/mod.rs b/beacon_node/network/src/subnet_service/tests/mod.rs index 9e1c9f51b..a407fe1bc 100644 --- a/beacon_node/network/src/subnet_service/tests/mod.rs +++ b/beacon_node/network/src/subnet_service/tests/mod.rs @@ -182,6 +182,7 @@ mod attestation_service { #[cfg(feature = "deterministic_long_lived_attnets")] use std::collections::HashSet; + #[cfg(not(windows))] use crate::subnet_service::attestation_subnets::MIN_PEER_DISCOVERY_SLOT_LOOK_AHEAD; use super::*; @@ -290,6 +291,7 @@ mod attestation_service { } /// Test to verify that we are not unsubscribing to a subnet before a required subscription. + #[cfg(not(windows))] #[tokio::test] async fn test_same_subnet_unsubscription() { // subscription config @@ -513,6 +515,7 @@ mod attestation_service { assert_eq!(unexpected_msg_count, 0); } + #[cfg(not(windows))] #[tokio::test] async fn test_subscribe_same_subnet_several_slots_apart() { // subscription config From 245e922c7b4c48a3573859f06439c41ae52a579b Mon Sep 17 00:00:00 2001 From: Jimmy Chen Date: Thu, 16 Feb 2023 23:34:32 +0000 Subject: [PATCH 05/29] Improve testing slot clock to allow manipulation of time in tests (#3974) ## Issue Addressed I discovered this issue while implementing [this test](https://github.com/jimmygchen/lighthouse/blob/test-example/beacon_node/network/src/beacon_processor/tests.rs#L895), where I tried to manipulate the slot clock with: `rig.chain.slot_clock.set_current_time(duration);` however the change doesn't get reflected in the `slot_clock` in `ReprocessQueue`, and I realised `slot_clock` was cloned a few times in the code, and therefore changing the time in `rig.chain.slot_clock` doesn't have any effect in `ReprocessQueue`. I've incorporated the suggestion from the @paulhauner and @michaelsproul - wrapping the `ManualSlotClock.current_time` (`RwLock)` in an `Arc`, and the above test now passes. Let's see if this breaks any existing tests :) --- common/slot_clock/src/manual_slot_clock.rs | 7 +++-- lighthouse/tests/beacon_node.rs | 34 ++++++++++++---------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/common/slot_clock/src/manual_slot_clock.rs b/common/slot_clock/src/manual_slot_clock.rs index 296247fe9..61299f74a 100644 --- a/common/slot_clock/src/manual_slot_clock.rs +++ b/common/slot_clock/src/manual_slot_clock.rs @@ -1,6 +1,7 @@ use super::SlotClock; use parking_lot::RwLock; use std::convert::TryInto; +use std::sync::Arc; use std::time::Duration; use types::Slot; @@ -10,7 +11,7 @@ pub struct ManualSlotClock { /// Duration from UNIX epoch to genesis. genesis_duration: Duration, /// Duration from UNIX epoch to right now. - current_time: RwLock, + current_time: Arc>, /// The length of each slot. slot_duration: Duration, } @@ -20,7 +21,7 @@ impl Clone for ManualSlotClock { ManualSlotClock { genesis_slot: self.genesis_slot, genesis_duration: self.genesis_duration, - current_time: RwLock::new(*self.current_time.read()), + current_time: Arc::clone(&self.current_time), slot_duration: self.slot_duration, } } @@ -90,7 +91,7 @@ impl SlotClock for ManualSlotClock { Self { genesis_slot, - current_time: RwLock::new(genesis_duration), + current_time: Arc::new(RwLock::new(genesis_duration)), genesis_duration, slot_duration, } diff --git a/lighthouse/tests/beacon_node.rs b/lighthouse/tests/beacon_node.rs index 053a04f87..a07502c58 100644 --- a/lighthouse/tests/beacon_node.rs +++ b/lighthouse/tests/beacon_node.rs @@ -1418,7 +1418,7 @@ fn slasher_slot_offset_flag() { CommandLineTest::new() .flag("slasher", None) .flag("slasher-slot-offset", Some("11.25")) - .run() + .run_with_zero_port() .with_config(|config| { let slasher_config = config.slasher.as_ref().unwrap(); assert_eq!(slasher_config.slot_offset, 11.25); @@ -1430,7 +1430,7 @@ fn slasher_slot_offset_nan_flag() { CommandLineTest::new() .flag("slasher", None) .flag("slasher-slot-offset", Some("NaN")) - .run(); + .run_with_zero_port(); } #[test] fn slasher_history_length_flag() { @@ -1465,7 +1465,7 @@ fn slasher_attestation_cache_size_flag() { CommandLineTest::new() .flag("slasher", None) .flag("slasher-att-cache-size", Some("10000")) - .run() + .run_with_zero_port() .with_config(|config| { let slasher_config = config .slasher @@ -1569,23 +1569,25 @@ fn ensure_panic_on_failed_launch() { #[test] fn enable_proposer_re_orgs_default() { - CommandLineTest::new().run().with_config(|config| { - assert_eq!( - config.chain.re_org_threshold, - Some(DEFAULT_RE_ORG_THRESHOLD) - ); - assert_eq!( - config.chain.re_org_max_epochs_since_finalization, - DEFAULT_RE_ORG_MAX_EPOCHS_SINCE_FINALIZATION, - ); - }); + CommandLineTest::new() + .run_with_zero_port() + .with_config(|config| { + assert_eq!( + config.chain.re_org_threshold, + Some(DEFAULT_RE_ORG_THRESHOLD) + ); + assert_eq!( + config.chain.re_org_max_epochs_since_finalization, + DEFAULT_RE_ORG_MAX_EPOCHS_SINCE_FINALIZATION, + ); + }); } #[test] fn disable_proposer_re_orgs() { CommandLineTest::new() .flag("disable-proposer-reorgs", None) - .run() + .run_with_zero_port() .with_config(|config| assert_eq!(config.chain.re_org_threshold, None)); } @@ -1593,7 +1595,7 @@ fn disable_proposer_re_orgs() { fn proposer_re_org_threshold() { CommandLineTest::new() .flag("proposer-reorg-threshold", Some("90")) - .run() + .run_with_zero_port() .with_config(|config| assert_eq!(config.chain.re_org_threshold.unwrap().0, 90)); } @@ -1601,7 +1603,7 @@ fn proposer_re_org_threshold() { fn proposer_re_org_max_epochs_since_finalization() { CommandLineTest::new() .flag("proposer-reorg-epochs-since-finalization", Some("8")) - .run() + .run_with_zero_port() .with_config(|config| { assert_eq!( config.chain.re_org_max_epochs_since_finalization.as_u64(), From ebf2fec5d025273ff6f334d9effc7bcfc767278f Mon Sep 17 00:00:00 2001 From: Michael Sproul Date: Thu, 16 Feb 2023 23:34:33 +0000 Subject: [PATCH 06/29] Fix exec integration tests for Geth v1.11.0 (#3982) ## Proposed Changes * Bump Go from 1.17 to 1.20. The latest Geth release v1.11.0 requires 1.18 minimum. * Prevent a cache miss during payload building by using the right fee recipient. This prevents Geth v1.11.0 from building a block with 0 transactions. The payload building mechanism is overhauled in the new Geth to improve the payload every 2s, and the tests were failing because we were falling back on a `getPayload` call with no lookahead due to `get_payload_id` cache miss caused by the mismatched fee recipient. Alternatively we could hack the tests to send `proposer_preparation_data`, but I think the static fee recipient is simpler for now. * Add support for optionally enabling Lighthouse logs in the integration tests. Enable using `cargo run --release --features logging/test_logger`. This was very useful for debugging. --- .github/workflows/test-suite.yml | 2 +- Cargo.lock | 1 + testing/execution_engine_integration/Cargo.toml | 1 + testing/execution_engine_integration/src/test_rig.rs | 12 ++++++++---- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test-suite.yml b/.github/workflows/test-suite.yml index 57fee7183..5ecd5efe3 100644 --- a/.github/workflows/test-suite.yml +++ b/.github/workflows/test-suite.yml @@ -280,7 +280,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-go@v3 with: - go-version: '1.17' + go-version: '1.20' - uses: actions/setup-dotnet@v3 with: dotnet-version: '6.0.201' diff --git a/Cargo.lock b/Cargo.lock index 37c6fe667..5d5d32157 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2463,6 +2463,7 @@ dependencies = [ "fork_choice", "futures", "hex", + "logging", "reqwest", "sensitive_url", "serde_json", diff --git a/testing/execution_engine_integration/Cargo.toml b/testing/execution_engine_integration/Cargo.toml index 26b5f596f..de3085d22 100644 --- a/testing/execution_engine_integration/Cargo.toml +++ b/testing/execution_engine_integration/Cargo.toml @@ -21,3 +21,4 @@ deposit_contract = { path = "../../common/deposit_contract" } reqwest = { version = "0.11.0", features = ["json"] } hex = "0.4.2" fork_choice = { path = "../../consensus/fork_choice" } +logging = { path = "../../common/logging" } diff --git a/testing/execution_engine_integration/src/test_rig.rs b/testing/execution_engine_integration/src/test_rig.rs index 5455b48bc..ee20129f8 100644 --- a/testing/execution_engine_integration/src/test_rig.rs +++ b/testing/execution_engine_integration/src/test_rig.rs @@ -100,7 +100,7 @@ async fn import_and_unlock(http_url: SensitiveUrl, priv_keys: &[&str], password: impl TestRig { pub fn new(generic_engine: E) -> Self { - let log = environment::null_logger().unwrap(); + let log = logging::test_logger(); let runtime = Arc::new( tokio::runtime::Builder::new_multi_thread() .enable_all() @@ -281,7 +281,9 @@ impl TestRig { PayloadAttributes { timestamp, prev_randao, - suggested_fee_recipient: Address::zero(), + // To save sending proposer preparation data, just set the fee recipient + // to the fee recipient configured for EE A. + suggested_fee_recipient: Address::repeat_byte(42), }, ) .await; @@ -330,6 +332,7 @@ impl TestRig { .await .unwrap() .execution_payload; + assert_eq!(valid_payload.transactions.len(), pending_txs.len()); /* * Execution Engine A: @@ -394,7 +397,6 @@ impl TestRig { .await .unwrap(); assert_eq!(status, PayloadStatus::Valid); - assert_eq!(valid_payload.transactions.len(), pending_txs.len()); // Verify that all submitted txs were successful for pending_tx in pending_txs { @@ -479,7 +481,9 @@ impl TestRig { let payload_attributes = PayloadAttributes { timestamp: second_payload.timestamp + 1, prev_randao: Hash256::zero(), - suggested_fee_recipient: Address::zero(), + // To save sending proposer preparation data, just set the fee recipient + // to the fee recipient configured for EE A. + suggested_fee_recipient: Address::repeat_byte(42), }; let slot = Slot::new(42); let head_block_root = Hash256::repeat_byte(100); From 4aa8a2ab128d63cf124bf5d32c1bbfe0e7086add Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Fri, 17 Feb 2023 11:58:33 +1100 Subject: [PATCH 07/29] Suggestions for Capella `execution_layer` (#3983) * Restrict Engine::request to FnOnce * Use `Into::into` * Impl IntoIterator for VariableList * Use Instant rather than SystemTime --- .../execution_layer/src/engine_api/http.rs | 16 ++++------------ .../src/engine_api/json_structures.rs | 4 ---- beacon_node/execution_layer/src/engines.rs | 2 +- beacon_node/execution_layer/src/lib.rs | 11 +++-------- consensus/ssz_types/src/variable_list.rs | 9 +++++++++ 5 files changed, 17 insertions(+), 25 deletions(-) diff --git a/beacon_node/execution_layer/src/engine_api/http.rs b/beacon_node/execution_layer/src/engine_api/http.rs index 8f88de79a..4416d6a37 100644 --- a/beacon_node/execution_layer/src/engine_api/http.rs +++ b/beacon_node/execution_layer/src/engine_api/http.rs @@ -10,7 +10,7 @@ use serde_json::json; use std::collections::HashSet; use tokio::sync::Mutex; -use std::time::{Duration, SystemTime}; +use std::time::{Duration, Instant}; use types::EthSpec; pub use deposit_log::{DepositLog, Log}; @@ -559,14 +559,14 @@ pub mod deposit_methods { #[derive(Clone, Debug)] pub struct CapabilitiesCacheEntry { engine_capabilities: EngineCapabilities, - fetch_time: SystemTime, + fetch_time: Instant, } impl CapabilitiesCacheEntry { pub fn new(engine_capabilities: EngineCapabilities) -> Self { Self { engine_capabilities, - fetch_time: SystemTime::now(), + fetch_time: Instant::now(), } } @@ -575,15 +575,7 @@ impl CapabilitiesCacheEntry { } pub fn age(&self) -> Duration { - // duration_since() may fail because measurements taken earlier - // are not guaranteed to always be before later measurements - // due to anomalies such as the system clock being adjusted - // either forwards or backwards - // - // In such cases, we'll just say the age is zero - SystemTime::now() - .duration_since(self.fetch_time) - .unwrap_or(Duration::ZERO) + Instant::now().duration_since(self.fetch_time) } /// returns `true` if the entry's age is >= age_limit diff --git a/beacon_node/execution_layer/src/engine_api/json_structures.rs b/beacon_node/execution_layer/src/engine_api/json_structures.rs index ace15ebd8..a6ebc1952 100644 --- a/beacon_node/execution_layer/src/engine_api/json_structures.rs +++ b/beacon_node/execution_layer/src/engine_api/json_structures.rs @@ -145,7 +145,6 @@ impl From> for JsonExecutionPayloadV2 withdrawals: payload .withdrawals .into_iter() - .cloned() .map(Into::into) .collect::>() .into(), @@ -173,7 +172,6 @@ impl From> for JsonExecutionPayloadV3 withdrawals: payload .withdrawals .into_iter() - .cloned() .map(Into::into) .collect::>() .into(), @@ -231,7 +229,6 @@ impl From> for ExecutionPayloadCapella withdrawals: payload .withdrawals .into_iter() - .cloned() .map(Into::into) .collect::>() .into(), @@ -259,7 +256,6 @@ impl From> for ExecutionPayloadEip4844 withdrawals: payload .withdrawals .into_iter() - .cloned() .map(Into::into) .collect::>() .into(), diff --git a/beacon_node/execution_layer/src/engines.rs b/beacon_node/execution_layer/src/engines.rs index 1ee355e47..ce413cb11 100644 --- a/beacon_node/execution_layer/src/engines.rs +++ b/beacon_node/execution_layer/src/engines.rs @@ -341,7 +341,7 @@ impl Engine { /// deadlock. pub async fn request<'a, F, G, H>(self: &'a Arc, func: F) -> Result where - F: Fn(&'a Engine) -> G, + F: FnOnce(&'a Engine) -> G, G: Future>, { match func(self).await { diff --git a/beacon_node/execution_layer/src/lib.rs b/beacon_node/execution_layer/src/lib.rs index 6798d49bc..af5e49155 100644 --- a/beacon_node/execution_layer/src/lib.rs +++ b/beacon_node/execution_layer/src/lib.rs @@ -1348,16 +1348,11 @@ impl ExecutionLayer { .set_latest_forkchoice_state(forkchoice_state) .await; - let payload_attributes_ref = &payload_attributes; let result = self .engine() .request(|engine| async move { engine - .notify_forkchoice_updated( - forkchoice_state, - payload_attributes_ref.clone(), - self.log(), - ) + .notify_forkchoice_updated(forkchoice_state, payload_attributes, self.log()) .await }) .await; @@ -1723,7 +1718,7 @@ impl ExecutionLayer { capella_block .withdrawals .into_iter() - .map(|w| w.into()) + .map(Into::into) .collect(), ) .map_err(ApiError::DeserializeWithdrawals)?; @@ -1750,7 +1745,7 @@ impl ExecutionLayer { eip4844_block .withdrawals .into_iter() - .map(|w| w.into()) + .map(Into::into) .collect(), ) .map_err(ApiError::DeserializeWithdrawals)?; diff --git a/consensus/ssz_types/src/variable_list.rs b/consensus/ssz_types/src/variable_list.rs index ef1f113bb..3361f7509 100644 --- a/consensus/ssz_types/src/variable_list.rs +++ b/consensus/ssz_types/src/variable_list.rs @@ -176,6 +176,15 @@ impl<'a, T, N: Unsigned> IntoIterator for &'a VariableList { } } +impl IntoIterator for VariableList { + type Item = T; + type IntoIter = std::vec::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.vec.into_iter() + } +} + impl tree_hash::TreeHash for VariableList where T: tree_hash::TreeHash, From 9a41f65b892e4c679d353ddc00e87bd93b521026 Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Fri, 17 Feb 2023 16:25:20 +1100 Subject: [PATCH 08/29] Add capella fork epoch (#3997) --- .../built_in_network_configs/sepolia/config.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/eth2_network_config/built_in_network_configs/sepolia/config.yaml b/common/eth2_network_config/built_in_network_configs/sepolia/config.yaml index 7b2d9c133..4ba006ec9 100644 --- a/common/eth2_network_config/built_in_network_configs/sepolia/config.yaml +++ b/common/eth2_network_config/built_in_network_configs/sepolia/config.yaml @@ -28,6 +28,10 @@ TERMINAL_TOTAL_DIFFICULTY: 17000000000000000 TERMINAL_BLOCK_HASH: 0x0000000000000000000000000000000000000000000000000000000000000000 TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH: 18446744073709551615 +# Capella +CAPELLA_FORK_VERSION: 0x90000072 +CAPELLA_FORK_EPOCH: 56832 + # Eip4844 EIP4844_FORK_VERSION: 0x03001020 EIP4844_FORK_EPOCH: 18446744073709551615 From 0b6850221edca109318b227bacb5b2ebb0d89ad0 Mon Sep 17 00:00:00 2001 From: Michael Sproul Date: Mon, 20 Feb 2023 17:50:42 +1100 Subject: [PATCH 09/29] Fix Capella schema downgrades (#4004) --- .../src/schema_change/migration_schema_v14.rs | 60 +++++++++++-- .../src/schema_change/migration_schema_v15.rs | 6 +- beacon_node/beacon_chain/tests/store_tests.rs | 88 +++++++++++++++++++ beacon_node/operation_pool/src/persistence.rs | 14 +++ beacon_node/store/src/errors.rs | 3 +- beacon_node/store/src/hot_cold_store.rs | 5 ++ book/src/database-migrations.md | 6 ++ 7 files changed, 171 insertions(+), 11 deletions(-) diff --git a/beacon_node/beacon_chain/src/schema_change/migration_schema_v14.rs b/beacon_node/beacon_chain/src/schema_change/migration_schema_v14.rs index 02422a403..be913d8cc 100644 --- a/beacon_node/beacon_chain/src/schema_change/migration_schema_v14.rs +++ b/beacon_node/beacon_chain/src/schema_change/migration_schema_v14.rs @@ -2,9 +2,41 @@ use crate::beacon_chain::{BeaconChainTypes, OP_POOL_DB_KEY}; use operation_pool::{ PersistedOperationPool, PersistedOperationPoolV12, PersistedOperationPoolV14, }; -use slog::{debug, info, Logger}; +use slog::{debug, error, info, Logger}; +use slot_clock::SlotClock; use std::sync::Arc; +use std::time::Duration; use store::{Error, HotColdDB, KeyValueStoreOp, StoreItem}; +use types::{EthSpec, Hash256, Slot}; + +/// The slot clock isn't usually available before the database is initialized, so we construct a +/// temporary slot clock by reading the genesis state. It should always exist if the database is +/// initialized at a prior schema version, however we still handle the lack of genesis state +/// gracefully. +fn get_slot_clock( + db: &HotColdDB, + log: &Logger, +) -> Result, Error> { + let spec = db.get_chain_spec(); + let genesis_block = if let Some(block) = db.get_blinded_block(&Hash256::zero())? { + block + } else { + error!(log, "Missing genesis block"); + return Ok(None); + }; + let genesis_state = + if let Some(state) = db.get_state(&genesis_block.state_root(), Some(Slot::new(0)))? { + state + } else { + error!(log, "Missing genesis state"; "state_root" => ?genesis_block.state_root()); + return Ok(None); + }; + Ok(Some(T::SlotClock::new( + spec.genesis_slot, + Duration::from_secs(genesis_state.genesis_time()), + Duration::from_secs(spec.seconds_per_slot), + ))) +} pub fn upgrade_to_v14( db: Arc>, @@ -41,17 +73,35 @@ pub fn downgrade_from_v14( db: Arc>, log: Logger, ) -> Result, Error> { + // We cannot downgrade from V14 once the Capella fork has been reached because there will + // be HistoricalSummaries stored in the database instead of HistoricalRoots and prior versions + // of Lighthouse can't handle that. + if let Some(capella_fork_epoch) = db.get_chain_spec().capella_fork_epoch { + let current_epoch = get_slot_clock::(&db, &log)? + .and_then(|clock| clock.now()) + .map(|slot| slot.epoch(T::EthSpec::slots_per_epoch())) + .ok_or(Error::SlotClockUnavailableForMigration)?; + + if current_epoch >= capella_fork_epoch { + error!( + log, + "Capella already active: v14+ is mandatory"; + "current_epoch" => current_epoch, + "capella_fork_epoch" => capella_fork_epoch, + ); + return Err(Error::UnableToDowngrade); + } + } + // Load a V14 op pool and transform it to V12. - let PersistedOperationPoolV14 { + let PersistedOperationPoolV14:: { attestations, sync_contributions, attester_slashings, proposer_slashings, voluntary_exits, bls_to_execution_changes, - } = if let Some(PersistedOperationPool::::V14(op_pool)) = - db.get_item(&OP_POOL_DB_KEY)? - { + } = if let Some(op_pool) = db.get_item(&OP_POOL_DB_KEY)? { op_pool } else { debug!(log, "Nothing to do, no operation pool stored"); diff --git a/beacon_node/beacon_chain/src/schema_change/migration_schema_v15.rs b/beacon_node/beacon_chain/src/schema_change/migration_schema_v15.rs index f4adc2cf4..07c86bd93 100644 --- a/beacon_node/beacon_chain/src/schema_change/migration_schema_v15.rs +++ b/beacon_node/beacon_chain/src/schema_change/migration_schema_v15.rs @@ -43,7 +43,7 @@ pub fn downgrade_from_v15( log: Logger, ) -> Result, Error> { // Load a V15 op pool and transform it to V14. - let PersistedOperationPoolV15 { + let PersistedOperationPoolV15:: { attestations, sync_contributions, attester_slashings, @@ -51,9 +51,7 @@ pub fn downgrade_from_v15( voluntary_exits, bls_to_execution_changes, capella_bls_change_broadcast_indices, - } = if let Some(PersistedOperationPool::::V15(op_pool)) = - db.get_item(&OP_POOL_DB_KEY)? - { + } = if let Some(op_pool) = db.get_item(&OP_POOL_DB_KEY)? { op_pool } else { debug!(log, "Nothing to do, no operation pool stored"); diff --git a/beacon_node/beacon_chain/tests/store_tests.rs b/beacon_node/beacon_chain/tests/store_tests.rs index 622ea7aec..2f40443b9 100644 --- a/beacon_node/beacon_chain/tests/store_tests.rs +++ b/beacon_node/beacon_chain/tests/store_tests.rs @@ -2,6 +2,7 @@ use beacon_chain::attestation_verification::Error as AttnError; use beacon_chain::builder::BeaconChainBuilder; +use beacon_chain::schema_change::migrate_schema; use beacon_chain::test_utils::{ test_spec, AttestationStrategy, BeaconChainHarness, BlockStrategy, DiskHarnessType, }; @@ -22,6 +23,7 @@ use std::collections::HashSet; use std::convert::TryInto; use std::sync::Arc; use std::time::Duration; +use store::metadata::{SchemaVersion, CURRENT_SCHEMA_VERSION}; use store::{ iter::{BlockRootsIterator, StateRootsIterator}, HotColdDB, LevelDB, StoreConfig, @@ -68,6 +70,7 @@ fn get_harness( let harness = BeaconChainHarness::builder(MinimalEthSpec) .default_spec() .keypairs(KEYPAIRS[0..validator_count].to_vec()) + .logger(store.logger().clone()) .fresh_disk_store(store) .mock_execution_layer() .build(); @@ -2529,6 +2532,91 @@ async fn revert_minority_fork_on_resume() { assert_eq!(heads.len(), 1); } +// This test checks whether the schema downgrade from the latest version to some minimum supported +// version is correct. This is the easiest schema test to write without historic versions of +// Lighthouse on-hand, but has the disadvantage that the min version needs to be adjusted manually +// as old downgrades are deprecated. +#[tokio::test] +async fn schema_downgrade_to_min_version() { + let num_blocks_produced = E::slots_per_epoch() * 4; + let db_path = tempdir().unwrap(); + let store = get_store(&db_path); + let harness = get_harness(store.clone(), LOW_VALIDATOR_COUNT); + let spec = &harness.chain.spec.clone(); + + harness + .extend_chain( + num_blocks_produced as usize, + BlockStrategy::OnCanonicalHead, + AttestationStrategy::AllValidators, + ) + .await; + + let min_version = if harness.spec.capella_fork_epoch.is_some() { + // Can't downgrade beyond V14 once Capella is reached, for simplicity don't test that + // at all if Capella is enabled. + SchemaVersion(14) + } else { + SchemaVersion(11) + }; + + // Close the database to ensure everything is written to disk. + drop(store); + drop(harness); + + // Re-open the store. + let store = get_store(&db_path); + + // Downgrade. + let deposit_contract_deploy_block = 0; + migrate_schema::>( + store.clone(), + deposit_contract_deploy_block, + CURRENT_SCHEMA_VERSION, + min_version, + store.logger().clone(), + spec, + ) + .expect("schema downgrade to minimum version should work"); + + // Upgrade back. + migrate_schema::>( + store.clone(), + deposit_contract_deploy_block, + min_version, + CURRENT_SCHEMA_VERSION, + store.logger().clone(), + spec, + ) + .expect("schema upgrade from minimum version should work"); + + // Rescreate the harness. + let harness = BeaconChainHarness::builder(MinimalEthSpec) + .default_spec() + .keypairs(KEYPAIRS[0..LOW_VALIDATOR_COUNT].to_vec()) + .logger(store.logger().clone()) + .resumed_disk_store(store.clone()) + .mock_execution_layer() + .build(); + + check_finalization(&harness, num_blocks_produced); + check_split_slot(&harness, store.clone()); + check_chain_dump(&harness, num_blocks_produced + 1); + check_iterators(&harness); + + // Check that downgrading beyond the minimum version fails (bound is *tight*). + let min_version_sub_1 = SchemaVersion(min_version.as_u64().checked_sub(1).unwrap()); + migrate_schema::>( + store.clone(), + deposit_contract_deploy_block, + CURRENT_SCHEMA_VERSION, + min_version_sub_1, + harness.logger().clone(), + spec, + ) + .expect_err("should not downgrade below minimum version"); +} + /// Checks that two chains are the same, for the purpose of these tests. /// /// Several fields that are hard/impossible to check are ignored (e.g., the store). diff --git a/beacon_node/operation_pool/src/persistence.rs b/beacon_node/operation_pool/src/persistence.rs index 65354e01a..35d2b4ce7 100644 --- a/beacon_node/operation_pool/src/persistence.rs +++ b/beacon_node/operation_pool/src/persistence.rs @@ -242,6 +242,20 @@ impl StoreItem for PersistedOperationPoolV14 { } } +impl StoreItem for PersistedOperationPoolV15 { + fn db_column() -> DBColumn { + DBColumn::OpPool + } + + fn as_store_bytes(&self) -> Vec { + self.as_ssz_bytes() + } + + fn from_store_bytes(bytes: &[u8]) -> Result { + PersistedOperationPoolV15::from_ssz_bytes(bytes).map_err(Into::into) + } +} + /// Deserialization for `PersistedOperationPool` defaults to `PersistedOperationPool::V12`. impl StoreItem for PersistedOperationPool { fn db_column() -> DBColumn { diff --git a/beacon_node/store/src/errors.rs b/beacon_node/store/src/errors.rs index 3e1c6d012..fcc40706b 100644 --- a/beacon_node/store/src/errors.rs +++ b/beacon_node/store/src/errors.rs @@ -42,9 +42,8 @@ pub enum Error { }, BlockReplayError(BlockReplayError), AddPayloadLogicError, - ResyncRequiredForExecutionPayloadSeparation, SlotClockUnavailableForMigration, - V9MigrationFailure(Hash256), + UnableToDowngrade, InconsistentFork(InconsistentFork), } diff --git a/beacon_node/store/src/hot_cold_store.rs b/beacon_node/store/src/hot_cold_store.rs index 833158082..965bbb3bd 100644 --- a/beacon_node/store/src/hot_cold_store.rs +++ b/beacon_node/store/src/hot_cold_store.rs @@ -1176,6 +1176,11 @@ impl, Cold: ItemStore> HotColdDB &self.spec } + /// Get a reference to the `Logger` used by the database. + pub fn logger(&self) -> &Logger { + &self.log + } + /// Fetch a copy of the current split slot from memory. pub fn get_split_slot(&self) -> Slot { self.split.read_recursive().slot diff --git a/book/src/database-migrations.md b/book/src/database-migrations.md index 0982e10ab..7219a0f6b 100644 --- a/book/src/database-migrations.md +++ b/book/src/database-migrations.md @@ -26,10 +26,16 @@ validator client or the slasher**. | v3.1.0 | Sep 2022 | v12 | yes | | v3.2.0 | Oct 2022 | v12 | yes | | v3.3.0 | Nov 2022 | v13 | yes | +| v3.4.0 | Jan 2023 | v13 | yes | +| v3.5.0 | Feb 2023 | v15 | yes before Capella | > **Note**: All point releases (e.g. v2.3.1) are schema-compatible with the prior minor release > (e.g. v2.3.0). +> **Note**: Support for old schemas is gradually removed from newer versions of Lighthouse. We +usually do this after a major version has been out for a while and everyone has upgraded. In this +case the above table will continue to record the deprecated schema changes for reference. + ## How to apply a database downgrade To apply a downgrade you need to use the `lighthouse db migrate` command with the correct parameters. From c3c181aa036786573f7cdd08fcec04c3bf492be5 Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Tue, 21 Feb 2023 11:01:22 +1100 Subject: [PATCH 10/29] Remove "eip4844" network (#4008) --- common/eth2_config/src/lib.rs | 3 +- .../eip4844/boot_enr.yaml | 3 - .../eip4844/config.yaml | 85 ------------------ .../eip4844/deploy_block.txt | 1 - .../eip4844/genesis.ssz.zip | Bin 3546 -> 0 bytes 5 files changed, 1 insertion(+), 91 deletions(-) delete mode 100644 common/eth2_network_config/built_in_network_configs/eip4844/boot_enr.yaml delete mode 100644 common/eth2_network_config/built_in_network_configs/eip4844/config.yaml delete mode 100644 common/eth2_network_config/built_in_network_configs/eip4844/deploy_block.txt delete mode 100644 common/eth2_network_config/built_in_network_configs/eip4844/genesis.ssz.zip diff --git a/common/eth2_config/src/lib.rs b/common/eth2_config/src/lib.rs index 45fc709cb..7e3c025a8 100644 --- a/common/eth2_config/src/lib.rs +++ b/common/eth2_config/src/lib.rs @@ -307,6 +307,5 @@ define_hardcoded_nets!( // Set to `true` if the genesis state can be found in the `built_in_network_configs` // directory. GENESIS_STATE_IS_KNOWN - ), - (eip4844, "eip4844", GENESIS_STATE_IS_KNOWN) + ) ); diff --git a/common/eth2_network_config/built_in_network_configs/eip4844/boot_enr.yaml b/common/eth2_network_config/built_in_network_configs/eip4844/boot_enr.yaml deleted file mode 100644 index 4d52cc597..000000000 --- a/common/eth2_network_config/built_in_network_configs/eip4844/boot_enr.yaml +++ /dev/null @@ -1,3 +0,0 @@ -- enr:-MK4QLij8YaVQ6fIi09rDuD9fufxBlCZRXwfM1q6SbNJfy5ZZdAvtlnsfqhIeI0IqeOZdaPExVCfZfR4JJTIuKXFR76GAYJGrqHnh2F0dG5ldHOIAAAAAAAAAACEZXRoMpBCynldgwAP_QMAAAAAAAAAgmlkgnY0gmlwhCJ7uEyJc2VjcDI1NmsxoQJpeftU6RbmIhcFllICznlAMJXL3EwHEGhn73_Gk0wrCYhzeW5jbmV0cwCDdGNwgjLIg3VkcIIu4A -- enr:-JG4QK27MZvV3QbwdLt055Yhei27SjAsDXMFGCdl-Q7SDiCgR_qbiW3BmcOClehFVJgMa6IfjHeJBdbC0jvrr2NycOqGAYJLWb5kgmlkgnY0gmlwhCJE_eeJc2VjcDI1NmsxoQIecO7Y9C7J2Bs7RNxXaUkU6BfmPKIhEsDScKAoxENaRYN0Y3CCdl-DdWRwgnZf -- enr:-JG4QExcHW3vzBcE0f_r-93nSA4iBy4qNLthSyTw7p0tlPwjMl1JVTAgLSNHLLZJzOGtelJO4sw37LliuHyJ55zN5J6GAYJLWTvzgmlkgnY0gmlwhCKq1cmJc2VjcDI1NmsxoQJT2d4jtKQbHNw3tZPLhoMlR73o5LNdi-bk_bYq6siwuIN0Y3CCdl-DdWRwgnZf \ No newline at end of file diff --git a/common/eth2_network_config/built_in_network_configs/eip4844/config.yaml b/common/eth2_network_config/built_in_network_configs/eip4844/config.yaml deleted file mode 100644 index d6e6aef57..000000000 --- a/common/eth2_network_config/built_in_network_configs/eip4844/config.yaml +++ /dev/null @@ -1,85 +0,0 @@ -# Prater config - -# Extends the mainnet preset -CONFIG_NAME: 'eip4844' -PRESET_BASE: 'mainnet' - -# Transition -# --------------------------------------------------------------- -TERMINAL_TOTAL_DIFFICULTY: 40 -# By default, don't use these params -TERMINAL_BLOCK_HASH: 0x0000000000000000000000000000000000000000000000000000000000000000 -TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH: 18446744073709551615 - -# Genesis -# --------------------------------------------------------------- -# `2**14` (= 16,384) -MIN_GENESIS_ACTIVE_VALIDATOR_COUNT: 2 -# Mar-01-2021 08:53:32 AM +UTC -MIN_GENESIS_TIME: 1653318000 -# Prater area code (Vienna) -GENESIS_FORK_VERSION: 0x00000ffd -# Customized for Prater: 1919188 seconds (Mar-23-2021 02:00:00 PM +UTC) -GENESIS_DELAY: 0 - - -# Forking -# --------------------------------------------------------------- -# Some forks are disabled for now: -# - These may be re-assigned to another fork-version later -# - Temporarily set to max uint64 value: 2**64 - 1 - -# Altair -ALTAIR_FORK_VERSION: 0x01000ffd -ALTAIR_FORK_EPOCH: 1 -# Merge -BELLATRIX_FORK_VERSION: 0x02000ffd -BELLATRIX_FORK_EPOCH: 2 -# Sharding -EIP4844_FORK_VERSION: 0x83000ffd -EIP4844_FORK_EPOCH: 3 - -# TBD, 2**32 is a placeholder. Merge transition approach is in active R&D. -TRANSITION_TOTAL_DIFFICULTY: 40 - - -# Time parameters -# --------------------------------------------------------------- -# 12 seconds -SECONDS_PER_SLOT: 12 -# 14 (estimate from Eth1 mainnet) -SECONDS_PER_ETH1_BLOCK: 14 -# 2**8 (= 256) epochs ~27 hours -MIN_VALIDATOR_WITHDRAWABILITY_DELAY: 256 -# 2**8 (= 256) epochs ~27 hours -SHARD_COMMITTEE_PERIOD: 256 -# 2**11 (= 2,048) Eth1 blocks ~8 hours -ETH1_FOLLOW_DISTANCE: 15 - - -# Validator cycle -# --------------------------------------------------------------- -# 2**2 (= 4) -INACTIVITY_SCORE_BIAS: 4 -# 2**4 (= 16) -INACTIVITY_SCORE_RECOVERY_RATE: 16 -# 2**4 * 10**9 (= 16,000,000,000) Gwei -EJECTION_BALANCE: 16000000000 -# 2**2 (= 4) -MIN_PER_EPOCH_CHURN_LIMIT: 4 -# 2**16 (= 65,536) -CHURN_LIMIT_QUOTIENT: 65536 - - -# Fork choice -# --------------------------------------------------------------- -# 40% -PROPOSER_SCORE_BOOST: 40 - -# Deposit contract -# --------------------------------------------------------------- -# Ethereum Goerli testnet -DEPOSIT_CHAIN_ID: 1331 -DEPOSIT_NETWORK_ID: 69 -# Prater test deposit contract on Goerli Testnet -DEPOSIT_CONTRACT_ADDRESS: 0x8A04d14125D0FDCDc742F4A05C051De07232EDa4 diff --git a/common/eth2_network_config/built_in_network_configs/eip4844/deploy_block.txt b/common/eth2_network_config/built_in_network_configs/eip4844/deploy_block.txt deleted file mode 100644 index 573541ac9..000000000 --- a/common/eth2_network_config/built_in_network_configs/eip4844/deploy_block.txt +++ /dev/null @@ -1 +0,0 @@ -0 diff --git a/common/eth2_network_config/built_in_network_configs/eip4844/genesis.ssz.zip b/common/eth2_network_config/built_in_network_configs/eip4844/genesis.ssz.zip deleted file mode 100644 index 88b405071058d5163f5757e775c7cea3dd4b1183..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3546 zcmWIWW@Zs#-~dAQe7jHvC=g@OWZ-5{U`S8ROD)bU)+;Wq3Ju|9U_Wndo?P2!1IDEl z+zgB?FPIq^z{K0LnHgd%5(hqpFTYu{*W2;tls(gqI~Y&j)RWnMZi-TB+}Y%~8C{DE zqusJ9rW_9nG{0@5)qQH=K0jY+WBx@3;m=N}1U(CyK0A7s+0kTO>j@nTY6TVR>?f_Cfb@`kC4Vby-KgCKNu{b}Y31 z+}y$v|KA&fcZtNr2+ZDK|Mt|S>-*%keNA|KXs4*O{oCD}cIDn&X?>Ly=G{?x#D%~= z`>?C8L{_}GQTq9b{vvs;nIh&puRW{$YGuDk+uCGJUGs}vQSI*U^Jc|P5w%dH) zs>1IpzVSZ`6En{d{`xNbdD&Ipcb{(lICXaEaj(LY?;cw!n$8Cl7HVi z#y9il>sLp3&xf$xi;t+PiMX+K`TN|Txj|)@JB@>miL*|#7mNDy;Yf>YxbyR8^^>F| z<8AaRkDfiBt!^eM>~%tNkGg<)QrX^m?$G~-uUT$9_(7EU8r$}m{*L!I7nQ%;b<6#n zdg{}qXS0O=e)}%J$Ke03g&oh&O}Rh+|DRh+uVy-XF)eI+d;QDH;2R4qLhS6)o?UV6 z{Of0~bwgZQYF~!?sXc<)*)nyXZ#^vJUK|zg@%!1A&OFUZ_p~& Date: Tue, 21 Feb 2023 11:05:36 +1100 Subject: [PATCH 11/29] Suggestions for Capella `beacon_chain` (#3999) * Remove CapellaReadiness::NotSynced Some EEs have a habit of flipping between synced/not-synced, which causes some spurious "Not read for the merge" messages back before the merge. For the merge, if the EE wasn't synced the CE simple wouldn't go through the transition (due to optimistic sync stuff). However, we don't have that hard requirement for Capella; the CE will go through the fork and just wait for the EE to catch up. I think that removing `NotSynced` here will avoid false-positives on the "Not ready logs..". We'll be creating other WARN/ERRO logs if the EE isn't synced, anyway. * Change some Capella readiness logging There's two changes here: 1. Shorten the log messages, for readability. 2. Change the hints. Connecting a Capella-ready LH to a non-Capella-ready EE gives this log: ``` WARN Not ready for Capella info: The execution endpoint does not appear to support the required engine api methods for Capella: Required Methods Unsupported: engine_getPayloadV2 engine_forkchoiceUpdatedV2 engine_newPayloadV2, service: slot_notifier ``` This variant of error doesn't get a "try updating" style hint, when it's the one that needs it. This is because we detect the method-not-found reponse from the EE and return default capabilities, rather than indicating that the request fails. I think it's fair to say that an EE upgrade is required whenever it doesn't provide the required methods. I changed the `ExchangeCapabilitiesFailed` message since that can only happen when the EE fails to respond with anything other than success or not-found. --- .../beacon_chain/src/capella_readiness.rs | 17 ++--------------- beacon_node/client/src/notifier.rs | 3 ++- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/beacon_node/beacon_chain/src/capella_readiness.rs b/beacon_node/beacon_chain/src/capella_readiness.rs index b15632105..bb729d899 100644 --- a/beacon_node/beacon_chain/src/capella_readiness.rs +++ b/beacon_node/beacon_chain/src/capella_readiness.rs @@ -21,8 +21,6 @@ pub const ENGINE_CAPABILITIES_REFRESH_INTERVAL: u64 = 300; pub enum CapellaReadiness { /// The execution engine is capella-enabled (as far as we can tell) Ready, - /// The EL can be reached and has the correct configuration, however it's not yet synced. - NotSynced, /// We are connected to an execution engine which doesn't support the V2 engine api methods V2MethodsNotSupported { error: String }, /// The transition configuration with the EL failed, there might be a problem with @@ -44,11 +42,6 @@ impl fmt::Display for CapellaReadiness { execution endpoint: {}", error ), - CapellaReadiness::NotSynced => write!( - f, - "The execution endpoint is connected and configured, \ - however it is not yet synced" - ), CapellaReadiness::NoExecutionEndpoint => write!( f, "The --execution-endpoint flag is not specified, this is a \ @@ -56,8 +49,7 @@ impl fmt::Display for CapellaReadiness { ), CapellaReadiness::V2MethodsNotSupported { error } => write!( f, - "The execution endpoint does not appear to support \ - the required engine api methods for Capella: {}", + "Execution endpoint does not support Capella methods: {}", error ), } @@ -115,12 +107,7 @@ impl BeaconChain { } if all_good { - if !el.is_synced_for_notifier().await { - // The EL is not synced. - CapellaReadiness::NotSynced - } else { - CapellaReadiness::Ready - } + CapellaReadiness::Ready } else { CapellaReadiness::V2MethodsNotSupported { error: missing_methods, diff --git a/beacon_node/client/src/notifier.rs b/beacon_node/client/src/notifier.rs index c1d830bc0..fb8a9b634 100644 --- a/beacon_node/client/src/notifier.rs +++ b/beacon_node/client/src/notifier.rs @@ -466,13 +466,14 @@ async fn capella_readiness_logging( error!( log, "Not ready for Capella"; + "hint" => "the execution endpoint may be offline", "info" => %readiness, - "hint" => "try updating Lighthouse and/or the execution layer", ) } readiness => warn!( log, "Not ready for Capella"; + "hint" => "try updating the execution endpoint", "info" => %readiness, ), } From b72f273e47c04d14d0fdb32ca7f451312ca852c6 Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Tue, 21 Feb 2023 15:33:27 +1100 Subject: [PATCH 12/29] Capella consensus review (#4012) * Add extra encoding/decoding tests * Remove TODO The method LGTM * Remove `FreeAttestation` This is an ancient relic, I'm surprised it still existed! * Add paranoid check for eip4844 code This is not technically necessary, but I think it's nice to be explicit about EIP4844 consensus code for the time being. * Reduce big-O complexity of address change pruning I'm not sure this is *actually* useful, but it might come in handy if we see a ton of address changes at the fork boundary. I know the devops team have been testing with ~100k changes, so maybe this will help in that case. * Revert "Reduce big-O complexity of address change pruning" This reverts commit e7d93e6cc7cf1b92dd5a9e1966ce47d4078121eb. --- .../src/per_block_processing.rs | 6 +- consensus/types/src/beacon_block.rs | 98 ++++++++++++++++++- consensus/types/src/beacon_state.rs | 1 - consensus/types/src/free_attestation.rs | 13 --- consensus/types/src/lib.rs | 2 - 5 files changed, 99 insertions(+), 21 deletions(-) delete mode 100644 consensus/types/src/free_attestation.rs diff --git a/consensus/state_processing/src/per_block_processing.rs b/consensus/state_processing/src/per_block_processing.rs index e12fb5956..4f686200b 100644 --- a/consensus/state_processing/src/per_block_processing.rs +++ b/consensus/state_processing/src/per_block_processing.rs @@ -180,7 +180,11 @@ pub fn per_block_processing>( )?; } - process_blob_kzg_commitments(block.body())?; + // Eip4844 specifications are not yet released so additional care is taken + // to ensure the code does not run in production. + if matches!(block, BeaconBlockRef::Eip4844(_)) { + process_blob_kzg_commitments(block.body())?; + } Ok(()) } diff --git a/consensus/types/src/beacon_block.rs b/consensus/types/src/beacon_block.rs index f960b2117..60dd781a6 100644 --- a/consensus/types/src/beacon_block.rs +++ b/consensus/types/src/beacon_block.rs @@ -752,19 +752,65 @@ mod tests { }); } + #[test] + fn roundtrip_capella_block() { + let rng = &mut XorShiftRng::from_seed([42; 16]); + let spec = &ForkName::Capella.make_genesis_spec(MainnetEthSpec::default_spec()); + + let inner_block = BeaconBlockCapella { + slot: Slot::random_for_test(rng), + proposer_index: u64::random_for_test(rng), + parent_root: Hash256::random_for_test(rng), + state_root: Hash256::random_for_test(rng), + body: BeaconBlockBodyCapella::random_for_test(rng), + }; + let block = BeaconBlock::Capella(inner_block.clone()); + + test_ssz_tree_hash_pair_with(&block, &inner_block, |bytes| { + BeaconBlock::from_ssz_bytes(bytes, spec) + }); + } + + #[test] + fn roundtrip_4844_block() { + let rng = &mut XorShiftRng::from_seed([42; 16]); + let spec = &ForkName::Eip4844.make_genesis_spec(MainnetEthSpec::default_spec()); + + let inner_block = BeaconBlockEip4844 { + slot: Slot::random_for_test(rng), + proposer_index: u64::random_for_test(rng), + parent_root: Hash256::random_for_test(rng), + state_root: Hash256::random_for_test(rng), + body: BeaconBlockBodyEip4844::random_for_test(rng), + }; + let block = BeaconBlock::Eip4844(inner_block.clone()); + + test_ssz_tree_hash_pair_with(&block, &inner_block, |bytes| { + BeaconBlock::from_ssz_bytes(bytes, spec) + }); + } + #[test] fn decode_base_and_altair() { type E = MainnetEthSpec; - let spec = E::default_spec(); + let mut spec = E::default_spec(); let rng = &mut XorShiftRng::from_seed([42; 16]); - let fork_epoch = spec.altair_fork_epoch.unwrap(); + let altair_fork_epoch = spec.altair_fork_epoch.unwrap(); - let base_epoch = fork_epoch.saturating_sub(1_u64); + let base_epoch = altair_fork_epoch.saturating_sub(1_u64); let base_slot = base_epoch.end_slot(E::slots_per_epoch()); - let altair_epoch = fork_epoch; + let altair_epoch = altair_fork_epoch; let altair_slot = altair_epoch.start_slot(E::slots_per_epoch()); + let capella_epoch = altair_fork_epoch + 1; + let capella_slot = capella_epoch.start_slot(E::slots_per_epoch()); + let eip4844_epoch = capella_epoch + 1; + let eip4844_slot = eip4844_epoch.start_slot(E::slots_per_epoch()); + + spec.altair_fork_epoch = Some(altair_epoch); + spec.capella_fork_epoch = Some(capella_epoch); + spec.eip4844_fork_epoch = Some(eip4844_epoch); // BeaconBlockBase { @@ -809,5 +855,49 @@ mod tests { BeaconBlock::from_ssz_bytes(&bad_altair_block.as_ssz_bytes(), &spec) .expect_err("bad altair block cannot be decoded"); } + + // BeaconBlockCapella + { + let good_block = BeaconBlock::Capella(BeaconBlockCapella { + slot: capella_slot, + ..<_>::random_for_test(rng) + }); + // It's invalid to have an Capella block with a epoch lower than the fork epoch. + let bad_block = { + let mut bad = good_block.clone(); + *bad.slot_mut() = altair_slot; + bad + }; + + assert_eq!( + BeaconBlock::from_ssz_bytes(&good_block.as_ssz_bytes(), &spec) + .expect("good capella block can be decoded"), + good_block + ); + BeaconBlock::from_ssz_bytes(&bad_block.as_ssz_bytes(), &spec) + .expect_err("bad capella block cannot be decoded"); + } + + // BeaconBlockEip4844 + { + let good_block = BeaconBlock::Eip4844(BeaconBlockEip4844 { + slot: eip4844_slot, + ..<_>::random_for_test(rng) + }); + // It's invalid to have an Capella block with a epoch lower than the fork epoch. + let bad_block = { + let mut bad = good_block.clone(); + *bad.slot_mut() = capella_slot; + bad + }; + + assert_eq!( + BeaconBlock::from_ssz_bytes(&good_block.as_ssz_bytes(), &spec) + .expect("good eip4844 block can be decoded"), + good_block + ); + BeaconBlock::from_ssz_bytes(&bad_block.as_ssz_bytes(), &spec) + .expect_err("bad eip4844 block cannot be decoded"); + } } } diff --git a/consensus/types/src/beacon_state.rs b/consensus/types/src/beacon_state.rs index e70b88427..c98df48d1 100644 --- a/consensus/types/src/beacon_state.rs +++ b/consensus/types/src/beacon_state.rs @@ -710,7 +710,6 @@ impl BeaconState { .ok_or(Error::ShuffleIndexOutOfBounds(index)) } - // TODO: check this implementation /// Convenience accessor for the `execution_payload_header` as an `ExecutionPayloadHeaderRef`. pub fn latest_execution_payload_header(&self) -> Result, Error> { match self { diff --git a/consensus/types/src/free_attestation.rs b/consensus/types/src/free_attestation.rs deleted file mode 100644 index dd3782d3c..000000000 --- a/consensus/types/src/free_attestation.rs +++ /dev/null @@ -1,13 +0,0 @@ -/// Note: this object does not actually exist in the spec. -/// -/// We use it for managing attestations that have not been aggregated. -use super::{AttestationData, Signature}; -use serde_derive::Serialize; - -#[derive(arbitrary::Arbitrary, Debug, Clone, PartialEq, Serialize)] -pub struct FreeAttestation { - pub data: AttestationData, - pub signature: Signature, - #[serde(with = "eth2_serde_utils::quoted_u64")] - pub validator_index: u64, -} diff --git a/consensus/types/src/lib.rs b/consensus/types/src/lib.rs index 8d9156ff5..2926a434b 100644 --- a/consensus/types/src/lib.rs +++ b/consensus/types/src/lib.rs @@ -47,7 +47,6 @@ pub mod fork; pub mod fork_data; pub mod fork_name; pub mod fork_versioned_response; -pub mod free_attestation; pub mod graffiti; pub mod historical_batch; pub mod historical_summary; @@ -154,7 +153,6 @@ pub use crate::fork_name::{ForkName, InconsistentFork}; pub use crate::fork_versioned_response::{ ExecutionOptimisticForkVersionedResponse, ForkVersionDeserialize, ForkVersionedResponse, }; -pub use crate::free_attestation::FreeAttestation; pub use crate::graffiti::{Graffiti, GRAFFITI_BYTES_LEN}; pub use crate::historical_batch::HistoricalBatch; pub use crate::indexed_attestation::IndexedAttestation; From 729c178020a6d4921c7f0cea8802a953f58f9d2e Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Tue, 21 Feb 2023 17:18:28 +1100 Subject: [PATCH 13/29] Revert Sepolia genesis change (#4013) --- .../sepolia/genesis.ssz.zip | Bin 273912 -> 136489 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/common/eth2_network_config/built_in_network_configs/sepolia/genesis.ssz.zip b/common/eth2_network_config/built_in_network_configs/sepolia/genesis.ssz.zip index 64aa1a5be9f701031b05e53e9c8533720e00439f..1321634cea6faa40295d0ead46ee9a0479e6b529 100644 GIT binary patch delta 88 zcmexyTVUlX4$%N_W)=|!4j^P%doF|l0vbhIMH#n>GEEl|XXp6qeNiw`go$CZgbqW1 fHzSh>Gf@3>R$Z1L5mq*kdPX3O1k$^JiWnFGRDutU delta 132634 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 Date: Tue, 21 Feb 2023 18:03:10 +1100 Subject: [PATCH 14/29] Allow for withdrawals in max block size (#4011) * Allow for withdrawals in max block size * Ensure payload size is counted --- .../lighthouse_network/src/rpc/protocol.rs | 16 +++++-- consensus/types/src/beacon_block.rs | 46 +++++++++++++++++++ 2 files changed, 58 insertions(+), 4 deletions(-) diff --git a/beacon_node/lighthouse_network/src/rpc/protocol.rs b/beacon_node/lighthouse_network/src/rpc/protocol.rs index 529713207..b6651021d 100644 --- a/beacon_node/lighthouse_network/src/rpc/protocol.rs +++ b/beacon_node/lighthouse_network/src/rpc/protocol.rs @@ -22,8 +22,9 @@ use tokio_util::{ }; use types::BlobsSidecar; use types::{ - BeaconBlock, BeaconBlockAltair, BeaconBlockBase, BeaconBlockMerge, Blob, EmptyBlock, EthSpec, - ForkContext, ForkName, Hash256, MainnetEthSpec, Signature, SignedBeaconBlock, + BeaconBlock, BeaconBlockAltair, BeaconBlockBase, BeaconBlockCapella, BeaconBlockMerge, Blob, + EmptyBlock, EthSpec, ForkContext, ForkName, Hash256, MainnetEthSpec, Signature, + SignedBeaconBlock, }; lazy_static! { @@ -62,6 +63,13 @@ lazy_static! { .as_ssz_bytes() .len(); + pub static ref SIGNED_BEACON_BLOCK_CAPELLA_MAX_WITHOUT_PAYLOAD: usize = SignedBeaconBlock::::from_block( + BeaconBlock::Capella(BeaconBlockCapella::full(&MainnetEthSpec::default_spec())), + Signature::empty(), + ) + .as_ssz_bytes() + .len(); + /// The `BeaconBlockMerge` block has an `ExecutionPayload` field which has a max size ~16 GiB for future proofing. /// We calculate the value from its fields instead of constructing the block and checking the length. /// Note: This is only the theoretical upper bound. We further bound the max size we receive over the network @@ -72,11 +80,11 @@ lazy_static! { + types::ExecutionPayload::::max_execution_payload_merge_size() // adding max size of execution payload (~16gb) + ssz::BYTES_PER_LENGTH_OFFSET; // Adding the additional ssz offset for the `ExecutionPayload` field - pub static ref SIGNED_BEACON_BLOCK_CAPELLA_MAX: usize = *SIGNED_BEACON_BLOCK_ALTAIR_MAX + pub static ref SIGNED_BEACON_BLOCK_CAPELLA_MAX: usize = *SIGNED_BEACON_BLOCK_CAPELLA_MAX_WITHOUT_PAYLOAD + types::ExecutionPayload::::max_execution_payload_capella_size() // adding max size of execution payload (~16gb) + ssz::BYTES_PER_LENGTH_OFFSET; // Adding the additional ssz offset for the `ExecutionPayload` field - pub static ref SIGNED_BEACON_BLOCK_EIP4844_MAX: usize = *SIGNED_BEACON_BLOCK_ALTAIR_MAX + pub static ref SIGNED_BEACON_BLOCK_EIP4844_MAX: usize = *SIGNED_BEACON_BLOCK_CAPELLA_MAX_WITHOUT_PAYLOAD + types::ExecutionPayload::::max_execution_payload_eip4844_size() // adding max size of execution payload (~16gb) + ssz::BYTES_PER_LENGTH_OFFSET // Adding the additional offsets for the `ExecutionPayload` + (::ssz_fixed_len() * ::max_blobs_per_block()) diff --git a/consensus/types/src/beacon_block.rs b/consensus/types/src/beacon_block.rs index 60dd781a6..0f26cd0e5 100644 --- a/consensus/types/src/beacon_block.rs +++ b/consensus/types/src/beacon_block.rs @@ -485,6 +485,52 @@ impl> EmptyBlock for BeaconBlockMerg } } +impl> BeaconBlockCapella { + /// Return a Capella block where the block has maximum size. + pub fn full(spec: &ChainSpec) -> Self { + let base_block: BeaconBlockBase<_, Payload> = BeaconBlockBase::full(spec); + let bls_to_execution_changes = vec![ + SignedBlsToExecutionChange { + message: BlsToExecutionChange { + validator_index: 0, + from_bls_pubkey: PublicKeyBytes::empty(), + to_execution_address: Address::zero(), + }, + signature: Signature::empty() + }; + T::max_bls_to_execution_changes() + ] + .into(); + let sync_aggregate = SyncAggregate { + sync_committee_signature: AggregateSignature::empty(), + sync_committee_bits: BitVector::default(), + }; + BeaconBlockCapella { + slot: spec.genesis_slot, + proposer_index: 0, + parent_root: Hash256::zero(), + state_root: Hash256::zero(), + body: BeaconBlockBodyCapella { + proposer_slashings: base_block.body.proposer_slashings, + attester_slashings: base_block.body.attester_slashings, + attestations: base_block.body.attestations, + deposits: base_block.body.deposits, + voluntary_exits: base_block.body.voluntary_exits, + bls_to_execution_changes, + sync_aggregate, + randao_reveal: Signature::empty(), + eth1_data: Eth1Data { + deposit_root: Hash256::zero(), + block_hash: Hash256::zero(), + deposit_count: 0, + }, + graffiti: Graffiti::default(), + execution_payload: Payload::Capella::default(), + }, + } + } +} + impl> EmptyBlock for BeaconBlockCapella { /// Returns an empty Capella block to be used during genesis. fn empty(spec: &ChainSpec) -> Self { From 1bce7a02c8f85b712f41ad7cf563d53407450976 Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Tue, 21 Feb 2023 18:03:24 +1100 Subject: [PATCH 15/29] Fix post-Bellatrix checkpoint sync (#4014) * Recognise execution in post-merge blocks * Remove `.body()` * Fix typo * Use `is_default_with_empty_roots`. --- consensus/fork_choice/src/fork_choice.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/consensus/fork_choice/src/fork_choice.rs b/consensus/fork_choice/src/fork_choice.rs index 9ca9ef0ce..85e43945c 100644 --- a/consensus/fork_choice/src/fork_choice.rs +++ b/consensus/fork_choice/src/fork_choice.rs @@ -413,18 +413,18 @@ where AttestationShufflingId::new(anchor_block_root, anchor_state, RelativeEpoch::Next) .map_err(Error::BeaconStateError)?; - // Default any non-merge execution block hashes to 0x000..000. - let execution_status = anchor_block.message_merge().map_or_else( - |()| ExecutionStatus::irrelevant(), - |message| { - let execution_payload = &message.body.execution_payload; - if execution_payload == &<_>::default() { + let execution_status = anchor_block.message().execution_payload().map_or_else( + // If the block doesn't have an execution payload then it can't have + // execution enabled. + |_| ExecutionStatus::irrelevant(), + |execution_payload| { + if execution_payload.is_default_with_empty_roots() { // A default payload does not have execution enabled. ExecutionStatus::irrelevant() } else { // Assume that this payload is valid, since the anchor should be a trusted block and // state. - ExecutionStatus::Valid(message.body.execution_payload.block_hash()) + ExecutionStatus::Valid(execution_payload.block_hash()) } }, ); From 40669da486ff070449b703d696c965e05c2860f1 Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Tue, 21 Feb 2023 18:03:42 +1100 Subject: [PATCH 16/29] Modify some Capella comments (#4015) * Modify comment to only include 4844 Capella only modifies per epoch processing by adding `process_historical_summaries_update`, which does not change the realization of justification or finality. Whilst 4844 does not currently modify realization, the spec is not yet final enough to say that it never will. * Clarify address change verification comment The verification of the address change doesn't really have anything to do with the current epoch. I think this was just a copy-paste from a function like `verify_exit`. --- consensus/fork_choice/src/fork_choice.rs | 4 ++-- .../per_block_processing/verify_bls_to_execution_change.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/consensus/fork_choice/src/fork_choice.rs b/consensus/fork_choice/src/fork_choice.rs index 85e43945c..590e151a8 100644 --- a/consensus/fork_choice/src/fork_choice.rs +++ b/consensus/fork_choice/src/fork_choice.rs @@ -857,8 +857,8 @@ where (parent_justified, parent_finalized) } else { let justification_and_finalization_state = match block { - // FIXME: verify this is correct for Capella/Eip4844 because - // epoch processing changes in Capella.. + // TODO(eip4844): Ensure that the final specification + // does not substantially modify per epoch processing. BeaconBlockRef::Eip4844(_) | BeaconBlockRef::Capella(_) | BeaconBlockRef::Merge(_) diff --git a/consensus/state_processing/src/per_block_processing/verify_bls_to_execution_change.rs b/consensus/state_processing/src/per_block_processing/verify_bls_to_execution_change.rs index 15a856c40..bb2679925 100644 --- a/consensus/state_processing/src/per_block_processing/verify_bls_to_execution_change.rs +++ b/consensus/state_processing/src/per_block_processing/verify_bls_to_execution_change.rs @@ -10,8 +10,8 @@ fn error(reason: Invalid) -> BlockOperationError { BlockOperationError::invalid(reason) } -/// Indicates if a `BlsToExecutionChange` is valid to be included in a block in the current epoch of the given -/// state. +/// Indicates if a `BlsToExecutionChange` is valid to be included in a block, +/// where the block is being applied to the given `state`. /// /// Returns `Ok(())` if the `SignedBlsToExecutionChange` is valid, otherwise indicates the reason for invalidity. pub fn verify_bls_to_execution_change( From 3642efe76ac4cd480d2822a10fb8f089b1771f45 Mon Sep 17 00:00:00 2001 From: Mac L Date: Tue, 21 Feb 2023 20:54:55 +0000 Subject: [PATCH 17/29] Cache validator balances and allow them to be served over the HTTP API (#3863) ## Issue Addressed #3804 ## Proposed Changes - Add `total_balance` to the validator monitor and adjust the number of historical epochs which are cached. - Allow certain values in the cache to be served out via the HTTP API without requiring a state read. ## Usage ``` curl -X POST "http://localhost:5052/lighthouse/ui/validator_info" -d '{"indices": [0]}' -H "Content-Type: application/json" | jq ``` ``` { "data": { "validators": { "0": { "info": [ { "epoch": 172981, "total_balance": 36566388519 }, ... { "epoch": 172990, "total_balance": 36566496513 } ] }, "1": { "info": [ { "epoch": 172981, "total_balance": 36355797968 }, ... { "epoch": 172990, "total_balance": 36355905962 } ] } } } } ``` ## Additional Info This requires no historical states to operate which mean it will still function on the freshly checkpoint synced node, however because of this, the values will populate each epoch (up to a maximum of 10 entries). Another benefit of this method, is that we can easily cache any other values which would normally require a state read and serve them via the same endpoint. However, we would need be cautious about not overly increasing block processing time by caching values from complex computations. This also caches some of the validator metrics directly, rather than pulling them from the Prometheus metrics when the API is called. This means when the validator count exceeds the individual monitor threshold, the cached values will still be available. Co-authored-by: Paul Hauner --- Cargo.lock | 1 + .../beacon_chain/src/validator_monitor.rs | 106 +++++++++- beacon_node/http_api/Cargo.toml | 1 + beacon_node/http_api/src/lib.rs | 17 ++ beacon_node/http_api/src/ui.rs | 194 ++++++++++++------ 5 files changed, 247 insertions(+), 72 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5d5d32157..12b70f58e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3209,6 +3209,7 @@ dependencies = [ "environment", "eth1", "eth2", + "eth2_serde_utils", "eth2_ssz", "execution_layer", "futures", diff --git a/beacon_node/beacon_chain/src/validator_monitor.rs b/beacon_node/beacon_chain/src/validator_monitor.rs index dad5e1517..de2681012 100644 --- a/beacon_node/beacon_chain/src/validator_monitor.rs +++ b/beacon_node/beacon_chain/src/validator_monitor.rs @@ -29,7 +29,7 @@ const TOTAL_LABEL: &str = "total"; /// The validator monitor collects per-epoch data about each monitored validator. Historical data /// will be kept around for `HISTORIC_EPOCHS` before it is pruned. -pub const HISTORIC_EPOCHS: usize = 4; +pub const HISTORIC_EPOCHS: usize = 10; /// Once the validator monitor reaches this number of validators it will stop /// tracking their metrics/logging individually in an effort to reduce @@ -45,7 +45,7 @@ pub enum Error { /// Contains data pertaining to one validator for one epoch. #[derive(Default)] -struct EpochSummary { +pub struct EpochSummary { /* * Attestations with a target in the current epoch. */ @@ -103,6 +103,12 @@ struct EpochSummary { pub proposer_slashings: usize, /// The number of attester slashings observed. pub attester_slashings: usize, + + /* + * Other validator info helpful for the UI. + */ + /// The total balance of the validator. + pub total_balance: Option, } impl EpochSummary { @@ -176,18 +182,60 @@ impl EpochSummary { pub fn register_attester_slashing(&mut self) { self.attester_slashings += 1; } + + pub fn register_validator_total_balance(&mut self, total_balance: u64) { + self.total_balance = Some(total_balance) + } } type SummaryMap = HashMap; +#[derive(Default)] +pub struct ValidatorMetrics { + pub attestation_hits: u64, + pub attestation_misses: u64, + pub attestation_head_hits: u64, + pub attestation_head_misses: u64, + pub attestation_target_hits: u64, + pub attestation_target_misses: u64, +} + +impl ValidatorMetrics { + pub fn increment_hits(&mut self) { + self.attestation_hits += 1; + } + + pub fn increment_misses(&mut self) { + self.attestation_misses += 1; + } + + pub fn increment_target_hits(&mut self) { + self.attestation_target_hits += 1; + } + + pub fn increment_target_misses(&mut self) { + self.attestation_target_misses += 1; + } + + pub fn increment_head_hits(&mut self) { + self.attestation_head_hits += 1; + } + + pub fn increment_head_misses(&mut self) { + self.attestation_head_misses += 1; + } +} + /// A validator that is being monitored by the `ValidatorMonitor`. -struct MonitoredValidator { +pub struct MonitoredValidator { /// A human-readable identifier for the validator. pub id: String, /// The validator index in the state. pub index: Option, /// A history of the validator over time. pub summaries: RwLock, + /// Validator metrics to be exposed over the HTTP API. + pub metrics: RwLock, } impl MonitoredValidator { @@ -198,6 +246,7 @@ impl MonitoredValidator { .unwrap_or_else(|| pubkey.to_string()), index, summaries: <_>::default(), + metrics: <_>::default(), } } @@ -252,6 +301,20 @@ impl MonitoredValidator { fn touch_epoch_summary(&self, epoch: Epoch) { self.with_epoch_summary(epoch, |_| {}); } + + fn get_from_epoch_summary(&self, epoch: Epoch, func: F) -> Option + where + F: Fn(Option<&EpochSummary>) -> Option, + { + let summaries = self.summaries.read(); + func(summaries.get(&epoch)) + } + + pub fn get_total_balance(&self, epoch: Epoch) -> Option { + self.get_from_epoch_summary(epoch, |summary_opt| { + summary_opt.and_then(|summary| summary.total_balance) + }) + } } /// Holds a collection of `MonitoredValidator` and is notified about a variety of events on the P2P @@ -347,12 +410,20 @@ impl ValidatorMonitor { if let Some(i) = monitored_validator.index { monitored_validator.touch_epoch_summary(current_epoch); + let i = i as usize; + + // Cache relevant validator info. + if let Some(balance) = state.balances().get(i) { + monitored_validator.with_epoch_summary(current_epoch, |summary| { + summary.register_validator_total_balance(*balance) + }); + } + // Only log the per-validator metrics if it's enabled. if !self.individual_tracking() { continue; } - let i = i as usize; let id = &monitored_validator.id; if let Some(balance) = state.balances().get(i) { @@ -479,6 +550,25 @@ impl ValidatorMonitor { continue; } + // Store some metrics directly to be re-exposed on the HTTP API. + let mut validator_metrics = monitored_validator.metrics.write(); + if previous_epoch_matched_any { + validator_metrics.increment_hits(); + if previous_epoch_matched_target { + validator_metrics.increment_target_hits() + } else { + validator_metrics.increment_target_misses() + } + if previous_epoch_matched_head { + validator_metrics.increment_head_hits() + } else { + validator_metrics.increment_head_misses() + } + } else { + validator_metrics.increment_misses() + } + drop(validator_metrics); + // Indicates if any attestation made it on-chain. // // For Base states, this will be *any* attestation whatsoever. For Altair states, @@ -717,6 +807,14 @@ impl ValidatorMonitor { self.validators.values().map(|val| val.id.clone()).collect() } + pub fn get_monitored_validator(&self, index: u64) -> Option<&MonitoredValidator> { + if let Some(pubkey) = self.indices.get(&index) { + self.validators.get(pubkey) + } else { + None + } + } + /// If `self.auto_register == true`, add the `validator_index` to `self.monitored_validators`. /// Otherwise, do nothing. pub fn auto_register_local_validator(&mut self, validator_index: u64) { diff --git a/beacon_node/http_api/Cargo.toml b/beacon_node/http_api/Cargo.toml index 077e3aa7c..d7a3a680b 100644 --- a/beacon_node/http_api/Cargo.toml +++ b/beacon_node/http_api/Cargo.toml @@ -36,6 +36,7 @@ tree_hash = "0.4.1" sysinfo = "0.26.5" system_health = { path = "../../common/system_health" } directory = { path = "../../common/directory" } +eth2_serde_utils = "0.1.1" [dev-dependencies] store = { path = "../store" } diff --git a/beacon_node/http_api/src/lib.rs b/beacon_node/http_api/src/lib.rs index 60e5d2adf..009775701 100644 --- a/beacon_node/http_api/src/lib.rs +++ b/beacon_node/http_api/src/lib.rs @@ -3025,6 +3025,22 @@ pub fn serve( }, ); + // POST lighthouse/ui/validator_info + let post_lighthouse_ui_validator_info = warp::path("lighthouse") + .and(warp::path("ui")) + .and(warp::path("validator_info")) + .and(warp::path::end()) + .and(warp::body::json()) + .and(chain_filter.clone()) + .and_then( + |request_data: ui::ValidatorInfoRequestData, chain: Arc>| { + blocking_json_task(move || { + ui::get_validator_info(request_data, chain) + .map(api_types::GenericResponse::from) + }) + }, + ); + // GET lighthouse/syncing let get_lighthouse_syncing = warp::path("lighthouse") .and(warp::path("syncing")) @@ -3522,6 +3538,7 @@ pub fn serve( .or(post_lighthouse_database_historical_blocks.boxed()) .or(post_lighthouse_block_rewards.boxed()) .or(post_lighthouse_ui_validator_metrics.boxed()) + .or(post_lighthouse_ui_validator_info.boxed()) .recover(warp_utils::reject::handle_rejection), )) .recover(warp_utils::reject::handle_rejection) diff --git a/beacon_node/http_api/src/ui.rs b/beacon_node/http_api/src/ui.rs index a5b3a8b2f..e8280a796 100644 --- a/beacon_node/http_api/src/ui.rs +++ b/beacon_node/http_api/src/ui.rs @@ -1,5 +1,7 @@ -use beacon_chain::{metrics, BeaconChain, BeaconChainError, BeaconChainTypes}; -use eth2::types::ValidatorStatus; +use beacon_chain::{ + validator_monitor::HISTORIC_EPOCHS, BeaconChain, BeaconChainError, BeaconChainTypes, +}; +use eth2::types::{Epoch, ValidatorStatus}; use serde::{Deserialize, Serialize}; use std::collections::{HashMap, HashSet}; use std::sync::Arc; @@ -71,6 +73,82 @@ pub fn get_validator_count( }) } +#[derive(PartialEq, Serialize, Deserialize)] +pub struct ValidatorInfoRequestData { + #[serde(with = "eth2_serde_utils::quoted_u64_vec")] + indices: Vec, +} + +#[derive(PartialEq, Serialize, Deserialize)] +pub struct ValidatorInfoValues { + #[serde(with = "eth2_serde_utils::quoted_u64")] + epoch: u64, + #[serde(with = "eth2_serde_utils::quoted_u64")] + total_balance: u64, +} + +#[derive(PartialEq, Serialize, Deserialize)] +pub struct ValidatorInfo { + info: Vec, +} + +#[derive(PartialEq, Serialize, Deserialize)] +pub struct ValidatorInfoResponse { + validators: HashMap, +} + +pub fn get_validator_info( + request_data: ValidatorInfoRequestData, + chain: Arc>, +) -> Result { + let current_epoch = chain.epoch().map_err(beacon_chain_error)?; + + let epochs = current_epoch.saturating_sub(HISTORIC_EPOCHS).as_u64()..=current_epoch.as_u64(); + + let validator_ids = chain + .validator_monitor + .read() + .get_all_monitored_validators() + .iter() + .cloned() + .collect::>(); + + let indices = request_data + .indices + .iter() + .map(|index| index.to_string()) + .collect::>(); + + let ids = validator_ids + .intersection(&indices) + .collect::>(); + + let mut validators = HashMap::new(); + + for id in ids { + if let Ok(index) = id.parse::() { + if let Some(validator) = chain + .validator_monitor + .read() + .get_monitored_validator(index) + { + let mut info = vec![]; + for epoch in epochs.clone() { + if let Some(total_balance) = validator.get_total_balance(Epoch::new(epoch)) { + info.push(ValidatorInfoValues { + epoch, + total_balance, + }); + } + } + validators.insert(id.clone(), ValidatorInfo { info }); + } + } + } + + Ok(ValidatorInfoResponse { validators }) +} + #[derive(PartialEq, Serialize, Deserialize)] pub struct ValidatorMetricsRequestData { indices: Vec, @@ -119,76 +197,56 @@ pub fn post_validator_monitor_metrics( let mut validators = HashMap::new(); for id in ids { - let attestation_hits = metrics::get_int_counter( - &metrics::VALIDATOR_MONITOR_PREV_EPOCH_ON_CHAIN_ATTESTER_HIT, - &[id], - ) - .map(|counter| counter.get()) - .unwrap_or(0); - let attestation_misses = metrics::get_int_counter( - &metrics::VALIDATOR_MONITOR_PREV_EPOCH_ON_CHAIN_ATTESTER_MISS, - &[id], - ) - .map(|counter| counter.get()) - .unwrap_or(0); - let attestations = attestation_hits + attestation_misses; - let attestation_hit_percentage: f64 = if attestations == 0 { - 0.0 - } else { - (100 * attestation_hits / attestations) as f64 - }; + if let Ok(index) = id.parse::() { + if let Some(validator) = chain + .validator_monitor + .read() + .get_monitored_validator(index) + { + let val_metrics = validator.metrics.read(); + let attestation_hits = val_metrics.attestation_hits; + let attestation_misses = val_metrics.attestation_misses; + let attestation_head_hits = val_metrics.attestation_head_hits; + let attestation_head_misses = val_metrics.attestation_head_misses; + let attestation_target_hits = val_metrics.attestation_target_hits; + let attestation_target_misses = val_metrics.attestation_target_misses; + drop(val_metrics); - let attestation_head_hits = metrics::get_int_counter( - &metrics::VALIDATOR_MONITOR_PREV_EPOCH_ON_CHAIN_HEAD_ATTESTER_HIT, - &[id], - ) - .map(|counter| counter.get()) - .unwrap_or(0); - let attestation_head_misses = metrics::get_int_counter( - &metrics::VALIDATOR_MONITOR_PREV_EPOCH_ON_CHAIN_HEAD_ATTESTER_MISS, - &[id], - ) - .map(|counter| counter.get()) - .unwrap_or(0); - let head_attestations = attestation_head_hits + attestation_head_misses; - let attestation_head_hit_percentage: f64 = if head_attestations == 0 { - 0.0 - } else { - (100 * attestation_head_hits / head_attestations) as f64 - }; + let attestations = attestation_hits + attestation_misses; + let attestation_hit_percentage: f64 = if attestations == 0 { + 0.0 + } else { + (100 * attestation_hits / attestations) as f64 + }; + let head_attestations = attestation_head_hits + attestation_head_misses; + let attestation_head_hit_percentage: f64 = if head_attestations == 0 { + 0.0 + } else { + (100 * attestation_head_hits / head_attestations) as f64 + }; - let attestation_target_hits = metrics::get_int_counter( - &metrics::VALIDATOR_MONITOR_PREV_EPOCH_ON_CHAIN_TARGET_ATTESTER_HIT, - &[id], - ) - .map(|counter| counter.get()) - .unwrap_or(0); - let attestation_target_misses = metrics::get_int_counter( - &metrics::VALIDATOR_MONITOR_PREV_EPOCH_ON_CHAIN_TARGET_ATTESTER_MISS, - &[id], - ) - .map(|counter| counter.get()) - .unwrap_or(0); - let target_attestations = attestation_target_hits + attestation_target_misses; - let attestation_target_hit_percentage: f64 = if target_attestations == 0 { - 0.0 - } else { - (100 * attestation_target_hits / target_attestations) as f64 - }; + let target_attestations = attestation_target_hits + attestation_target_misses; + let attestation_target_hit_percentage: f64 = if target_attestations == 0 { + 0.0 + } else { + (100 * attestation_target_hits / target_attestations) as f64 + }; - let metrics = ValidatorMetrics { - attestation_hits, - attestation_misses, - attestation_hit_percentage, - attestation_head_hits, - attestation_head_misses, - attestation_head_hit_percentage, - attestation_target_hits, - attestation_target_misses, - attestation_target_hit_percentage, - }; + let metrics = ValidatorMetrics { + attestation_hits, + attestation_misses, + attestation_hit_percentage, + attestation_head_hits, + attestation_head_misses, + attestation_head_hit_percentage, + attestation_target_hits, + attestation_target_misses, + attestation_target_hit_percentage, + }; - validators.insert(id.clone(), metrics); + validators.insert(id.clone(), metrics); + } + } } Ok(ValidatorMetricsResponse { validators }) From b7d7addd4ae7c43ebd32604b0956de68de6d175f Mon Sep 17 00:00:00 2001 From: Michael Sproul Date: Tue, 21 Feb 2023 20:54:57 +0000 Subject: [PATCH 18/29] Disable debug info on CI (#4018) ## Issue Addressed Closes #4005 Alternative to #4017 ## Proposed Changes Disable debug info on CI to save RAM and disk space. --- .github/workflows/test-suite.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-suite.yml b/.github/workflows/test-suite.yml index 5ecd5efe3..445f71fa0 100644 --- a/.github/workflows/test-suite.yml +++ b/.github/workflows/test-suite.yml @@ -10,7 +10,8 @@ on: pull_request: env: # Deny warnings in CI - RUSTFLAGS: "-D warnings" + # Disable debug info (see https://github.com/sigp/lighthouse/issues/4005) + RUSTFLAGS: "-D warnings -C debuginfo=0" # The Nightly version used for cargo-udeps, might need updating from time to time. PINNED_NIGHTLY: nightly-2022-12-15 # Prevent Github API rate limiting. From bb5285ac6d696ff4c48b6a2cb800d739cfc5cd4f Mon Sep 17 00:00:00 2001 From: Pawan Dhananjay Date: Wed, 22 Feb 2023 04:15:38 +0530 Subject: [PATCH 19/29] Remove BeaconBlockAndBlobsSidecar from core topics (#4016) --- beacon_node/lighthouse_network/src/types/topics.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/beacon_node/lighthouse_network/src/types/topics.rs b/beacon_node/lighthouse_network/src/types/topics.rs index ab7fb722b..b83b03d6b 100644 --- a/beacon_node/lighthouse_network/src/types/topics.rs +++ b/beacon_node/lighthouse_network/src/types/topics.rs @@ -23,9 +23,8 @@ pub const BLS_TO_EXECUTION_CHANGE_TOPIC: &str = "bls_to_execution_change"; pub const LIGHT_CLIENT_FINALITY_UPDATE: &str = "light_client_finality_update"; pub const LIGHT_CLIENT_OPTIMISTIC_UPDATE: &str = "light_client_optimistic_update"; -pub const CORE_TOPICS: [GossipKind; 8] = [ +pub const CORE_TOPICS: [GossipKind; 7] = [ GossipKind::BeaconBlock, - GossipKind::BeaconBlocksAndBlobsSidecar, GossipKind::BeaconAggregateAndProof, GossipKind::VoluntaryExit, GossipKind::ProposerSlashing, From 9c81be8ac43f47e797acd35438a493749c9d9567 Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Wed, 22 Feb 2023 09:46:45 +1100 Subject: [PATCH 20/29] Fix metric (#4020) --- beacon_node/network/src/beacon_processor/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/beacon_node/network/src/beacon_processor/mod.rs b/beacon_node/network/src/beacon_processor/mod.rs index f9de53731..018e6f7e3 100644 --- a/beacon_node/network/src/beacon_processor/mod.rs +++ b/beacon_node/network/src/beacon_processor/mod.rs @@ -1517,7 +1517,7 @@ impl BeaconProcessor { gossip_block_queue.len() as i64, ); metrics::set_gauge( - &metrics::BEACON_PROCESSOR_RPC_BLOB_QUEUE_TOTAL, + &metrics::BEACON_PROCESSOR_RPC_BLOCK_QUEUE_TOTAL, rpc_block_queue.len() as i64, ); metrics::set_gauge( From 3721f3a83c5d8544e6d812ac1196594cddb780f5 Mon Sep 17 00:00:00 2001 From: Pawan Dhananjay Date: Tue, 21 Feb 2023 23:45:43 +0000 Subject: [PATCH 21/29] Fix doppelganger script (#3988) ## Issue Addressed N/A ## Proposed Changes The doppelganger tests were failing silently since the `PROPOSER_BOOST` config was not set. Sets the config and script returns an error if any subprocess fails. --- scripts/local_testnet/vars.env | 2 +- scripts/tests/doppelganger_protection.sh | 39 ++++++++++++++++-------- scripts/tests/vars.env | 3 ++ 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/scripts/local_testnet/vars.env b/scripts/local_testnet/vars.env index 2506e9e1c..1ade17328 100644 --- a/scripts/local_testnet/vars.env +++ b/scripts/local_testnet/vars.env @@ -45,7 +45,7 @@ SECONDS_PER_SLOT=3 SECONDS_PER_ETH1_BLOCK=1 # Proposer score boost percentage -PROPOSER_SCORE_BOOST=70 +PROPOSER_SCORE_BOOST=40 # Command line arguments for validator client VC_ARGS="" diff --git a/scripts/tests/doppelganger_protection.sh b/scripts/tests/doppelganger_protection.sh index b0f9ce826..95dfff569 100755 --- a/scripts/tests/doppelganger_protection.sh +++ b/scripts/tests/doppelganger_protection.sh @@ -2,6 +2,7 @@ # Requires `lighthouse`, ``lcli`, `ganache`, `curl`, `jq` + BEHAVIOR=$1 if [[ "$BEHAVIOR" != "success" ]] && [[ "$BEHAVIOR" != "failure" ]]; then @@ -9,13 +10,22 @@ if [[ "$BEHAVIOR" != "success" ]] && [[ "$BEHAVIOR" != "failure" ]]; then exit 1 fi +exit_if_fails() { + echo $@ + $@ + EXIT_CODE=$? + if [[ $EXIT_CODE -eq 1 ]]; then + exit 111 + fi +} + source ./vars.env -../local_testnet/clean.sh +exit_if_fails ../local_testnet/clean.sh echo "Starting ganache" -../local_testnet/ganache_test_node.sh &> /dev/null & +exit_if_fails ../local_testnet/ganache_test_node.sh &> /dev/null & GANACHE_PID=$! # Wait for ganache to start @@ -23,14 +33,14 @@ sleep 5 echo "Setting up local testnet" -../local_testnet/setup.sh +exit_if_fails ../local_testnet/setup.sh # Duplicate this directory so slashing protection doesn't keep us from re-using validator keys -cp -R $HOME/.lighthouse/local-testnet/node_1 $HOME/.lighthouse/local-testnet/node_1_doppelganger +exit_if_fails cp -R $HOME/.lighthouse/local-testnet/node_1 $HOME/.lighthouse/local-testnet/node_1_doppelganger echo "Starting bootnode" -../local_testnet/bootnode.sh &> /dev/null & +exit_if_fails ../local_testnet/bootnode.sh &> /dev/null & BOOT_PID=$! # wait for the bootnode to start @@ -38,20 +48,20 @@ sleep 10 echo "Starting local beacon nodes" -../local_testnet/beacon_node.sh $HOME/.lighthouse/local-testnet/node_1 9000 8000 &> /dev/null & +exit_if_fails ../local_testnet/beacon_node.sh $HOME/.lighthouse/local-testnet/node_1 9000 8000 &> /dev/null & BEACON_PID=$! -../local_testnet/beacon_node.sh $HOME/.lighthouse/local-testnet/node_2 9100 8100 &> /dev/null & +exit_if_fails ../local_testnet/beacon_node.sh $HOME/.lighthouse/local-testnet/node_2 9100 8100 &> /dev/null & BEACON_PID2=$! -../local_testnet/beacon_node.sh $HOME/.lighthouse/local-testnet/node_3 9200 8200 &> /dev/null & +exit_if_fails ../local_testnet/beacon_node.sh $HOME/.lighthouse/local-testnet/node_3 9200 8200 &> /dev/null & BEACON_PID3=$! echo "Starting local validator clients" -../local_testnet/validator_client.sh $HOME/.lighthouse/local-testnet/node_1 http://localhost:8000 &> /dev/null & +exit_if_fails ../local_testnet/validator_client.sh $HOME/.lighthouse/local-testnet/node_1 http://localhost:8000 &> /dev/null & VALIDATOR_1_PID=$! -../local_testnet/validator_client.sh $HOME/.lighthouse/local-testnet/node_2 http://localhost:8100 &> /dev/null & +exit_if_fails ../local_testnet/validator_client.sh $HOME/.lighthouse/local-testnet/node_2 http://localhost:8100 &> /dev/null & VALIDATOR_2_PID=$! -../local_testnet/validator_client.sh $HOME/.lighthouse/local-testnet/node_3 http://localhost:8200 &> /dev/null & +exit_if_fails ../local_testnet/validator_client.sh $HOME/.lighthouse/local-testnet/node_3 http://localhost:8200 &> /dev/null & VALIDATOR_3_PID=$! echo "Waiting an epoch before starting the next validator client" @@ -73,9 +83,14 @@ if [[ "$BEHAVIOR" == "failure" ]]; then echo "Done" - if [[ $DOPPELGANGER_EXIT -eq 124 ]]; then + # We expect to find a doppelganger, exit with success error code if doppelganger was found + # and failure if no doppelganger was found. + if [[ $DOPPELGANGER_EXIT -eq 1 ]]; then + exit 0 + else exit 1 fi + fi if [[ "$BEHAVIOR" == "success" ]]; then diff --git a/scripts/tests/vars.env b/scripts/tests/vars.env index 376fe3d8c..778a0afca 100644 --- a/scripts/tests/vars.env +++ b/scripts/tests/vars.env @@ -44,5 +44,8 @@ SECONDS_PER_SLOT=3 # Seconds per Eth1 block SECONDS_PER_ETH1_BLOCK=1 +# Proposer score boost percentage +PROPOSER_SCORE_BOOST=40 + # Enable doppelganger detection VC_ARGS=" --enable-doppelganger-protection " From 5c63d8758e35894660538ad205d9a1cacb9c7218 Mon Sep 17 00:00:00 2001 From: Age Manning Date: Tue, 21 Feb 2023 23:45:44 +0000 Subject: [PATCH 22/29] Register disconnected peers when temporarily banned (#4001) This is a correction to #3757. The correction registers a peer that is being disconnected in the local peer manager db to ensure we are tracking the correct state. --- beacon_node/lighthouse_network/src/peer_manager/peerdb.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/beacon_node/lighthouse_network/src/peer_manager/peerdb.rs b/beacon_node/lighthouse_network/src/peer_manager/peerdb.rs index 61cf8de1c..70d3399d6 100644 --- a/beacon_node/lighthouse_network/src/peer_manager/peerdb.rs +++ b/beacon_node/lighthouse_network/src/peer_manager/peerdb.rs @@ -847,6 +847,10 @@ impl PeerDB { PeerConnectionStatus::Disconnecting { .. } => { // The peer has been disconnected but not banned. Inform the peer manager // that this peer could be eligible for a temporary ban. + self.disconnected_peers += 1; + info.set_connection_status(PeerConnectionStatus::Disconnected { + since: Instant::now(), + }); return Some(BanOperation::TemporaryBan); } PeerConnectionStatus::Unknown From 0fb58a680d6f0c9f0dc8beecf142186debff9a8d Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Wed, 22 Feb 2023 06:00:49 +0000 Subject: [PATCH 23/29] v3.5.0 (#3996) ## Issue Addressed NA ## Proposed Changes - Bump versions ## Sepolia Capella Upgrade This release will enable the Capella fork on Sepolia. We are planning to publish this release on the 23rd of Feb 2023. Users who can build from source and wish to do pre-release testing can use this branch. ## Additional Info - [ ] Requires further testing --- Cargo.lock | 8 ++++---- beacon_node/Cargo.toml | 2 +- boot_node/Cargo.toml | 2 +- common/lighthouse_version/src/lib.rs | 4 ++-- lcli/Cargo.toml | 2 +- lighthouse/Cargo.toml | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1ce987816..33b0070fb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -617,7 +617,7 @@ dependencies = [ [[package]] name = "beacon_node" -version = "3.4.0" +version = "3.5.0" dependencies = [ "beacon_chain", "clap", @@ -785,7 +785,7 @@ dependencies = [ [[package]] name = "boot_node" -version = "3.4.0" +version = "3.5.0" dependencies = [ "beacon_node", "clap", @@ -3719,7 +3719,7 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "lcli" -version = "3.4.0" +version = "3.5.0" dependencies = [ "account_utils", "beacon_chain", @@ -4323,7 +4323,7 @@ dependencies = [ [[package]] name = "lighthouse" -version = "3.4.0" +version = "3.5.0" dependencies = [ "account_manager", "account_utils", diff --git a/beacon_node/Cargo.toml b/beacon_node/Cargo.toml index cca8cc969..a2acd6055 100644 --- a/beacon_node/Cargo.toml +++ b/beacon_node/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "beacon_node" -version = "3.4.0" +version = "3.5.0" authors = ["Paul Hauner ", "Age Manning "] edition = "2021" diff --git a/common/lighthouse_version/src/lib.rs b/common/lighthouse_version/src/lib.rs index 3c136b18b..8ad4aa86f 100644 --- a/common/lighthouse_version/src/lib.rs +++ b/common/lighthouse_version/src/lib.rs @@ -17,8 +17,8 @@ pub const VERSION: &str = git_version!( // NOTE: using --match instead of --exclude for compatibility with old Git "--match=thiswillnevermatchlol" ], - prefix = "Lighthouse/v3.4.0-", - fallback = "Lighthouse/v3.4.0" + prefix = "Lighthouse/v3.5.0-", + fallback = "Lighthouse/v3.5.0" ); /// Returns `VERSION`, but with platform information appended to the end. diff --git a/lcli/Cargo.toml b/lcli/Cargo.toml index 8ebac0ca6..93fe17506 100644 --- a/lcli/Cargo.toml +++ b/lcli/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "lcli" description = "Lighthouse CLI (modeled after zcli)" -version = "3.4.0" +version = "3.5.0" authors = ["Paul Hauner "] edition = "2021" diff --git a/lighthouse/Cargo.toml b/lighthouse/Cargo.toml index a9e38a892..2c0f1ec1c 100644 --- a/lighthouse/Cargo.toml +++ b/lighthouse/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lighthouse" -version = "3.4.0" +version = "3.5.0" authors = ["Sigma Prime "] edition = "2021" autotests = false From be29394a9de90db562adf1fde9d68e7a6754cc11 Mon Sep 17 00:00:00 2001 From: Age Manning Date: Mon, 27 Feb 2023 21:26:16 +0000 Subject: [PATCH 24/29] Execution Integration Tests Correction (#4034) The execution integration tests are currently failing. This is a quick modification to pin the execution client version to correct the tests. --- testing/execution_engine_integration/src/geth.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/testing/execution_engine_integration/src/geth.rs b/testing/execution_engine_integration/src/geth.rs index 1b96fa9f3..5a1a5d4f5 100644 --- a/testing/execution_engine_integration/src/geth.rs +++ b/testing/execution_engine_integration/src/geth.rs @@ -7,7 +7,7 @@ use std::{env, fs::File}; use tempfile::TempDir; use unused_port::unused_tcp_port; -const GETH_BRANCH: &str = "master"; +// const GETH_BRANCH: &str = "master"; const GETH_REPO_URL: &str = "https://github.com/ethereum/go-ethereum"; pub fn build_result(repo_dir: &Path) -> Output { @@ -27,7 +27,9 @@ pub fn build(execution_clients_dir: &Path) { } // Get the latest tag on the branch - let last_release = build_utils::get_latest_release(&repo_dir, GETH_BRANCH).unwrap(); + // TODO: Update when version is corrected + // let last_release = build_utils::get_latest_release(&repo_dir, GETH_BRANCH).unwrap(); + let last_release = "v1.11.1"; build_utils::checkout(&repo_dir, dbg!(&last_release)).unwrap(); // Build geth From 47b22d5256487c814b15030882faf59a4e9e9f06 Mon Sep 17 00:00:00 2001 From: Michael Sproul Date: Tue, 28 Feb 2023 02:20:49 +0000 Subject: [PATCH 25/29] Allow compilation with no slasher backend (#3888) ## Proposed Changes Allowing compiling without MDBX by running: ```bash CARGO_INSTALL_EXTRA_FLAGS="--no-default-features" make ``` The reasons to do this are several: - Save compilation time if the slasher won't be used - Work around compilation errors in slasher backend dependencies (our pinned version of MDBX is currently not compiling on FreeBSD with certain compiler versions). ## Additional Info When I opened this PR we were using resolver v1 which [doesn't disable default features in dependencies](https://doc.rust-lang.org/cargo/reference/features.html#resolver-version-2-command-line-flags), and `mdbx` is default for the `slasher` crate. Even after the resolver got changed to v2 in #3697 compiling with `--no-default-features` _still_ wasn't turning off the slasher crate's default features, so I added `default-features = false` in all the places we depend on it. Co-authored-by: Michael Sproul --- Makefile | 15 ++++++++++++--- beacon_node/Cargo.toml | 2 +- beacon_node/beacon_chain/Cargo.toml | 2 +- beacon_node/client/Cargo.toml | 2 +- book/src/installation-source.md | 9 +++++++++ lighthouse/Cargo.toml | 2 +- slasher/service/Cargo.toml | 2 +- 7 files changed, 26 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 05c6c74d5..89362d12d 100644 --- a/Makefile +++ b/Makefile @@ -38,15 +38,24 @@ PROFILE ?= release # they run for different forks. FORKS=phase0 altair merge capella +# Extra flags for Cargo +CARGO_INSTALL_EXTRA_FLAGS?= + # Builds the Lighthouse binary in release (optimized). # # Binaries will most likely be found in `./target/release` install: - cargo install --path lighthouse --force --locked --features "$(FEATURES)" --profile "$(PROFILE)" + cargo install --path lighthouse --force --locked \ + --features "$(FEATURES)" \ + --profile "$(PROFILE)" \ + $(CARGO_INSTALL_EXTRA_FLAGS) # Builds the lcli binary in release (optimized). install-lcli: - cargo install --path lcli --force --locked --features "$(FEATURES)" --profile "$(PROFILE)" + cargo install --path lcli --force --locked \ + --features "$(FEATURES)" \ + --profile "$(PROFILE)" \ + $(CARGO_INSTALL_EXTRA_FLAGS) # The following commands use `cross` to build a cross-compile. # @@ -124,7 +133,7 @@ run-ef-tests: test-beacon-chain: $(patsubst %,test-beacon-chain-%,$(FORKS)) test-beacon-chain-%: - env FORK_NAME=$* cargo test --release --features fork_from_env -p beacon_chain + env FORK_NAME=$* cargo test --release --features fork_from_env,slasher/lmdb -p beacon_chain # Run the tests in the `operation_pool` crate for all known forks. test-op-pool: $(patsubst %,test-op-pool-%,$(FORKS)) diff --git a/beacon_node/Cargo.toml b/beacon_node/Cargo.toml index a2acd6055..3c37f41de 100644 --- a/beacon_node/Cargo.toml +++ b/beacon_node/Cargo.toml @@ -36,7 +36,7 @@ clap_utils = { path = "../common/clap_utils" } hyper = "0.14.4" lighthouse_version = { path = "../common/lighthouse_version" } hex = "0.4.2" -slasher = { path = "../slasher" } +slasher = { path = "../slasher", default-features = false } monitoring_api = { path = "../common/monitoring_api" } sensitive_url = { path = "../common/sensitive_url" } http_api = { path = "http_api" } diff --git a/beacon_node/beacon_chain/Cargo.toml b/beacon_node/beacon_chain/Cargo.toml index 5b8583304..5599e6f97 100644 --- a/beacon_node/beacon_chain/Cargo.toml +++ b/beacon_node/beacon_chain/Cargo.toml @@ -53,7 +53,7 @@ fork_choice = { path = "../../consensus/fork_choice" } task_executor = { path = "../../common/task_executor" } derivative = "2.1.1" itertools = "0.10.0" -slasher = { path = "../../slasher" } +slasher = { path = "../../slasher", default-features = false } eth2 = { path = "../../common/eth2" } strum = { version = "0.24.0", features = ["derive"] } logging = { path = "../../common/logging" } diff --git a/beacon_node/client/Cargo.toml b/beacon_node/client/Cargo.toml index 9a49843a9..876458eea 100644 --- a/beacon_node/client/Cargo.toml +++ b/beacon_node/client/Cargo.toml @@ -39,7 +39,7 @@ time = "0.3.5" directory = {path = "../../common/directory"} http_api = { path = "../http_api" } http_metrics = { path = "../http_metrics" } -slasher = { path = "../../slasher" } +slasher = { path = "../../slasher", default-features = false } slasher_service = { path = "../../slasher/service" } monitoring_api = {path = "../../common/monitoring_api"} execution_layer = { path = "../execution_layer" } diff --git a/book/src/installation-source.md b/book/src/installation-source.md index 8e515a41b..c89dd1add 100644 --- a/book/src/installation-source.md +++ b/book/src/installation-source.md @@ -133,6 +133,15 @@ Commonly used features include: * `slasher-lmdb`: support for the LMDB slasher backend. * `jemalloc`: use [`jemalloc`][jemalloc] to allocate memory. Enabled by default on Linux and macOS. Not supported on Windows. +* `spec-minimal`: support for the minimal preset (useful for testing). + +Default features (e.g. `slasher-mdbx`) may be opted out of using the `--no-default-features` +argument for `cargo`, which can plumbed in via the `CARGO_INSTALL_EXTRA_FLAGS` environment variable. +E.g. + +``` +CARGO_INSTALL_EXTRA_FLAGS="--no-default-features" make +``` [jemalloc]: https://jemalloc.net/ diff --git a/lighthouse/Cargo.toml b/lighthouse/Cargo.toml index 2c0f1ec1c..ecac53fb1 100644 --- a/lighthouse/Cargo.toml +++ b/lighthouse/Cargo.toml @@ -55,7 +55,7 @@ malloc_utils = { path = "../common/malloc_utils" } directory = { path = "../common/directory" } unused_port = { path = "../common/unused_port" } database_manager = { path = "../database_manager" } -slasher = { path = "../slasher" } +slasher = { path = "../slasher", default-features = false } [dev-dependencies] tempfile = "3.1.0" diff --git a/slasher/service/Cargo.toml b/slasher/service/Cargo.toml index 63cf1e464..0a787defa 100644 --- a/slasher/service/Cargo.toml +++ b/slasher/service/Cargo.toml @@ -9,7 +9,7 @@ beacon_chain = { path = "../../beacon_node/beacon_chain" } directory = { path = "../../common/directory" } lighthouse_network = { path = "../../beacon_node/lighthouse_network" } network = { path = "../../beacon_node/network" } -slasher = { path = ".." } +slasher = { path = "..", default-features = false } slog = "2.5.2" slot_clock = { path = "../../common/slot_clock" } state_processing = { path = "../../consensus/state_processing" } From cc4fc422b2c08ba387cc32d577116c0fae6bf5f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20H=C3=B6ng?= Date: Tue, 28 Feb 2023 02:20:50 +0000 Subject: [PATCH 26/29] Add content-type header to metrics server response (#3970) This fixes issues with certain metrics scrapers, which might error if the content-type is not correctly set. ## Issue Addressed Fixes https://github.com/sigp/lighthouse/issues/3437 ## Proposed Changes Simply set header: `Content-Type: text/plain` on metrics server response. Seems like the errored branch does this correctly already. ## Additional Info This is needed also to enable influx-db metric scraping which work very nicely with Geth. --- beacon_node/http_metrics/src/lib.rs | 8 +++++++- beacon_node/http_metrics/tests/tests.rs | 9 ++++++++- validator_client/src/http_metrics/mod.rs | 8 +++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/beacon_node/http_metrics/src/lib.rs b/beacon_node/http_metrics/src/lib.rs index dfdb8f7ff..2895506c3 100644 --- a/beacon_node/http_metrics/src/lib.rs +++ b/beacon_node/http_metrics/src/lib.rs @@ -116,7 +116,13 @@ pub fn serve( .and_then(|ctx: Arc>| async move { Ok::<_, warp::Rejection>( metrics::gather_prometheus_metrics(&ctx) - .map(|body| Response::builder().status(200).body(body).unwrap()) + .map(|body| { + Response::builder() + .status(200) + .header("Content-Type", "text/plain") + .body(body) + .unwrap() + }) .unwrap_or_else(|e| { Response::builder() .status(500) diff --git a/beacon_node/http_metrics/tests/tests.rs b/beacon_node/http_metrics/tests/tests.rs index b3e02d4cb..89fde3237 100644 --- a/beacon_node/http_metrics/tests/tests.rs +++ b/beacon_node/http_metrics/tests/tests.rs @@ -1,6 +1,7 @@ use beacon_chain::test_utils::EphemeralHarnessType; use environment::null_logger; use http_metrics::Config; +use reqwest::header::HeaderValue; use reqwest::StatusCode; use std::net::{IpAddr, Ipv4Addr}; use std::sync::Arc; @@ -45,7 +46,13 @@ async fn returns_200_ok() { listening_socket.port() ); - assert_eq!(reqwest::get(&url).await.unwrap().status(), StatusCode::OK); + let response = reqwest::get(&url).await.unwrap(); + + assert_eq!(response.status(), StatusCode::OK); + assert_eq!( + response.headers().get("Content-Type").unwrap(), + &HeaderValue::from_str("text/plain").unwrap() + ); } .await } diff --git a/validator_client/src/http_metrics/mod.rs b/validator_client/src/http_metrics/mod.rs index c30d60344..31337491e 100644 --- a/validator_client/src/http_metrics/mod.rs +++ b/validator_client/src/http_metrics/mod.rs @@ -121,7 +121,13 @@ pub fn serve( .and_then(|ctx: Arc>| async move { Ok::<_, warp::Rejection>( metrics::gather_prometheus_metrics(&ctx) - .map(|body| Response::builder().status(200).body(body).unwrap()) + .map(|body| { + Response::builder() + .status(200) + .header("Content-Type", "text/plain") + .body(body) + .unwrap() + }) .unwrap_or_else(|e| { Response::builder() .status(500) From caa6190d4a468ef74d647f668ac04e4accf293d5 Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Tue, 28 Feb 2023 02:20:51 +0000 Subject: [PATCH 27/29] Use consensus-spec-tests `v1.3.0-rc.3` (#4021) ## Issue Addressed NA ## Proposed Changes Updates our `ef_tests` to use: https://github.com/ethereum/consensus-specs/releases/tag/v1.3.0-rc.3 This required: - Skipping a `merkle_proof_validity` test (see #4022) - Account for the `eip4844` tests changing name to `deneb` - My IDE did some Python linting during this change. It seemed simple and nice so I left it there. ## Additional Info NA --- testing/ef_tests/Makefile | 2 +- testing/ef_tests/check_all_files_accessed.py | 9 ++++++--- testing/ef_tests/src/handler.rs | 5 +++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/testing/ef_tests/Makefile b/testing/ef_tests/Makefile index 1feba41c8..fc3dea6e2 100644 --- a/testing/ef_tests/Makefile +++ b/testing/ef_tests/Makefile @@ -1,4 +1,4 @@ -TESTS_TAG := v1.3.0-rc.1 +TESTS_TAG := v1.3.0-rc.3 TESTS = general minimal mainnet TARBALLS = $(patsubst %,%-$(TESTS_TAG).tar.gz,$(TESTS)) diff --git a/testing/ef_tests/check_all_files_accessed.py b/testing/ef_tests/check_all_files_accessed.py index f8ddc0a9f..b52d15522 100755 --- a/testing/ef_tests/check_all_files_accessed.py +++ b/testing/ef_tests/check_all_files_accessed.py @@ -41,8 +41,8 @@ excluded_paths = [ "tests/.*/.*/ssz_static/LightClientFinalityUpdate", # LightClientHeader "tests/.*/.*/ssz_static/LightClientHeader", - # Eip4844 tests are disabled for now. - "tests/.*/eip4844", + # Deneb (previously known as eip4844) tests are disabled for now. + "tests/.*/deneb", # One of the EF researchers likes to pack the tarballs on a Mac ".*\.DS_Store.*", # More Mac weirdness. @@ -55,9 +55,11 @@ excluded_paths = [ "bls12-381-tests/hash_to_G2" ] + def normalize_path(path): return path.split("consensus-spec-tests/")[1] + # Determine the list of filenames which were accessed during tests. passed = set() for line in open(accessed_files_filename, 'r').readlines(): @@ -90,4 +92,5 @@ for root, dirs, files in os.walk(tests_dir_filename): # Exit with an error if there were any files missed. assert len(missed) == 0, "{} missed files".format(len(missed)) -print("Accessed {} files ({} intentionally excluded)".format(accessed_files, excluded_files)) +print("Accessed {} files ({} intentionally excluded)".format( + accessed_files, excluded_files)) diff --git a/testing/ef_tests/src/handler.rs b/testing/ef_tests/src/handler.rs index 07db7cd2a..c066bdafa 100644 --- a/testing/ef_tests/src/handler.rs +++ b/testing/ef_tests/src/handler.rs @@ -650,6 +650,11 @@ impl Handler for MerkleProofValidityHandler { fn is_enabled_for_fork(&self, fork_name: ForkName) -> bool { fork_name != ForkName::Base + // Test is skipped due to some changes in the Capella light client + // spec. + // + // https://github.com/sigp/lighthouse/issues/4022 + && fork_name != ForkName::Capella } } From 0155455990dc464558573ee9e5c19da5c2c4124d Mon Sep 17 00:00:00 2001 From: Age Manning Date: Tue, 28 Feb 2023 02:20:52 +0000 Subject: [PATCH 28/29] Docs for Siren (#4023) This adds some documentation for the Siren app into the Lighthouse book. Co-authored-by: Mavrik --- .gitignore | 1 + book/src/SUMMARY.md | 5 ++ book/src/imgs/ui-account-earnings.png | Bin 0 -> 886925 bytes book/src/imgs/ui-balance-modal.png | Bin 0 -> 44421 bytes book/src/imgs/ui-configuration.png | Bin 0 -> 110294 bytes book/src/imgs/ui-dashboard.png | Bin 0 -> 1453496 bytes book/src/imgs/ui-device.png | Bin 0 -> 57810 bytes book/src/imgs/ui-hardware.png | Bin 0 -> 73137 bytes book/src/imgs/ui-settings.png | Bin 0 -> 353862 bytes book/src/imgs/ui-validator-balance1.png | Bin 0 -> 67314 bytes book/src/imgs/ui-validator-balance2.png | Bin 0 -> 90980 bytes book/src/imgs/ui-validator-management.png | Bin 0 -> 391996 bytes book/src/imgs/ui-validator-modal.png | Bin 0 -> 341438 bytes book/src/imgs/ui-validator-table.png | Bin 0 -> 127175 bytes book/src/imgs/ui.png | Bin 0 -> 372824 bytes book/src/lighthouse-ui.md | 33 +++++++ book/src/ui-configuration.md | 47 ++++++++++ book/src/ui-faqs.md | 13 +++ book/src/ui-installation.md | 103 ++++++++++++++++++++++ book/src/ui-usage.md | 61 +++++++++++++ 20 files changed, 263 insertions(+) create mode 100644 book/src/imgs/ui-account-earnings.png create mode 100644 book/src/imgs/ui-balance-modal.png create mode 100644 book/src/imgs/ui-configuration.png create mode 100644 book/src/imgs/ui-dashboard.png create mode 100644 book/src/imgs/ui-device.png create mode 100644 book/src/imgs/ui-hardware.png create mode 100644 book/src/imgs/ui-settings.png create mode 100644 book/src/imgs/ui-validator-balance1.png create mode 100644 book/src/imgs/ui-validator-balance2.png create mode 100644 book/src/imgs/ui-validator-management.png create mode 100644 book/src/imgs/ui-validator-modal.png create mode 100644 book/src/imgs/ui-validator-table.png create mode 100644 book/src/imgs/ui.png create mode 100644 book/src/lighthouse-ui.md create mode 100644 book/src/ui-configuration.md create mode 100644 book/src/ui-faqs.md create mode 100644 book/src/ui-installation.md create mode 100644 book/src/ui-usage.md diff --git a/.gitignore b/.gitignore index ae9f83c46..1b7e5dbb8 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ genesis.ssz # IntelliJ /*.iml +.idea \ No newline at end of file diff --git a/book/src/SUMMARY.md b/book/src/SUMMARY.md index 470407ebe..7def1821d 100644 --- a/book/src/SUMMARY.md +++ b/book/src/SUMMARY.md @@ -33,6 +33,11 @@ * [Authorization Header](./api-vc-auth-header.md) * [Signature Header](./api-vc-sig-header.md) * [Prometheus Metrics](./advanced_metrics.md) +* [Lighthouse UI (Siren)](./lighthouse-ui.md) + * [Installation](./ui-installation.md) + * [Configuration](./ui-configuration.md) + * [Usage](./ui-usage.md) + * [FAQs](./ui-faqs.md) * [Advanced Usage](./advanced.md) * [Checkpoint Sync](./checkpoint-sync.md) * [Custom Data Directories](./advanced-datadir.md) diff --git a/book/src/imgs/ui-account-earnings.png b/book/src/imgs/ui-account-earnings.png new file mode 100644 index 0000000000000000000000000000000000000000..69e9456035635e947ddfc97771f646f07ee4e588 GIT binary patch literal 886925 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 mBza@U6rPW7WsR}x;c| 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%0AyKuRHGr$WNRsS+joq+&b+2!0r{`n$< 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