mirror of
https://github.com/logos-blockchain/lssa.git
synced 2026-01-05 23:03:06 +00:00
fix: layered autobalancing
This commit is contained in:
parent
47ff7f0b64
commit
e1eff07478
@ -138,6 +138,22 @@ impl ChainIndex {
|
|||||||
|
|
||||||
cumulative_stack.into_iter().unique()
|
cumulative_stack.into_iter().unique()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn chain_ids_at_depth_rev(depth: usize) -> impl Iterator<Item = ChainIndex> {
|
||||||
|
let mut stack = vec![ChainIndex(vec![0; depth])];
|
||||||
|
let mut cumulative_stack = vec![ChainIndex(vec![0; depth])];
|
||||||
|
|
||||||
|
while let Some(id) = stack.pop() {
|
||||||
|
if let Some(collapsed_id) = id.collapse_back() {
|
||||||
|
for id in collapsed_id.shuffle_iter() {
|
||||||
|
stack.push(id.clone());
|
||||||
|
cumulative_stack.push(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cumulative_stack.into_iter().rev().unique()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|||||||
@ -126,8 +126,8 @@ impl<N: KeyNode> KeyTree<N> {
|
|||||||
let mut depth = 1;
|
let mut depth = 1;
|
||||||
|
|
||||||
'outer: loop {
|
'outer: loop {
|
||||||
for chain_id in ChainIndex::chain_ids_at_depth(depth) {
|
for chain_id in ChainIndex::chain_ids_at_depth_rev(depth) {
|
||||||
if self.key_map.get(&chain_id).is_none() {
|
if !self.key_map.contains_key(&chain_id) {
|
||||||
break 'outer chain_id;
|
break 'outer chain_id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -520,13 +520,13 @@ mod tests {
|
|||||||
|
|
||||||
let mut tree = KeyTreePublic::new(&seed_holder);
|
let mut tree = KeyTreePublic::new(&seed_holder);
|
||||||
|
|
||||||
|
for _ in 0..100 {
|
||||||
|
tree.generate_new_node_layered().unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
let next_slot = tree.find_next_slot_layered();
|
let next_slot = tree.find_next_slot_layered();
|
||||||
|
|
||||||
println!("NEXT SLOT {next_slot}");
|
assert_eq!(next_slot, ChainIndex::from_str("/0/0/2/1").unwrap());
|
||||||
|
|
||||||
let (acc_id, chain_id) = tree.generate_new_node_layered().unwrap();
|
|
||||||
|
|
||||||
println!("NEXT ACC {acc_id} at {chain_id}");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user