kabu_core_blockchain/
blockchain_state.rs1use kabu_evm_db::DatabaseKabuExt;
2use kabu_types_entities::{BlockHistory, BlockHistoryState};
3use kabu_types_market::MarketState;
4use reth_ethereum_primitives::EthPrimitives;
5use reth_node_types::NodePrimitives;
6use revm::{Database, DatabaseCommit, DatabaseRef};
7use std::sync::Arc;
8use tokio::sync::RwLock;
9
10#[derive(Clone)]
11pub struct BlockchainState<DB: Clone + Send + Sync + 'static, NP: NodePrimitives = EthPrimitives> {
12 market_state: Arc<RwLock<MarketState<DB>>>,
13 block_history_state: Arc<RwLock<BlockHistory<DB, NP>>>,
14}
15
16impl<
17 DB: DatabaseRef + Database + DatabaseCommit + BlockHistoryState<NP> + DatabaseKabuExt + Send + Sync + Clone + Default + 'static,
18 NP: NodePrimitives,
19> Default for BlockchainState<DB, NP>
20{
21 fn default() -> Self {
22 Self::new()
23 }
24}
25
26impl<
27 DB: DatabaseRef + Database + DatabaseCommit + BlockHistoryState<NP> + DatabaseKabuExt + Send + Sync + Clone + Default + 'static,
28 NP: NodePrimitives,
29> BlockchainState<DB, NP>
30{
31 pub fn new() -> Self {
32 BlockchainState {
33 market_state: Arc::new(RwLock::new(MarketState::new(DB::default()))),
34 block_history_state: Arc::new(RwLock::new(BlockHistory::<DB, NP>::new(10))),
35 }
36 }
37
38 pub fn new_with_market_state(market_state: MarketState<DB>) -> Self {
39 Self { market_state: Arc::new(RwLock::new(market_state)), block_history_state: Arc::new(RwLock::new(BlockHistory::new(10))) }
40 }
41
42 pub fn with_market_state(self, market_state: MarketState<DB>) -> BlockchainState<DB, NP> {
43 BlockchainState { market_state: Arc::new(RwLock::new(market_state)), ..self.clone() }
44 }
45}
46
47impl<DB: Clone + Send + Sync, NP: NodePrimitives> BlockchainState<DB, NP> {
48 pub fn market_state_commit(&self) -> Arc<RwLock<MarketState<DB>>> {
49 self.market_state.clone()
50 }
51
52 pub fn market_state(&self) -> Arc<RwLock<MarketState<DB>>> {
53 self.market_state.clone()
54 }
55
56 pub fn block_history(&self) -> Arc<RwLock<BlockHistory<DB, NP>>> {
57 self.block_history_state.clone()
58 }
59}