1use crate::global_state::{
2 error::Error as GlobalStateError,
3 state::{CommitProvider, StateProvider},
4};
5use casper_types::{execution::Effects, Digest};
6
7use crate::tracking_copy::TrackingCopy;
8
9mod addressable_entity;
10pub mod auction;
12pub mod balance;
14mod balance_hold;
15mod balance_identifier_purse;
16pub mod bids;
18mod block_global;
19pub mod block_rewards;
21mod contract;
22mod entry_points;
23pub mod era_validators;
25mod execution_results_checksum;
26mod fee;
27mod flush;
28pub mod forced_undelegate;
30mod genesis;
31pub mod handle_fee;
33mod handle_refund;
34mod key_prefix;
35pub mod message_topics;
37pub mod mint;
39pub mod prefixed_values;
41mod protocol_upgrade;
42pub mod prune;
44pub mod query;
46mod round_seigniorage;
47mod seigniorage_recipients;
48pub mod step;
50mod system_entity_registry;
51pub mod tagged_values;
53mod total_supply;
54mod trie;
55
56pub use addressable_entity::{AddressableEntityRequest, AddressableEntityResult};
57pub use auction::{AuctionMethod, BiddingRequest, BiddingResult};
58pub use balance::{
59 BalanceHolds, BalanceHoldsWithProof, BalanceIdentifier, BalanceRequest, BalanceResult,
60 GasHoldBalanceHandling, ProofHandling, ProofsResult,
61};
62pub use balance_hold::{
63 BalanceHoldError, BalanceHoldKind, BalanceHoldMode, BalanceHoldRequest, BalanceHoldResult,
64 InsufficientBalanceHandling,
65};
66pub use balance_identifier_purse::{BalanceIdentifierPurseRequest, BalanceIdentifierPurseResult};
67pub use bids::{BidsRequest, BidsResult};
68pub use block_global::{BlockGlobalKind, BlockGlobalRequest, BlockGlobalResult};
69pub use block_rewards::{BlockRewardsError, BlockRewardsRequest, BlockRewardsResult};
70pub use contract::{ContractRequest, ContractResult};
71pub use entry_points::{
72 EntryPointExistsRequest, EntryPointExistsResult, EntryPointRequest, EntryPointResult,
73};
74pub use era_validators::{EraValidatorsRequest, EraValidatorsResult};
75pub use execution_results_checksum::{
76 ExecutionResultsChecksumRequest, ExecutionResultsChecksumResult,
77 EXECUTION_RESULTS_CHECKSUM_NAME,
78};
79pub use fee::{FeeError, FeeRequest, FeeResult};
80pub use flush::{FlushRequest, FlushResult};
81pub use genesis::{GenesisRequest, GenesisResult};
82pub use handle_fee::{HandleFeeMode, HandleFeeRequest, HandleFeeResult};
83pub use handle_refund::{HandleRefundMode, HandleRefundRequest, HandleRefundResult};
84pub use key_prefix::KeyPrefix;
85pub use message_topics::{MessageTopicsRequest, MessageTopicsResult};
86pub use mint::{TransferRequest, TransferResult};
87pub use protocol_upgrade::{ProtocolUpgradeRequest, ProtocolUpgradeResult};
88pub use prune::{PruneRequest, PruneResult};
89pub use query::{QueryRequest, QueryResult};
90pub use round_seigniorage::{RoundSeigniorageRateRequest, RoundSeigniorageRateResult};
91pub use seigniorage_recipients::{SeigniorageRecipientsRequest, SeigniorageRecipientsResult};
92pub use step::{EvictItem, RewardItem, SlashItem, StepError, StepRequest, StepResult};
93pub use system_entity_registry::{
94 SystemEntityRegistryPayload, SystemEntityRegistryRequest, SystemEntityRegistryResult,
95 SystemEntityRegistrySelector,
96};
97pub use total_supply::{TotalSupplyRequest, TotalSupplyResult};
98pub use trie::{PutTrieRequest, PutTrieResult, TrieElement, TrieRequest, TrieResult};
99
100#[derive(Default, Copy, Clone)]
102pub struct BlockStore(());
103
104impl BlockStore {
105 pub fn new() -> Self {
107 BlockStore(())
108 }
109}
110
111#[derive(Copy, Clone)]
113pub struct DataAccessLayer<S> {
114 pub block_store: BlockStore,
116 pub state: S,
118 pub max_query_depth: u64,
120 pub enable_addressable_entity: bool,
122}
123
124impl<S> DataAccessLayer<S> {
125 pub fn state(&self) -> &S {
127 &self.state
128 }
129}
130
131impl<S> CommitProvider for DataAccessLayer<S>
132where
133 S: CommitProvider,
134{
135 fn commit_effects(
136 &self,
137 state_hash: Digest,
138 effects: Effects,
139 ) -> Result<Digest, GlobalStateError> {
140 self.state.commit_effects(state_hash, effects)
141 }
142
143 fn commit_values(
144 &self,
145 state_hash: Digest,
146 values_to_write: Vec<(casper_types::Key, casper_types::StoredValue)>,
147 keys_to_prune: std::collections::BTreeSet<casper_types::Key>,
148 ) -> Result<Digest, GlobalStateError> {
149 self.state
150 .commit_values(state_hash, values_to_write, keys_to_prune)
151 }
152}
153
154impl<S> StateProvider for DataAccessLayer<S>
155where
156 S: StateProvider,
157{
158 type Reader = S::Reader;
159
160 fn flush(&self, request: FlushRequest) -> FlushResult {
161 self.state.flush(request)
162 }
163
164 fn empty_root(&self) -> Digest {
165 self.state.empty_root()
166 }
167
168 fn tracking_copy(
169 &self,
170 hash: Digest,
171 ) -> Result<Option<TrackingCopy<S::Reader>>, GlobalStateError> {
172 match self.state.checkout(hash)? {
173 Some(reader) => Ok(Some(TrackingCopy::new(
174 reader,
175 self.max_query_depth,
176 self.enable_addressable_entity,
177 ))),
178 None => Ok(None),
179 }
180 }
181
182 fn checkout(&self, state_hash: Digest) -> Result<Option<Self::Reader>, GlobalStateError> {
183 self.state.checkout(state_hash)
184 }
185
186 fn trie(&self, request: TrieRequest) -> TrieResult {
187 self.state.trie(request)
188 }
189
190 fn put_trie(&self, request: PutTrieRequest) -> PutTrieResult {
191 self.state.put_trie(request)
192 }
193
194 fn missing_children(&self, trie_raw: &[u8]) -> Result<Vec<Digest>, GlobalStateError> {
195 self.state.missing_children(trie_raw)
196 }
197
198 fn enable_entity(&self) -> bool {
199 self.state.enable_entity()
200 }
201}