oasis_core_runtime/storage/mkvs/sync/
mod.rs1mod errors;
3mod host;
4mod merge;
5mod noop;
6mod proof;
7mod stats;
8
9pub use errors::SyncerError;
10pub use host::HostReadSyncer;
11pub use merge::merge_verified_subtree;
12pub use noop::NoopReadSyncer;
13pub use proof::{Proof, ProofBuilder, ProofVerifier, RawProofEntry};
14pub use stats::StatsCollector;
15
16use std::any::Any;
17
18use anyhow::Result;
19
20use crate::{
21 common::crypto::hash::Hash,
22 storage::mkvs::{tree::Root, Prefix},
23};
24
25#[derive(Clone, Debug, Default, PartialEq, Eq, cbor::Encode, cbor::Decode)]
27pub struct TreeID {
28 pub root: Root,
30 pub position: Hash,
33}
34
35#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
37pub struct GetRequest {
38 pub tree: TreeID,
39 pub key: Vec<u8>,
40 #[cbor(optional)]
41 pub include_siblings: bool,
42}
43
44#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
46pub struct GetPrefixesRequest {
47 pub tree: TreeID,
48 pub prefixes: Vec<Prefix>,
49 pub limit: u16,
50}
51
52#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
54pub struct IterateRequest {
55 pub tree: TreeID,
56 pub key: Vec<u8>,
57 pub prefetch: u16,
58}
59
60#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
62pub struct ProofResponse {
63 pub proof: Proof,
64}
65
66pub trait ReadSync {
69 fn as_any(&self) -> &dyn Any;
71
72 fn sync_get(&mut self, request: GetRequest) -> Result<ProofResponse>;
74
75 fn sync_get_prefixes(&mut self, request: GetPrefixesRequest) -> Result<ProofResponse>;
77
78 fn sync_iterate(&mut self, request: IterateRequest) -> Result<ProofResponse>;
81}
82
83#[cfg(test)]
84mod test;