Light client updates by range RPC (#6383)

* enable lc update over rpc

* resolve TODOs

* resolve merge conflicts

* move max light client updates to eth spec

* Merge branch 'unstable' of https://github.com/sigp/lighthouse into light-client-updates-by-range-rpc

* remove ethspec dependency

* Update beacon_node/network/src/network_beacon_processor/rpc_methods.rs

Co-authored-by: Michael Sproul <micsproul@gmail.com>

* Update beacon_node/lighthouse_network/src/rpc/methods.rs

Co-authored-by: Michael Sproul <micsproul@gmail.com>
This commit is contained in:
Eitan Seri-Levi
2024-10-17 19:50:51 -07:00
committed by GitHub
parent 9f1bec6372
commit d1fda938a3
15 changed files with 383 additions and 11 deletions

View File

@@ -106,6 +106,8 @@ pub struct RPCRateLimiter {
lc_optimistic_update_rl: Limiter<PeerId>,
/// LightClientFinalityUpdate rate limiter.
lc_finality_update_rl: Limiter<PeerId>,
/// LightClientUpdatesByRange rate limiter.
lc_updates_by_range_rl: Limiter<PeerId>,
}
/// Error type for non conformant requests
@@ -146,6 +148,8 @@ pub struct RPCRateLimiterBuilder {
lc_optimistic_update_quota: Option<Quota>,
/// Quota for the LightClientOptimisticUpdate protocol.
lc_finality_update_quota: Option<Quota>,
/// Quota for the LightClientUpdatesByRange protocol.
lc_updates_by_range_quota: Option<Quota>,
}
impl RPCRateLimiterBuilder {
@@ -166,6 +170,7 @@ impl RPCRateLimiterBuilder {
Protocol::LightClientBootstrap => self.lcbootstrap_quota = q,
Protocol::LightClientOptimisticUpdate => self.lc_optimistic_update_quota = q,
Protocol::LightClientFinalityUpdate => self.lc_finality_update_quota = q,
Protocol::LightClientUpdatesByRange => self.lc_updates_by_range_quota = q,
}
self
}
@@ -191,6 +196,9 @@ impl RPCRateLimiterBuilder {
let lc_finality_update_quota = self
.lc_finality_update_quota
.ok_or("LightClientFinalityUpdate quota not specified")?;
let lc_updates_by_range_quota = self
.lc_updates_by_range_quota
.ok_or("LightClientUpdatesByRange quota not specified")?;
let blbrange_quota = self
.blbrange_quota
@@ -221,6 +229,7 @@ impl RPCRateLimiterBuilder {
let lc_bootstrap_rl = Limiter::from_quota(lc_bootstrap_quota)?;
let lc_optimistic_update_rl = Limiter::from_quota(lc_optimistic_update_quota)?;
let lc_finality_update_rl = Limiter::from_quota(lc_finality_update_quota)?;
let lc_updates_by_range_rl = Limiter::from_quota(lc_updates_by_range_quota)?;
// check for peers to prune every 30 seconds, starting in 30 seconds
let prune_every = tokio::time::Duration::from_secs(30);
@@ -241,6 +250,7 @@ impl RPCRateLimiterBuilder {
lc_bootstrap_rl,
lc_optimistic_update_rl,
lc_finality_update_rl,
lc_updates_by_range_rl,
init_time: Instant::now(),
})
}
@@ -278,6 +288,7 @@ impl RPCRateLimiter {
light_client_bootstrap_quota,
light_client_optimistic_update_quota,
light_client_finality_update_quota,
light_client_updates_by_range_quota,
} = config;
Self::builder()
@@ -300,6 +311,10 @@ impl RPCRateLimiter {
Protocol::LightClientFinalityUpdate,
light_client_finality_update_quota,
)
.set_quota(
Protocol::LightClientUpdatesByRange,
light_client_updates_by_range_quota,
)
.build()
}
@@ -332,6 +347,7 @@ impl RPCRateLimiter {
Protocol::LightClientBootstrap => &mut self.lc_bootstrap_rl,
Protocol::LightClientOptimisticUpdate => &mut self.lc_optimistic_update_rl,
Protocol::LightClientFinalityUpdate => &mut self.lc_finality_update_rl,
Protocol::LightClientUpdatesByRange => &mut self.lc_updates_by_range_rl,
};
check(limiter)
}