|
@ -498,3 +498,59 @@ fn test_set_node() -> Result<(), MerkleError> { |
|
|
|
|
|
|
|
|
Ok(())
|
|
|
Ok(())
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
|
fn test_constructors() -> Result<(), MerkleError> {
|
|
|
|
|
|
let store = MerkleStore::new().with_merkle_tree(LEAVES4)?;
|
|
|
|
|
|
let mtree = MerkleTree::new(LEAVES4.to_vec())?;
|
|
|
|
|
|
|
|
|
|
|
|
let depth = mtree.depth();
|
|
|
|
|
|
let leaves = 2u64.pow(depth.into());
|
|
|
|
|
|
for index in 0..leaves {
|
|
|
|
|
|
let index = NodeIndex::new(depth, index);
|
|
|
|
|
|
let value_path = store.get_path(mtree.root(), index)?;
|
|
|
|
|
|
assert_eq!(mtree.get_path(index)?, value_path.path);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let store = MerkleStore::default()
|
|
|
|
|
|
.with_sparse_merkle_tree(KEYS4.into_iter().zip(LEAVES4.into_iter()))?;
|
|
|
|
|
|
let smt = SimpleSmt::new(SimpleSmt::MAX_DEPTH)
|
|
|
|
|
|
.unwrap()
|
|
|
|
|
|
.with_leaves(KEYS4.into_iter().zip(LEAVES4.into_iter()))
|
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
let depth = smt.depth();
|
|
|
|
|
|
|
|
|
|
|
|
for key in KEYS4 {
|
|
|
|
|
|
let index = NodeIndex::new(depth, key);
|
|
|
|
|
|
let value_path = store.get_path(smt.root(), index)?;
|
|
|
|
|
|
assert_eq!(smt.get_path(index)?, value_path.path);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let d = 2;
|
|
|
|
|
|
let paths = [
|
|
|
|
|
|
(0, LEAVES4[0], mtree.get_path(NodeIndex::new(d, 0)).unwrap()),
|
|
|
|
|
|
(1, LEAVES4[1], mtree.get_path(NodeIndex::new(d, 1)).unwrap()),
|
|
|
|
|
|
(2, LEAVES4[2], mtree.get_path(NodeIndex::new(d, 2)).unwrap()),
|
|
|
|
|
|
(3, LEAVES4[3], mtree.get_path(NodeIndex::new(d, 3)).unwrap()),
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
let store1 = MerkleStore::default().with_merkle_paths(paths.clone())?;
|
|
|
|
|
|
let store2 = MerkleStore::default()
|
|
|
|
|
|
.with_merkle_path(0, LEAVES4[0], mtree.get_path(NodeIndex::new(d, 0))?)?
|
|
|
|
|
|
.with_merkle_path(1, LEAVES4[1], mtree.get_path(NodeIndex::new(d, 1))?)?
|
|
|
|
|
|
.with_merkle_path(2, LEAVES4[2], mtree.get_path(NodeIndex::new(d, 2))?)?
|
|
|
|
|
|
.with_merkle_path(3, LEAVES4[3], mtree.get_path(NodeIndex::new(d, 3))?)?;
|
|
|
|
|
|
let set = MerklePathSet::new(d + 1).with_paths(paths).unwrap();
|
|
|
|
|
|
|
|
|
|
|
|
for key in [0, 1, 2, 3] {
|
|
|
|
|
|
let index = NodeIndex::new(d, key);
|
|
|
|
|
|
let value_path1 = store1.get_path(set.root(), index)?;
|
|
|
|
|
|
let value_path2 = store2.get_path(set.root(), index)?;
|
|
|
|
|
|
assert_eq!(value_path1, value_path2);
|
|
|
|
|
|
|
|
|
|
|
|
let index = NodeIndex::new(d + 1, key);
|
|
|
|
|
|
assert_eq!(set.get_path(index)?, value_path1.path);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
|
}
|