Various small tree-states fixes (#4861)

* Fix block backfill with genesis skip slots

* Fix freezer upper limit

* Fix: write post state in lcli skip-slots (#4843)

* Added CARGO_USE_GIT_CLI to the Dockerfile (#4828)

* chore: replace deprecated hub with gh for releases (#4839)

* Put schema version back to 24 (ignore Deneb)

* Minimise diff

---------

Co-authored-by: Joe Clapis <jclapis@outlook.com>
Co-authored-by: Dustin Brickwood <dustinbrickwood204@gmail.com>
This commit is contained in:
Michael Sproul
2023-10-19 14:59:29 +11:00
committed by GitHub
parent 72d8c3852c
commit 0cb8fdf370
9 changed files with 38 additions and 21 deletions

View File

@@ -282,9 +282,6 @@ jobs:
| <img src="https://simpleicons.org/icons/docker.svg" style="width: 32px;"/> | Docker | [${{ env.VERSION }}](https://hub.docker.com/r/${{ env.IMAGE_NAME }}/tags?page=1&ordering=last_updated&name=${{ env.VERSION }}) | [${{ env.IMAGE_NAME }}](https://hub.docker.com/r/${{ env.IMAGE_NAME }}) | | <img src="https://simpleicons.org/icons/docker.svg" style="width: 32px;"/> | Docker | [${{ env.VERSION }}](https://hub.docker.com/r/${{ env.IMAGE_NAME }}/tags?page=1&ordering=last_updated&name=${{ env.VERSION }}) | [${{ env.IMAGE_NAME }}](https://hub.docker.com/r/${{ env.IMAGE_NAME }}) |
ENDBODY ENDBODY
) )
assets=() assets=(./lighthouse-*.tar.gz*)
for asset in ./lighthouse-*.tar.gz*; do
assets+=("-a" "$asset/$asset")
done
tag_name="${{ env.VERSION }}" tag_name="${{ env.VERSION }}"
echo "$body" | hub release create --draft "${assets[@]}" -F "-" "$tag_name" echo "$body" | gh release create --draft -F "-" "$tag_name" "${assets[@]}"

View File

@@ -3,8 +3,10 @@ RUN apt-get update && apt-get -y upgrade && apt-get install -y cmake libclang-de
COPY . lighthouse COPY . lighthouse
ARG FEATURES ARG FEATURES
ARG PROFILE=release ARG PROFILE=release
ARG CARGO_USE_GIT_CLI=false
ENV FEATURES $FEATURES ENV FEATURES $FEATURES
ENV PROFILE $PROFILE ENV PROFILE $PROFILE
ENV CARGO_NET_GIT_FETCH_WITH_CLI=$CARGO_USE_GIT_CLI
RUN cd lighthouse && make RUN cd lighthouse && make
FROM ubuntu:22.04 FROM ubuntu:22.04

View File

@@ -140,17 +140,17 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
prev_block_slot = block.slot(); prev_block_slot = block.slot();
expected_block_root = block.message().parent_root(); expected_block_root = block.message().parent_root();
// If we've reached genesis, add the genesis block root to the batch and set the // If we've reached genesis, add the genesis block root to the batch for all slots
// anchor slot to 0 to indicate completion. // between 0 and the first block slot, and set the anchor slot to 0 to indicate
// completion.
if expected_block_root == self.genesis_block_root { if expected_block_root == self.genesis_block_root {
let genesis_slot = self.spec.genesis_slot; let genesis_slot = self.spec.genesis_slot;
cold_batch.push(KeyValueStoreOp::PutKeyValue( for slot in genesis_slot.as_u64()..block.slot().as_u64() {
get_key_for_col( cold_batch.push(KeyValueStoreOp::PutKeyValue(
DBColumn::BeaconBlockRoots.into(), get_key_for_col(DBColumn::BeaconBlockRoots.into(), &slot.to_be_bytes()),
&genesis_slot.as_u64().to_be_bytes(), self.genesis_block_root.as_bytes().to_vec(),
), ));
self.genesis_block_root.as_bytes().to_vec(), }
));
prev_block_slot = genesis_slot; prev_block_slot = genesis_slot;
expected_block_root = Hash256::zero(); expected_block_root = Hash256::zero();
break; break;

View File

@@ -2103,6 +2103,18 @@ async fn weak_subjectivity_sync_unaligned_unadvanced_checkpoint() {
weak_subjectivity_sync_test(slots, checkpoint_slot).await weak_subjectivity_sync_test(slots, checkpoint_slot).await
} }
// Regression test for https://github.com/sigp/lighthouse/issues/4817
// Skip 3 slots immediately after genesis, creating a gap between the genesis block and the first
// real block.
#[tokio::test]
async fn weak_subjectivity_sync_skips_at_genesis() {
let start_slot = 4;
let end_slot = E::slots_per_epoch() * 4;
let slots = (start_slot..end_slot).map(Slot::new).collect();
let checkpoint_slot = Slot::new(E::slots_per_epoch() * 2);
weak_subjectivity_sync_test(slots, checkpoint_slot).await
}
async fn weak_subjectivity_sync_test(slots: Vec<Slot>, checkpoint_slot: Slot) { async fn weak_subjectivity_sync_test(slots: Vec<Slot>, checkpoint_slot: Slot) {
// Build an initial chain on one harness, representing a synced node with full history. // Build an initial chain on one harness, representing a synced node with full history.
let num_final_blocks = E::slots_per_epoch() * 2; let num_final_blocks = E::slots_per_epoch() * 2;

View File

@@ -72,8 +72,15 @@ impl<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>> HotColdDB<E, Hot, Cold>
let anchor_info = self.get_anchor_info(); let anchor_info = self.get_anchor_info();
// There are no historic states stored if the state upper limit lies in the hot // There are no historic states stored if the state upper limit lies in the hot
// database. It hasn't been reached yet, and may never be. // database. It hasn't been reached yet, and may never be.
if anchor_info.map_or(false, |a| a.state_upper_limit >= split_slot) { if anchor_info.as_ref().map_or(false, |a| {
a.state_upper_limit >= split_slot && a.state_lower_limit == 0
}) {
None None
} else if let Some(lower_limit) = anchor_info
.map(|a| a.state_lower_limit)
.filter(|limit| *limit > 0)
{
Some(lower_limit)
} else { } else {
// Otherwise if the state upper limit lies in the freezer or all states are // Otherwise if the state upper limit lies in the freezer or all states are
// reconstructed then state roots are available up to the split slot. // reconstructed then state roots are available up to the split slot.

View File

@@ -4,7 +4,7 @@ use ssz::{Decode, Encode};
use ssz_derive::{Decode, Encode}; use ssz_derive::{Decode, Encode};
use types::{Checkpoint, Hash256, Slot}; use types::{Checkpoint, Hash256, Slot};
pub const CURRENT_SCHEMA_VERSION: SchemaVersion = SchemaVersion(25); pub const CURRENT_SCHEMA_VERSION: SchemaVersion = SchemaVersion(24);
// All the keys that get stored under the `BeaconMeta` column. // All the keys that get stored under the `BeaconMeta` column.
// //

View File

@@ -547,7 +547,6 @@ reconstruction has yet to be completed. For more information
on the specific meanings of these fields see the docs on [Checkpoint on the specific meanings of these fields see the docs on [Checkpoint
Sync](./checkpoint-sync.md#reconstructing-states). Sync](./checkpoint-sync.md#reconstructing-states).
### `/lighthouse/merge_readiness` ### `/lighthouse/merge_readiness`
Returns the current difficulty and terminal total difficulty of the network. Before [The Merge](https://ethereum.org/en/roadmap/merge/) on 15<sup>th</sup> September 2022, you will see that the current difficulty is less than the terminal total difficulty, An example is shown below: Returns the current difficulty and terminal total difficulty of the network. Before [The Merge](https://ethereum.org/en/roadmap/merge/) on 15<sup>th</sup> September 2022, you will see that the current difficulty is less than the terminal total difficulty, An example is shown below:
```bash ```bash

View File

@@ -365,8 +365,6 @@ pub fn inspect_db<E: EthSpec>(
} else { } else {
println!("Successfully saved values to file: {:?}", file_path); println!("Successfully saved values to file: {:?}", file_path);
} }
total += value.len();
} }
} }
total += value.len(); total += value.len();

View File

@@ -110,6 +110,7 @@ pub fn run<T: EthSpec>(
} }
_ => return Err("must supply either --state-path or --beacon-url".into()), _ => return Err("must supply either --state-path or --beacon-url".into()),
}; };
let mut post_state = None;
let initial_slot = state.slot(); let initial_slot = state.slot();
let target_slot = initial_slot + slots; let target_slot = initial_slot + slots;
@@ -141,14 +142,15 @@ pub fn run<T: EthSpec>(
let duration = Instant::now().duration_since(start); let duration = Instant::now().duration_since(start);
info!("Run {}: {:?}", i, duration); info!("Run {}: {:?}", i, duration);
post_state = Some(state);
} }
if let Some(output_path) = output_path { if let (Some(post_state), Some(output_path)) = (post_state, output_path) {
let mut output_file = File::create(output_path) let mut output_file = File::create(output_path)
.map_err(|e| format!("Unable to create output file: {:?}", e))?; .map_err(|e| format!("Unable to create output file: {:?}", e))?;
output_file output_file
.write_all(&state.as_ssz_bytes()) .write_all(&post_state.as_ssz_bytes())
.map_err(|e| format!("Unable to write to output file: {:?}", e))?; .map_err(|e| format!("Unable to write to output file: {:?}", e))?;
} }