#![warn(missing_debug_implementations, missing_docs, bare_trait_objects)]
#![warn(clippy::all, clippy::pedantic)]
#![allow(
clippy::must_use_candidate,
clippy::module_name_repetitions,
clippy::doc_markdown // frequent false positive: RocksDB
)]
use std::{cell::RefCell, collections::HashMap, fmt, rc::Rc};
use zksync_types::{
get_known_code_key,
storage::{StorageKey, StorageValue},
H256,
};
pub use self::{
cache::sequential_cache::SequentialCache,
catchup::{AsyncCatchupTask, RocksdbCell},
in_memory::InMemoryStorage,
in_memory::IN_MEMORY_STORAGE_DEFAULT_NETWORK_ID,
postgres::{PostgresStorage, PostgresStorageCaches, PostgresStorageCachesTask},
rocksdb::{
RocksdbStorage, RocksdbStorageBuilder, RocksdbStorageOptions, StateKeeperColumnFamily,
},
shadow_storage::ShadowStorage,
storage_factory::{BatchDiff, PgOrRocksdbStorage, ReadStorageFactory, RocksdbWithMemory},
storage_view::{StorageView, StorageViewCache, StorageViewMetrics},
witness::WitnessStorage,
};
mod cache;
mod catchup;
mod in_memory;
mod postgres;
mod rocksdb;
mod shadow_storage;
mod storage_factory;
mod storage_view;
#[cfg(test)]
mod test_utils;
mod witness;
pub trait ReadStorage: fmt::Debug {
fn read_value(&mut self, key: &StorageKey) -> StorageValue;
fn is_write_initial(&mut self, key: &StorageKey) -> bool;
fn load_factory_dep(&mut self, hash: H256) -> Option<Vec<u8>>;
fn is_bytecode_known(&mut self, bytecode_hash: &H256) -> bool {
let code_key = get_known_code_key(bytecode_hash);
self.read_value(&code_key) != H256::zero()
}
fn get_enumeration_index(&mut self, key: &StorageKey) -> Option<u64>;
}
pub trait WriteStorage: ReadStorage {
fn read_storage_keys(&self) -> &HashMap<StorageKey, StorageValue>;
fn set_value(&mut self, key: StorageKey, value: StorageValue) -> StorageValue;
fn modified_storage_keys(&self) -> &HashMap<StorageKey, StorageValue>;
fn missed_storage_invocations(&self) -> usize;
}
pub type StoragePtr<S> = Rc<RefCell<S>>;