diff --git a/storage/src/anchors.rs b/storage/src/anchors.rs new file mode 100644 index 00000000..1f059fff --- /dev/null +++ b/storage/src/anchors.rs @@ -0,0 +1,17 @@ +use hash::H256; +use bytes::Bytes; +use {EpochTag, RegularTreeState}; + +pub trait AnchorProvider { + fn tree_bytes_at(&self, root: &H256) -> Option; + + fn tree_at(&self, root: &H256) -> Option { + self.tree_bytes_at(root) + .map( + |bytes| serialization::Reader::new(&bytes[..]) + .read::() + .expect("Corrupted database: wrong tree state format!") + ) + } +} + diff --git a/storage/src/lib.rs b/storage/src/lib.rs index 7ae2e94a..d7cd1b9b 100644 --- a/storage/src/lib.rs +++ b/storage/src/lib.rs @@ -25,6 +25,7 @@ mod transaction_meta; mod transaction_provider; mod nullifier; mod tree_state; +mod anchors; pub use primitives::{hash, bytes}; @@ -41,6 +42,7 @@ pub use transaction_meta::TransactionMeta; pub use transaction_provider::{TransactionProvider, TransactionOutputProvider, TransactionMetaProvider}; pub use nullifier::{Nullifier, NullifierTracker}; pub use tree_state::{TreeState, H32 as H32TreeDim, Dim as TreeDim, RegularTreeState}; +pub use anchors::AnchorProvider; /// Epoch tag. ///