Store execution block hash in fork choice (#2643)

* - Update the fork choice `ProtoNode` to include `is_merge_complete`
- Add database migration for the persisted fork choice

* update tests

* Small cleanup

* lints

* store execution block hash in fork choice rather than bool
This commit is contained in:
realbigsean
2021-09-28 05:56:49 -04:00
committed by Paul Hauner
parent 7236dcbdbf
commit e559bd9f59
9 changed files with 148 additions and 4 deletions

View File

@@ -1,7 +1,9 @@
//! Utilities for managing database schema changes.
use crate::beacon_chain::{BeaconChainTypes, OP_POOL_DB_KEY};
use crate::beacon_chain::{BeaconChainTypes, FORK_CHOICE_DB_KEY, OP_POOL_DB_KEY};
use crate::persisted_fork_choice::PersistedForkChoice;
use crate::validator_pubkey_cache::ValidatorPubkeyCache;
use operation_pool::{PersistedOperationPool, PersistedOperationPoolBase};
use proto_array::ProtoArrayForkChoice;
use ssz::{Decode, Encode};
use ssz_derive::{Decode, Encode};
use std::fs;
@@ -93,6 +95,28 @@ pub fn migrate_schema<T: BeaconChainTypes>(
Ok(())
}
// Migration for adding `is_merge_complete` field to the fork choice store.
(SchemaVersion(5), SchemaVersion(6)) => {
let fork_choice_opt = db
.get_item::<PersistedForkChoice>(&FORK_CHOICE_DB_KEY)?
.map(|mut persisted_fork_choice| {
let fork_choice = ProtoArrayForkChoice::from_bytes_legacy(
&persisted_fork_choice.fork_choice.proto_array_bytes,
)?;
persisted_fork_choice.fork_choice.proto_array_bytes = fork_choice.as_bytes();
Ok::<_, String>(persisted_fork_choice)
})
.transpose()
.map_err(StoreError::SchemaMigrationError)?;
if let Some(fork_choice) = fork_choice_opt {
// Store the converted fork choice store under the same key.
db.put_item::<PersistedForkChoice>(&FORK_CHOICE_DB_KEY, &fork_choice)?;
}
db.store_schema_version(to)?;
Ok(())
}
// Anything else is an error.
(_, _) => Err(HotColdDBError::UnsupportedSchemaVersion {
target_version: to,

View File

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