example and neccessary fixes
This commit is contained in:
@@ -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
@@ -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
@@ -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> {
|
||||
|
||||
Reference in New Issue
Block a user