6656cb00e4
* 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>
47 lines
1.5 KiB
Rust
47 lines
1.5 KiB
Rust
use crate::metrics;
|
|
use lru::LruCache;
|
|
use types::{beacon_state::CommitteeCache, Epoch, Hash256};
|
|
|
|
/// The size of the LRU cache that stores committee caches for quicker verification.
|
|
///
|
|
/// Each entry should be `8 + 800,000 = 800,008` bytes in size with 100k validators. (8-byte hash +
|
|
/// 100k indices). Therefore, this cache should be approx `16 * 800,008 = 12.8 MB`. (Note: this
|
|
/// ignores a few extra bytes in the caches that should be insignificant compared to the indices).
|
|
const CACHE_SIZE: usize = 16;
|
|
|
|
/// Provides an LRU cache for `CommitteeCache`.
|
|
///
|
|
/// It has been named `ShufflingCache` because `CommitteeCacheCache` is a bit weird and looks like
|
|
/// a find/replace error.
|
|
pub struct ShufflingCache {
|
|
cache: LruCache<(Epoch, Hash256), CommitteeCache>,
|
|
}
|
|
|
|
impl ShufflingCache {
|
|
pub fn new() -> Self {
|
|
Self {
|
|
cache: LruCache::new(CACHE_SIZE),
|
|
}
|
|
}
|
|
|
|
pub fn get(&mut self, epoch: Epoch, root: Hash256) -> Option<&CommitteeCache> {
|
|
let opt = self.cache.get(&(epoch, root));
|
|
|
|
if opt.is_some() {
|
|
metrics::inc_counter(&metrics::SHUFFLING_CACHE_HITS);
|
|
} else {
|
|
metrics::inc_counter(&metrics::SHUFFLING_CACHE_MISSES);
|
|
}
|
|
|
|
opt
|
|
}
|
|
|
|
pub fn insert(&mut self, epoch: Epoch, root: Hash256, committee_cache: &CommitteeCache) {
|
|
let key = (epoch, root);
|
|
|
|
if !self.cache.contains(&key) {
|
|
self.cache.put(key, committee_cache.clone());
|
|
}
|
|
}
|
|
}
|