mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-03 00:31:50 +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:
@@ -6812,17 +6812,27 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
.enr_fork_id::<T::EthSpec>(slot, self.genesis_validators_root)
|
||||
}
|
||||
|
||||
/// Calculates the `Duration` to the next fork if it exists and returns it
|
||||
/// with it's corresponding `ForkName`.
|
||||
pub fn duration_to_next_fork(&self) -> Option<(ForkName, Duration)> {
|
||||
/// Returns the fork_digest corresponding to an epoch.
|
||||
/// See [`ChainSpec::compute_fork_digest`]
|
||||
pub fn compute_fork_digest(&self, epoch: Epoch) -> [u8; 4] {
|
||||
self.spec
|
||||
.compute_fork_digest(self.genesis_validators_root, epoch)
|
||||
}
|
||||
|
||||
/// Calculates the `Duration` to the next fork digest (this could be either a regular or BPO
|
||||
/// hard fork) if it exists and returns it with its corresponding `Epoch`.
|
||||
pub fn duration_to_next_digest(&self) -> Option<(Epoch, Duration)> {
|
||||
// If we are unable to read the slot clock we assume that it is prior to genesis and
|
||||
// therefore use the genesis slot.
|
||||
let slot = self.slot().unwrap_or(self.spec.genesis_slot);
|
||||
let epoch = slot.epoch(T::EthSpec::slots_per_epoch());
|
||||
|
||||
let next_digest_epoch = self.spec.next_digest_epoch(epoch)?;
|
||||
let next_digest_slot = next_digest_epoch.start_slot(T::EthSpec::slots_per_epoch());
|
||||
|
||||
let (fork_name, epoch) = self.spec.next_fork_epoch::<T::EthSpec>(slot)?;
|
||||
self.slot_clock
|
||||
.duration_to_slot(epoch.start_slot(T::EthSpec::slots_per_epoch()))
|
||||
.map(|duration| (fork_name, duration))
|
||||
.duration_to_slot(next_digest_slot)
|
||||
.map(|duration| (next_digest_epoch, duration))
|
||||
}
|
||||
|
||||
/// This method serves to get a sense of the current chain health. It is used in block proposal
|
||||
|
||||
Reference in New Issue
Block a user