mirror of
https://github.com/sigp/lighthouse.git
synced 2026-05-30 04:37:13 +00:00
Merge branch 'master' into attestation-processing
This commit is contained in:
@@ -15,10 +15,10 @@ serde_derive = "1.0"
|
||||
slog = { version = "^2.2.3" , features = ["max_level_trace"] }
|
||||
sloggers = { version = "^0.3" }
|
||||
slot_clock = { path = "../../eth2/utils/slot_clock" }
|
||||
eth2_ssz = { path = "../../eth2/utils/ssz" }
|
||||
eth2_ssz_derive = { path = "../../eth2/utils/ssz_derive" }
|
||||
eth2_ssz = "0.1"
|
||||
eth2_ssz_derive = "0.1"
|
||||
state_processing = { path = "../../eth2/state_processing" }
|
||||
tree_hash = { path = "../../eth2/utils/tree_hash" }
|
||||
tree_hash = "0.1"
|
||||
types = { path = "../../eth2/types" }
|
||||
lmd_ghost = { path = "../../eth2/lmd_ghost" }
|
||||
|
||||
|
||||
@@ -236,18 +236,17 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
Ok(headers?)
|
||||
}
|
||||
|
||||
/// Iterates through all the `BeaconBlock` roots and slots, first returning
|
||||
/// `self.head().beacon_block` then all prior blocks until either genesis or if the database
|
||||
/// fails to return a prior block.
|
||||
/// Iterates across all `(block_root, slot)` pairs from the head of the chain (inclusive) to
|
||||
/// the earliest reachable ancestor (may or may not be genesis).
|
||||
///
|
||||
/// Returns duplicate roots for skip-slots.
|
||||
/// ## Notes
|
||||
///
|
||||
/// Iterator returns `(Hash256, Slot)`.
|
||||
///
|
||||
/// ## Note
|
||||
///
|
||||
/// Because this iterator starts at the `head` of the chain (viz., the best block), the first slot
|
||||
/// returned may be earlier than the wall-clock slot.
|
||||
/// `slot` always decreases by `1`.
|
||||
/// - Skipped slots contain the root of the closest prior
|
||||
/// non-skipped slot (identical to the way they are stored in `state.block_roots`) .
|
||||
/// - Iterator returns `(Hash256, Slot)`.
|
||||
/// - As this iterator starts at the `head` of the chain (viz., the best block), the first slot
|
||||
/// returned may be earlier than the wall-clock slot.
|
||||
pub fn rev_iter_block_roots(&self) -> ReverseBlockRootIterator<T::EthSpec, T::Store> {
|
||||
let state = &self.head().beacon_state;
|
||||
let block_root = self.head().beacon_block_root;
|
||||
@@ -258,16 +257,15 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
ReverseBlockRootIterator::new((block_root, block_slot), iter)
|
||||
}
|
||||
|
||||
/// Iterates through all the `BeaconState` roots and slots, first returning
|
||||
/// `self.head().beacon_state` then all prior states until either genesis or if the database
|
||||
/// fails to return a prior state.
|
||||
/// Iterates across all `(state_root, slot)` pairs from the head of the chain (inclusive) to
|
||||
/// the earliest reachable ancestor (may or may not be genesis).
|
||||
///
|
||||
/// Iterator returns `(Hash256, Slot)`.
|
||||
/// ## Notes
|
||||
///
|
||||
/// ## Note
|
||||
///
|
||||
/// Because this iterator starts at the `head` of the chain (viz., the best block), the first slot
|
||||
/// returned may be earlier than the wall-clock slot.
|
||||
/// `slot` always decreases by `1`.
|
||||
/// - Iterator returns `(Hash256, Slot)`.
|
||||
/// - As this iterator starts at the `head` of the chain (viz., the best block), the first slot
|
||||
/// returned may be earlier than the wall-clock slot.
|
||||
pub fn rev_iter_state_roots(&self) -> ReverseStateRootIterator<T::EthSpec, T::Store> {
|
||||
let state = &self.head().beacon_state;
|
||||
let state_root = self.head().beacon_state_root;
|
||||
@@ -293,8 +291,6 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
/// Returns a read-lock guarded `BeaconState` which is the `canonical_head` that has been
|
||||
/// updated to match the current slot clock.
|
||||
pub fn speculative_state(&self) -> Result<RwLockReadGuard<BeaconState<T::EthSpec>>, Error> {
|
||||
// TODO: ensure the state has done a catch-up.
|
||||
|
||||
Ok(self.state.read())
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ rpc = { path = "../rpc" }
|
||||
rest_api = { path = "../rest_api" }
|
||||
prometheus = "^0.6"
|
||||
types = { path = "../../eth2/types" }
|
||||
tree_hash = { path = "../../eth2/utils/tree_hash" }
|
||||
tree_hash = "0.1"
|
||||
eth2_config = { path = "../../eth2/utils/eth2_config" }
|
||||
slot_clock = { path = "../../eth2/utils/slot_clock" }
|
||||
serde = "1.0.93"
|
||||
|
||||
@@ -12,8 +12,8 @@ enr = { git = "https://github.com/SigP/rust-libp2p/", rev = "be5710bbde69d8c5be
|
||||
types = { path = "../../eth2/types" }
|
||||
serde = "1.0"
|
||||
serde_derive = "1.0"
|
||||
eth2_ssz = { path = "../../eth2/utils/ssz" }
|
||||
eth2_ssz_derive = { path = "../../eth2/utils/ssz_derive" }
|
||||
eth2_ssz = "0.1"
|
||||
eth2_ssz_derive = "0.1"
|
||||
slog = { version = "^2.4.1" , features = ["max_level_trace"] }
|
||||
version = { path = "../version" }
|
||||
tokio = "0.1.16"
|
||||
|
||||
@@ -13,8 +13,8 @@ store = { path = "../store" }
|
||||
eth2-libp2p = { path = "../eth2-libp2p" }
|
||||
types = { path = "../../eth2/types" }
|
||||
slog = { version = "^2.2.3" , features = ["max_level_trace"] }
|
||||
eth2_ssz = { path = "../../eth2/utils/ssz" }
|
||||
tree_hash = { path = "../../eth2/utils/tree_hash" }
|
||||
eth2_ssz = "0.1"
|
||||
tree_hash = "0.1"
|
||||
futures = "0.1.25"
|
||||
error-chain = "0.12.0"
|
||||
tokio = "0.1.16"
|
||||
|
||||
@@ -266,8 +266,7 @@ impl<T: BeaconChainTypes> SimpleSync<T> {
|
||||
|
||||
fn root_at_slot(&self, target_slot: Slot) -> Option<Hash256> {
|
||||
self.chain
|
||||
.rev_iter_block_roots(target_slot)
|
||||
.take(1)
|
||||
.rev_iter_block_roots()
|
||||
.find(|(_root, slot)| *slot == target_slot)
|
||||
.map(|(root, _slot)| root)
|
||||
}
|
||||
@@ -280,8 +279,6 @@ impl<T: BeaconChainTypes> SimpleSync<T> {
|
||||
req: BeaconBlockRootsRequest,
|
||||
network: &mut NetworkContext<T::EthSpec>,
|
||||
) {
|
||||
let state = &self.chain.head().beacon_state;
|
||||
|
||||
debug!(
|
||||
self.log,
|
||||
"BlockRootsRequest";
|
||||
@@ -292,8 +289,9 @@ impl<T: BeaconChainTypes> SimpleSync<T> {
|
||||
|
||||
let mut roots: Vec<BlockRootSlot> = self
|
||||
.chain
|
||||
.rev_iter_block_roots(std::cmp::min(req.start_slot + req.count, state.slot))
|
||||
.rev_iter_block_roots()
|
||||
.take_while(|(_root, slot)| req.start_slot <= *slot)
|
||||
.filter(|(_root, slot)| *slot < req.start_slot + req.count)
|
||||
.map(|(block_root, slot)| BlockRootSlot { slot, block_root })
|
||||
.collect();
|
||||
|
||||
@@ -391,8 +389,6 @@ impl<T: BeaconChainTypes> SimpleSync<T> {
|
||||
req: BeaconBlockHeadersRequest,
|
||||
network: &mut NetworkContext<T::EthSpec>,
|
||||
) {
|
||||
let state = &self.chain.head().beacon_state;
|
||||
|
||||
debug!(
|
||||
self.log,
|
||||
"BlockHeadersRequest";
|
||||
@@ -405,8 +401,9 @@ impl<T: BeaconChainTypes> SimpleSync<T> {
|
||||
// Collect the block roots.
|
||||
let mut roots: Vec<Hash256> = self
|
||||
.chain
|
||||
.rev_iter_block_roots(std::cmp::min(req.start_slot + count, state.slot))
|
||||
.rev_iter_block_roots()
|
||||
.take_while(|(_root, slot)| req.start_slot <= *slot)
|
||||
.filter(|(_root, slot)| *slot < req.start_slot + count)
|
||||
.map(|(root, _slot)| root)
|
||||
.collect();
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ network = { path = "../network" }
|
||||
eth2-libp2p = { path = "../eth2-libp2p" }
|
||||
version = { path = "../version" }
|
||||
types = { path = "../../eth2/types" }
|
||||
eth2_ssz = { path = "../../eth2/utils/ssz" }
|
||||
eth2_ssz = "0.1"
|
||||
protos = { path = "../../protos" }
|
||||
grpcio = { version = "0.4", default-features = false, features = ["protobuf-codec"] }
|
||||
clap = "2.32.0"
|
||||
|
||||
@@ -11,7 +11,7 @@ tempfile = "3"
|
||||
db-key = "0.0.5"
|
||||
leveldb = "0.8.4"
|
||||
parking_lot = "0.7"
|
||||
eth2_ssz = { path = "../../eth2/utils/ssz" }
|
||||
eth2_ssz_derive = { path = "../../eth2/utils/ssz_derive" }
|
||||
tree_hash = { path = "../../eth2/utils/tree_hash" }
|
||||
eth2_ssz = "0.1"
|
||||
eth2_ssz_derive = "0.1"
|
||||
tree_hash = "0.1"
|
||||
types = { path = "../../eth2/types" }
|
||||
|
||||
Reference in New Issue
Block a user