mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-30 22:29:36 +00:00
Final changes for fusaka-devnet-2 (#7655)
Closes #7467. This PR primarily addresses [the P2P changes](https://github.com/ethereum/EIPs/pull/9840) in [fusaka-devnet-2](https://fusaka-devnet-2.ethpandaops.io/). Specifically: * [the new `nfd` parameter added to the `ENR`](https://github.com/ethereum/EIPs/pull/9840) * [the modified `compute_fork_digest()` changes for every BPO fork](https://github.com/ethereum/EIPs/pull/9840) 90% of this PR was absolutely hacked together as fast as possible during the Berlinterop as fast as I could while running between Glamsterdam debates. Luckily, it seems to work. But I was unable to be as careful in avoiding bugs as I usually am. I've cleaned up the things *I remember* wanting to come back and have a closer look at. But still working on this. Progress: * [x] get it working on `fusaka-devnet-2` * [ ] [*optional* disconnect from peers with incorrect `nfd` at the fork boundary](https://github.com/ethereum/consensus-specs/pull/4407) - Can be addressed in a future PR if necessary * [x] first pass clean-up * [x] fix up all the broken tests * [x] final self-review * [x] more thorough review from people more familiar with affected code
This commit is contained in:
@@ -13,7 +13,7 @@ use std::sync::Arc;
|
||||
use std::task::{Context, Poll};
|
||||
use std::time::{Duration, Instant};
|
||||
use tokio::time::Interval;
|
||||
use types::{ChainSpec, EthSpec, ForkContext, ForkName};
|
||||
use types::{ChainSpec, Epoch, EthSpec, ForkContext};
|
||||
|
||||
/// Nanoseconds since a given time.
|
||||
// Maintained as u64 to reduce footprint
|
||||
@@ -267,7 +267,7 @@ impl RPCRateLimiterBuilder {
|
||||
|
||||
pub trait RateLimiterItem {
|
||||
fn protocol(&self) -> Protocol;
|
||||
fn max_responses(&self, current_fork: ForkName, spec: &ChainSpec) -> u64;
|
||||
fn max_responses(&self, digest_epoch: Epoch, spec: &ChainSpec) -> u64;
|
||||
}
|
||||
|
||||
impl<E: EthSpec> RateLimiterItem for super::RequestType<E> {
|
||||
@@ -275,8 +275,8 @@ impl<E: EthSpec> RateLimiterItem for super::RequestType<E> {
|
||||
self.versioned_protocol().protocol()
|
||||
}
|
||||
|
||||
fn max_responses(&self, current_fork: ForkName, spec: &ChainSpec) -> u64 {
|
||||
self.max_responses(current_fork, spec)
|
||||
fn max_responses(&self, digest_epoch: Epoch, spec: &ChainSpec) -> u64 {
|
||||
self.max_responses(digest_epoch, spec)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -285,7 +285,7 @@ impl<E: EthSpec> RateLimiterItem for (super::RpcResponse<E>, Protocol) {
|
||||
self.1
|
||||
}
|
||||
|
||||
fn max_responses(&self, _current_fork: ForkName, _spec: &ChainSpec) -> u64 {
|
||||
fn max_responses(&self, _digest_epoch: Epoch, _spec: &ChainSpec) -> u64 {
|
||||
// A response chunk consumes one token of the rate limiter.
|
||||
1
|
||||
}
|
||||
@@ -353,7 +353,10 @@ impl RPCRateLimiter {
|
||||
) -> Result<(), RateLimitedErr> {
|
||||
let time_since_start = self.init_time.elapsed();
|
||||
let tokens = request
|
||||
.max_responses(self.fork_context.current_fork(), &self.fork_context.spec)
|
||||
.max_responses(
|
||||
self.fork_context.current_fork_epoch(),
|
||||
&self.fork_context.spec,
|
||||
)
|
||||
.max(1);
|
||||
|
||||
let check =
|
||||
|
||||
Reference in New Issue
Block a user