mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-15 02:42:38 +00:00
* Remove use of ethers_core::RlpStream
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into remove_use_of_ethers_core
* Remove old code
* Simplify keccak call
* Remove unused package
* Merge branch 'unstable' of https://github.com/ethDreamer/lighthouse into remove_use_of_ethers_core
* Merge branch 'unstable' into remove_use_of_ethers_core
* Run clippy
* Merge branch 'remove_use_of_ethers_core' of https://github.com/dospore/lighthouse into remove_use_of_ethers_core
* Check all cargo fmt
* migrate to alloy primitives init
* fix deps
* integrate alloy-primitives
* resolve dep issues
* more changes based on dep changes
* add TODOs
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into remove_use_of_ethers_core
* Revert lock
* Add BeaconBlocksByRange v3
* continue migration
* Revert "Add BeaconBlocksByRange v3"
This reverts commit e3ce7fc5ea.
* impl hash256 extended trait
* revert some uneeded diffs
* merge conflict resolved
* fix subnet id rshift calc
* rename to FixedBytesExtended
* debugging
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* fix failed test
* fixing more tests
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into remove_use_of_ethers_core
* introduce a shim to convert between the two u256 types
* move alloy to wrokspace
* align alloy versions
* update
* update web3signer test certs
* refactor
* resolve failing tests
* linting
* fix graffiti string test
* fmt
* fix ef test
* resolve merge conflicts
* remove udep and revert cert
* cargo patch
* cyclic dep
* fix build error
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* resolve conflicts, update deps
* merge unstable
* fmt
* fix deps
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* resolve merge conflicts
* resolve conflicts, make necessary changes
* Remove patch
* fmt
* remove file
* merge conflicts
* sneaking in a smol change
* bump versions
* Merge remote-tracking branch 'origin/unstable' into migrate-to-alloy-primitives
* Updates for peerDAS
* Update ethereum_hashing to prevent dupe
* updated alloy-consensus, removed TODOs
* cargo update
* endianess fix
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* fmt
* fix merge
* fix test
* fixed_bytes crate
* minor fixes
* convert u256 to i64
* panic free mixin to_low_u64_le
* from_str_radix
* computbe_subnet api and ensuring we use big-endian
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* fix test
* Simplify subnet_id test
* Simplify some more tests
* Add tests to fixed_bytes crate
* Merge branch 'unstable' into migrate-to-alloy-primitives
84 lines
2.7 KiB
Rust
84 lines
2.7 KiB
Rust
use lighthouse_network::Enr;
|
|
use std::sync::Arc;
|
|
use store::{DBColumn, Error as StoreError, HotColdDB, ItemStore, StoreItem};
|
|
use types::{EthSpec, Hash256};
|
|
|
|
/// 32-byte key for accessing the `DhtEnrs`. All zero because `DhtEnrs` has its own column.
|
|
pub const DHT_DB_KEY: Hash256 = Hash256::ZERO;
|
|
|
|
pub fn load_dht<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>>(
|
|
store: Arc<HotColdDB<E, Hot, Cold>>,
|
|
) -> Vec<Enr> {
|
|
// Load DHT from store
|
|
match store.get_item(&DHT_DB_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<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>>(
|
|
store: Arc<HotColdDB<E, Hot, Cold>>,
|
|
enrs: Vec<Enr>,
|
|
) -> Result<(), store::Error> {
|
|
store.put_item(&DHT_DB_KEY, &PersistedDht { enrs })
|
|
}
|
|
|
|
/// Attempts to clear any DHT entries.
|
|
pub fn clear_dht<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>>(
|
|
store: Arc<HotColdDB<E, Hot, Cold>>,
|
|
) -> Result<(), store::Error> {
|
|
store.hot_db.delete::<PersistedDht>(&DHT_DB_KEY)
|
|
}
|
|
|
|
/// Wrapper around DHT for persistence to disk.
|
|
pub struct PersistedDht {
|
|
pub enrs: Vec<Enr>,
|
|
}
|
|
|
|
impl StoreItem for PersistedDht {
|
|
fn db_column() -> DBColumn {
|
|
DBColumn::DhtEnrs
|
|
}
|
|
|
|
fn as_store_bytes(&self) -> Vec<u8> {
|
|
rlp::encode_list(&self.enrs).to_vec()
|
|
}
|
|
|
|
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 sloggers::{null::NullLoggerBuilder, Build};
|
|
use std::str::FromStr;
|
|
use store::config::StoreConfig;
|
|
use store::MemoryStore;
|
|
use types::{ChainSpec, MinimalEthSpec};
|
|
#[test]
|
|
fn test_persisted_dht() {
|
|
let log = NullLoggerBuilder.build().unwrap();
|
|
let store: HotColdDB<
|
|
MinimalEthSpec,
|
|
MemoryStore<MinimalEthSpec>,
|
|
MemoryStore<MinimalEthSpec>,
|
|
> = HotColdDB::open_ephemeral(StoreConfig::default(), ChainSpec::minimal(), log).unwrap();
|
|
let enrs = vec![Enr::from_str("enr:-IS4QHCYrYZbAKWCBRlAy5zzaDZXJBGkcnh4MHcBFZntXNFrdvJjX04jRzjzCBOonrkTfj499SZuOh8R33Ls8RRcy5wBgmlkgnY0gmlwhH8AAAGJc2VjcDI1NmsxoQPKY0yuDUmstAHYpMa2_oxVtw0RW_QAdpzBQA8yWM0xOIN1ZHCCdl8").unwrap()];
|
|
store
|
|
.put_item(&DHT_DB_KEY, &PersistedDht { enrs: enrs.clone() })
|
|
.unwrap();
|
|
let dht: PersistedDht = store.get_item(&DHT_DB_KEY).unwrap().unwrap();
|
|
assert_eq!(dht.enrs, enrs);
|
|
}
|
|
}
|