mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-11 18:04:18 +00:00
* Start updating types * WIP * Signature hacking * Existing EF tests passing with fake_crypto * Updates * Delete outdated API spec * The refactor continues * It compiles * WIP test fixes * All release tests passing bar genesis state parsing * Update and test YamlConfig * Update to spec v0.10 compatible BLS * Updates to BLS EF tests * Add EF test for AggregateVerify And delete unused hash2curve tests for uncompressed points * Update EF tests to v0.10.1 * Use optional block root correctly in block proc * Use genesis fork in deposit domain. All tests pass * Cargo fmt * Fast aggregate verify test * Update REST API docs * Cargo fmt * Fix unused import * Bump spec tags to v0.10.1 * Add `seconds_per_eth1_block` to chainspec * Update to timestamp based eth1 voting scheme * Return None from `get_votes_to_consider` if block cache is empty * Handle overflows in `is_candidate_block` * Revert to failing tests * Fix eth1 data sets test * Choose default vote according to spec * Fix collect_valid_votes tests * Fix `get_votes_to_consider` to choose all eligible blocks * Uncomment winning_vote tests * Add comments; remove unused code * Reduce seconds_per_eth1_block for simulation * Addressed review comments * Add test for default vote case * Fix logs * Remove unused functions * Meter default eth1 votes * Fix comments * Address review comments; remove unused dependency * Add first attempt at attestation proc. re-write * Add version 2 of attestation processing * Minor fixes * Add validator pubkey cache * Make get_indexed_attestation take a committee * Link signature processing into new attn verification * First working version * Ensure pubkey cache is updated * Add more metrics, slight optimizations * Clone committee cache during attestation processing * Update shuffling cache during block processing * Remove old commented-out code * Fix shuffling cache insert bug * Used indexed attestation in fork choice * Restructure attn processing, add metrics * Add more detailed metrics * Tidy, fix failing tests * Fix failing tests, tidy * Disable/delete two outdated tests * Tidy * Add pubkey cache persistence file * Add more comments * Integrate persistence file into builder * Add pubkey cache tests * Add data_dir to beacon chain builder * Remove Option in pubkey cache persistence file * Ensure consistency between datadir/data_dir * Fix failing network test * Tidy * Fix todos * Add attestation processing tests * Add another test * Only run attestation tests in release * Make attestation tests MainnetEthSpec * Address Michael's comments * Remove redundant check * Fix warning * Fix failing test Co-authored-by: Michael Sproul <micsproul@gmail.com> Co-authored-by: Pawan Dhananjay <pawandhananjay@gmail.com>
76 lines
2.2 KiB
Rust
76 lines
2.2 KiB
Rust
use eth2_libp2p::Enr;
|
|
use rlp;
|
|
use std::sync::Arc;
|
|
use store::{DBColumn, Error as StoreError, SimpleStoreItem, Store};
|
|
use types::{EthSpec, Hash256};
|
|
|
|
/// 32-byte key for accessing the `DhtEnrs`.
|
|
pub const DHT_DB_KEY: &str = "PERSISTEDDHTPERSISTEDDHTPERSISTE";
|
|
|
|
pub fn load_dht<T: Store<E>, E: EthSpec>(store: Arc<T>) -> Vec<Enr> {
|
|
// Load DHT from store
|
|
let key = Hash256::from_slice(&DHT_DB_KEY.as_bytes());
|
|
match store.get(&key) {
|
|
Ok(Some(p)) => {
|
|
let p: PersistedDht = p;
|
|
p.enrs
|
|
}
|
|
_ => Vec::new(),
|
|
}
|
|
}
|
|
|
|
/// Attempt to persist the ENR's in the DHT to `self.store`.
|
|
pub fn persist_dht<T: Store<E>, E: EthSpec>(
|
|
store: Arc<T>,
|
|
enrs: Vec<Enr>,
|
|
) -> Result<(), store::Error> {
|
|
let key = Hash256::from_slice(&DHT_DB_KEY.as_bytes());
|
|
store.put(&key, &PersistedDht { enrs })?;
|
|
Ok(())
|
|
}
|
|
|
|
/// Wrapper around DHT for persistence to disk.
|
|
pub struct PersistedDht {
|
|
pub enrs: Vec<Enr>,
|
|
}
|
|
|
|
impl SimpleStoreItem for PersistedDht {
|
|
fn db_column() -> DBColumn {
|
|
DBColumn::DhtEnrs
|
|
}
|
|
|
|
fn as_store_bytes(&self) -> Vec<u8> {
|
|
rlp::encode_list(&self.enrs)
|
|
}
|
|
|
|
fn from_store_bytes(bytes: &[u8]) -> Result<Self, StoreError> {
|
|
let rlp = rlp::Rlp::new(bytes);
|
|
let enrs: Vec<Enr> = rlp
|
|
.as_list()
|
|
.map_err(|e| StoreError::RlpError(format!("{}", e)))?;
|
|
Ok(PersistedDht { enrs })
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use eth2_libp2p::Enr;
|
|
use std::str::FromStr;
|
|
use std::sync::Arc;
|
|
use store::{MemoryStore, Store};
|
|
use types::Hash256;
|
|
use types::MinimalEthSpec;
|
|
#[test]
|
|
fn test_persisted_dht() {
|
|
let store = Arc::new(MemoryStore::<MinimalEthSpec>::open());
|
|
let enrs = vec![Enr::from_str("enr:-IS4QHCYrYZbAKWCBRlAy5zzaDZXJBGkcnh4MHcBFZntXNFrdvJjX04jRzjzCBOonrkTfj499SZuOh8R33Ls8RRcy5wBgmlkgnY0gmlwhH8AAAGJc2VjcDI1NmsxoQPKY0yuDUmstAHYpMa2_oxVtw0RW_QAdpzBQA8yWM0xOIN1ZHCCdl8").unwrap()];
|
|
let key = Hash256::from_slice(&DHT_DB_KEY.as_bytes());
|
|
store
|
|
.put(&key, &PersistedDht { enrs: enrs.clone() })
|
|
.unwrap();
|
|
let dht: PersistedDht = store.get(&key).unwrap().unwrap();
|
|
assert_eq!(dht.enrs, enrs);
|
|
}
|
|
}
|