1pub use super::impls::state::State;
13use cfx_types::AddressWithSpace;
14
15pub type WithProof = primitives::static_bool::Yes;
16pub type NoProof = primitives::static_bool::No;
17
18pub trait StateTrait: Sync + Send {
22 fn get(&self, access_key: StorageKeyWithSpace)
24 -> Result<Option<Box<[u8]>>>;
25 fn set(
26 &mut self, access_key: StorageKeyWithSpace, value: Box<[u8]>,
27 ) -> Result<()>;
28 fn delete(&mut self, access_key: StorageKeyWithSpace) -> Result<()>;
29 fn delete_test_only(
30 &mut self, access_key: StorageKeyWithSpace,
31 ) -> Result<Option<Box<[u8]>>>;
32 fn delete_all(
35 &mut self, access_key_prefix: StorageKeyWithSpace,
36 ) -> Result<Option<Vec<MptKeyValue>>>;
37 fn read_all(
39 &mut self, access_key_prefix: StorageKeyWithSpace,
40 ) -> Result<Option<Vec<MptKeyValue>>>;
41
42 fn read_all_with_callback(
43 &mut self, _access_key_prefix: StorageKeyWithSpace,
44 _callback: &mut dyn FnMut(MptKeyValue), _only_account_key: bool,
45 ) -> Result<()> {
46 Err(Error::Msg("Not implemented".into()))
47 }
48
49 fn compute_state_root(&mut self) -> Result<StateRootWithAuxInfo>;
53 fn get_state_root(&self) -> Result<StateRootWithAuxInfo>;
54 fn commit(&mut self, epoch: EpochId) -> Result<StateRootWithAuxInfo>;
55}
56
57pub trait StateTraitExt {
58 fn get_with_proof(
59 &self, access_key: StorageKeyWithSpace,
60 ) -> Result<(Option<Box<[u8]>>, StateProof)>;
61
62 fn get_node_merkle_all_versions<WithProof: StaticBool>(
66 &self, access_key: StorageKeyWithSpace,
67 ) -> Result<(NodeMerkleTriplet, NodeMerkleProof)>;
68}
69
70pub trait StateDbGetOriginalMethods {
72 fn get_original_raw_with_proof(
73 &self, key: StorageKeyWithSpace,
74 ) -> Result<(Option<Box<[u8]>>, StateProof)>;
75
76 fn get_original_storage_root(
77 &self, address: &AddressWithSpace,
78 ) -> Result<StorageRoot>;
79
80 fn get_original_storage_root_with_proof(
81 &self, address: &AddressWithSpace,
82 ) -> Result<(StorageRoot, StorageRootProof)>;
83}
84
85use super::{
86 impls::{
87 errors::*, node_merkle_proof::NodeMerkleProof, state_proof::StateProof,
88 },
89 MptKeyValue, StateRootWithAuxInfo,
90};
91use crate::StorageRootProof;
92use primitives::{
93 EpochId, NodeMerkleTriplet, StaticBool, StorageKeyWithSpace, StorageRoot,
94};