example and neccessary fixes

This commit is contained in:
NikVolf
2019-09-06 15:40:26 +03:00
parent 872ac5af7b
commit 6b36cb5a51
4 changed files with 241 additions and 12 deletions
+5
View File
@@ -45,12 +45,17 @@ pub enum EntryKind {
Node(EntryLink, EntryLink),
}
#[derive(Debug)]
pub struct Entry {
kind: EntryKind,
data: NodeData,
}
impl Entry {
pub fn update_siblings(&mut self, left: EntryLink, right: EntryLink) {
self.kind = EntryKind::Node(left, right);
}
pub fn complete(&self) -> bool {
let leaves = self.leaf_count();
leaves & (leaves - 1) == 0
+1 -1
View File
@@ -4,7 +4,7 @@ use blake2::blake2b::Blake2b;
/// Node metadata.
#[repr(C)]
#[derive(Debug)]
#[derive(Debug, Clone)]
pub struct NodeData {
pub consensus_branch_id: u32,
pub subtree_commitment: [u8; 32],
+16 -11
View File
@@ -88,23 +88,28 @@ impl Tree {
pub fn new(
length: u32,
stored: Vec<(u32, Entry)>,
generated: Vec<Entry>,
) -> Self {
peaks: Vec<(u32, Entry)>,
extra: Vec<(u32, Entry)>,
) -> (Self, EntryLink) {
let mut result = Tree::default();
result.stored_count = length;
for (idx, node) in stored.into_iter() {
let mut gen = 0;
let mut root = EntryLink::Stored(peaks[0].0);
for (idx, node) in peaks.into_iter() {
result.stored.insert(idx, node);
if gen != 0 {
let next_generated =
combine_nodes(result.
resolve_link(root).expect("Inserted before, cannot fail; qed"),
result.resolve_link(EntryLink::Stored(idx)).expect("Inserted before, cannot fail; qed")
);
root = result.push_generated(next_generated);
}
gen += 1;
}
result.generated_count = generated.len() as u32;
for (idx, node) in generated.into_iter().enumerate() {
result.generated.insert(idx as u32, node);
}
result
(result, root)
}
fn get_peaks(&self, root: EntryLink, target: &mut Vec<EntryLink>) -> Result<(), Error> {