mirror of
https://github.com/sigp/lighthouse.git
synced 2026-04-18 21:38:31 +00:00
Create cached_tree_hash crate.
This commit is contained in:
@@ -10,6 +10,7 @@ proc-macro = true
|
||||
|
||||
[dev-dependencies]
|
||||
tree_hash = { path = "../tree_hash" }
|
||||
cached_tree_hash = { path = "../cached_tree_hash" }
|
||||
|
||||
[dependencies]
|
||||
syn = "0.15"
|
||||
|
||||
@@ -58,9 +58,9 @@ pub fn subtree_derive(input: TokenStream) -> TokenStream {
|
||||
let num_items = idents_a.len();
|
||||
|
||||
let output = quote! {
|
||||
impl tree_hash::CachedTreeHash<#name> for #name {
|
||||
fn new_tree_hash_cache(&self, depth: usize) -> Result<tree_hash::TreeHashCache, tree_hash::Error> {
|
||||
let tree = tree_hash::TreeHashCache::from_leaves_and_subtrees(
|
||||
impl cached_tree_hash::CachedTreeHash<#name> for #name {
|
||||
fn new_tree_hash_cache(&self, depth: usize) -> Result<cached_tree_hash::TreeHashCache, cached_tree_hash::Error> {
|
||||
let tree = cached_tree_hash::TreeHashCache::from_leaves_and_subtrees(
|
||||
self,
|
||||
vec![
|
||||
#(
|
||||
@@ -74,23 +74,23 @@ pub fn subtree_derive(input: TokenStream) -> TokenStream {
|
||||
}
|
||||
|
||||
fn num_tree_hash_cache_chunks(&self) -> usize {
|
||||
tree_hash::BTreeOverlay::new(self, 0, 0)
|
||||
cached_tree_hash::BTreeOverlay::new(self, 0, 0)
|
||||
.and_then(|o| Ok(o.num_chunks()))
|
||||
.unwrap_or_else(|_| 1)
|
||||
}
|
||||
|
||||
fn tree_hash_cache_overlay(&self, chunk_offset: usize, depth: usize) -> Result<tree_hash::BTreeOverlay, tree_hash::Error> {
|
||||
fn tree_hash_cache_overlay(&self, chunk_offset: usize, depth: usize) -> Result<cached_tree_hash::BTreeOverlay, cached_tree_hash::Error> {
|
||||
let mut lengths = vec![];
|
||||
|
||||
#(
|
||||
lengths.push(self.#idents_b.num_tree_hash_cache_chunks());
|
||||
)*
|
||||
|
||||
tree_hash::BTreeOverlay::from_lengths(chunk_offset, #num_items, depth, lengths)
|
||||
cached_tree_hash::BTreeOverlay::from_lengths(chunk_offset, #num_items, depth, lengths)
|
||||
}
|
||||
|
||||
fn update_tree_hash_cache(&self, cache: &mut TreeHashCache) -> Result<(), Error> {
|
||||
let overlay = BTreeOverlay::new(self, cache.chunk_index, 0)?;
|
||||
fn update_tree_hash_cache(&self, cache: &mut cached_tree_hash::TreeHashCache) -> Result<(), cached_tree_hash::Error> {
|
||||
let overlay = cached_tree_hash::BTreeOverlay::new(self, cache.chunk_index, 0)?;
|
||||
|
||||
// Skip the chunk index to the first leaf node of this struct.
|
||||
cache.chunk_index = overlay.first_leaf_node();
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
use tree_hash::{CachedTreeHash, SignedRoot, TreeHash};
|
||||
use cached_tree_hash::{CachedTreeHash, CachedTreeHasher};
|
||||
use tree_hash::{SignedRoot, TreeHash};
|
||||
use tree_hash_derive::{CachedTreeHash, SignedRoot, TreeHash};
|
||||
|
||||
#[derive(Clone, Debug, TreeHash, CachedTreeHash)]
|
||||
@@ -13,18 +14,17 @@ fn test_standard_and_cached<T>(original: &T, modified: &T)
|
||||
where
|
||||
T: CachedTreeHash<T>,
|
||||
{
|
||||
let mut cache = original.new_tree_hash_cache().unwrap();
|
||||
// let mut cache = original.new_tree_hash_cache().unwrap();
|
||||
let mut hasher = CachedTreeHasher::new(original).unwrap();
|
||||
|
||||
let standard_root = original.tree_hash_root();
|
||||
let cached_root = cache.root().unwrap().to_vec();
|
||||
let cached_root = hasher.tree_hash_root().unwrap();
|
||||
assert_eq!(standard_root, cached_root);
|
||||
|
||||
// Test after a modification
|
||||
modified
|
||||
.update_tree_hash_cache(&original, &mut cache, 0)
|
||||
.unwrap();
|
||||
hasher.update(modified).unwrap();
|
||||
let standard_root = modified.tree_hash_root();
|
||||
let cached_root = cache.root().unwrap().to_vec();
|
||||
let cached_root = hasher.tree_hash_root().unwrap();
|
||||
assert_eq!(standard_root, cached_root);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user