mirror of
https://github.com/sigp/lighthouse.git
synced 2026-05-08 17:26:04 +00:00
Indexed att on disk (#35)
* indexed att on disk * fix lints * Update slasher/src/migrate.rs Co-authored-by: ethDreamer <37123614+ethDreamer@users.noreply.github.com> --------- Co-authored-by: Lion - dapplion <35266934+dapplion@users.noreply.github.com> Co-authored-by: ethDreamer <37123614+ethDreamer@users.noreply.github.com>
This commit is contained in:
@@ -239,6 +239,38 @@ mod quoted_variable_list_u64 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Encode, Decode, PartialEq)]
|
||||||
|
#[ssz(enum_behaviour = "union")]
|
||||||
|
pub enum IndexedAttestationOnDisk<E: EthSpec> {
|
||||||
|
Base(IndexedAttestationBase<E>),
|
||||||
|
Electra(IndexedAttestationElectra<E>),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Encode, PartialEq)]
|
||||||
|
#[ssz(enum_behaviour = "union")]
|
||||||
|
pub enum IndexedAttestationRefOnDisk<'a, E: EthSpec> {
|
||||||
|
Base(&'a IndexedAttestationBase<E>),
|
||||||
|
Electra(&'a IndexedAttestationElectra<E>),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, E: EthSpec> From<&'a IndexedAttestation<E>> for IndexedAttestationRefOnDisk<'a, E> {
|
||||||
|
fn from(attestation: &'a IndexedAttestation<E>) -> Self {
|
||||||
|
match attestation {
|
||||||
|
IndexedAttestation::Base(attestation) => Self::Base(attestation),
|
||||||
|
IndexedAttestation::Electra(attestation) => Self::Electra(attestation),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<E: EthSpec> From<IndexedAttestationOnDisk<E>> for IndexedAttestation<E> {
|
||||||
|
fn from(attestation: IndexedAttestationOnDisk<E>) -> Self {
|
||||||
|
match attestation {
|
||||||
|
IndexedAttestationOnDisk::Base(attestation) => Self::Base(attestation),
|
||||||
|
IndexedAttestationOnDisk::Electra(attestation) => Self::Electra(attestation),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|||||||
@@ -176,7 +176,8 @@ pub use crate::fork_versioned_response::{ForkVersionDeserialize, ForkVersionedRe
|
|||||||
pub use crate::graffiti::{Graffiti, GRAFFITI_BYTES_LEN};
|
pub use crate::graffiti::{Graffiti, GRAFFITI_BYTES_LEN};
|
||||||
pub use crate::historical_batch::HistoricalBatch;
|
pub use crate::historical_batch::HistoricalBatch;
|
||||||
pub use crate::indexed_attestation::{
|
pub use crate::indexed_attestation::{
|
||||||
IndexedAttestation, IndexedAttestationBase, IndexedAttestationElectra, IndexedAttestationRef,
|
IndexedAttestation, IndexedAttestationBase, IndexedAttestationElectra,
|
||||||
|
IndexedAttestationOnDisk, IndexedAttestationRef, IndexedAttestationRefOnDisk,
|
||||||
};
|
};
|
||||||
pub use crate::light_client_bootstrap::{
|
pub use crate::light_client_bootstrap::{
|
||||||
LightClientBootstrap, LightClientBootstrapAltair, LightClientBootstrapCapella,
|
LightClientBootstrap, LightClientBootstrapAltair, LightClientBootstrapCapella,
|
||||||
|
|||||||
@@ -18,12 +18,12 @@ use std::marker::PhantomData;
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tree_hash::TreeHash;
|
use tree_hash::TreeHash;
|
||||||
use types::{
|
use types::{
|
||||||
Epoch, EthSpec, Hash256, IndexedAttestation, IndexedAttestationBase, ProposerSlashing,
|
Epoch, EthSpec, Hash256, IndexedAttestation, IndexedAttestationOnDisk,
|
||||||
SignedBeaconBlockHeader, Slot,
|
IndexedAttestationRefOnDisk, ProposerSlashing, SignedBeaconBlockHeader, Slot,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Current database schema version, to check compatibility of on-disk DB with software.
|
/// Current database schema version, to check compatibility of on-disk DB with software.
|
||||||
pub const CURRENT_SCHEMA_VERSION: u64 = 3;
|
pub const CURRENT_SCHEMA_VERSION: u64 = 4;
|
||||||
|
|
||||||
/// Metadata about the slashing database itself.
|
/// Metadata about the slashing database itself.
|
||||||
const METADATA_DB: &str = "metadata";
|
const METADATA_DB: &str = "metadata";
|
||||||
@@ -458,7 +458,9 @@ impl<E: EthSpec> SlasherDB<E> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let attestation_key = IndexedAttestationId::new(indexed_att_id);
|
let attestation_key = IndexedAttestationId::new(indexed_att_id);
|
||||||
let data = indexed_attestation.as_ssz_bytes();
|
let indexed_attestation_on_disk: IndexedAttestationRefOnDisk<E> =
|
||||||
|
indexed_attestation.into();
|
||||||
|
let data = indexed_attestation_on_disk.as_ssz_bytes();
|
||||||
|
|
||||||
cursor.put(attestation_key.as_ref(), &data)?;
|
cursor.put(attestation_key.as_ref(), &data)?;
|
||||||
drop(cursor);
|
drop(cursor);
|
||||||
@@ -482,11 +484,8 @@ impl<E: EthSpec> SlasherDB<E> {
|
|||||||
.ok_or(Error::MissingIndexedAttestation {
|
.ok_or(Error::MissingIndexedAttestation {
|
||||||
id: indexed_attestation_id.as_u64(),
|
id: indexed_attestation_id.as_u64(),
|
||||||
})?;
|
})?;
|
||||||
// TODO(electra): make slasher fork-aware and return correct variant of attestation. Both
|
let indexed_attestation: IndexedAttestationOnDisk<E> = ssz_decode(bytes)?;
|
||||||
// Base and Electra variant can the same SSZ encoding, however the smaller list maximum of
|
Ok(indexed_attestation.into())
|
||||||
// Base can error with an Electra attestation with heavy participation.
|
|
||||||
let indexed_attestation: IndexedAttestationBase<E> = ssz_decode(bytes)?;
|
|
||||||
Ok(IndexedAttestation::Base(indexed_attestation))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_attestation_data_root(
|
fn get_attestation_data_root(
|
||||||
|
|||||||
@@ -17,6 +17,10 @@ impl<E: EthSpec> SlasherDB<E> {
|
|||||||
software_schema_version: CURRENT_SCHEMA_VERSION,
|
software_schema_version: CURRENT_SCHEMA_VERSION,
|
||||||
}),
|
}),
|
||||||
(x, y) if x == y => Ok(self),
|
(x, y) if x == y => Ok(self),
|
||||||
|
(3, 4) => {
|
||||||
|
// TODO(electra): db migration due to `IndexedAttestationOnDisk`
|
||||||
|
Ok(self)
|
||||||
|
}
|
||||||
(_, _) => Err(Error::IncompatibleSchemaVersion {
|
(_, _) => Err(Error::IncompatibleSchemaVersion {
|
||||||
database_schema_version: schema_version,
|
database_schema_version: schema_version,
|
||||||
software_schema_version: CURRENT_SCHEMA_VERSION,
|
software_schema_version: CURRENT_SCHEMA_VERSION,
|
||||||
|
|||||||
Reference in New Issue
Block a user