diff --git a/src/api/sync.rs b/src/api/sync.rs index fba8de1..4c18033 100644 --- a/src/api/sync.rs +++ b/src/api/sync.rs @@ -138,7 +138,7 @@ async fn fetch_and_store_tree_state( .get_tree_state(Request::new(block_id)) .await? .into_inner(); - let tree = CTree::read(&*hex::decode(&tree_state.sapling_tree)?)?; + let tree = CTree::read(&*hex::decode(&tree_state.sapling_tree)?)?; // retrieve orchard state and store it too let db = c.db()?; DbAdapter::store_block(&db.connection, height, &block.hash, block.time, &tree, None)?; Ok(()) diff --git a/src/chain.rs b/src/chain.rs index eabc5dd..4353314 100644 --- a/src/chain.rs +++ b/src/chain.rs @@ -543,54 +543,6 @@ fn calculate_tree_state_v1( witnesses } -#[allow(dead_code)] -fn calculate_tree_state_v2(cbs: &[CompactBlock], blocks: &[DecryptedBlock]) -> Vec { - let mut p = 0usize; - let mut nodes: Vec = vec![]; - let mut positions: Vec = vec![]; - - let start = Instant::now(); - for (cb, block) in cbs.iter().zip(blocks) { - assert_eq!(cb.height as u32, block.height); - if !block.notes.is_empty() { - println!("{} {}", block.height, block.notes.len()); - } - let mut notes = block.notes.iter(); - let mut n = notes.next(); - let mut i = 0usize; - for tx in cb.vtx.iter() { - for co in tx.outputs.iter() { - let mut cmu = [0u8; 32]; - cmu.copy_from_slice(&co.cmu); - let node = Node::new(cmu); - nodes.push(node); - - if let Some(nn) = n { - if i == nn.position_in_block { - positions.push(p); - n = notes.next(); - } - } - i += 1; - p += 1; - } - } - } - info!( - "Build CMU list: {} ms - {} nodes", - start.elapsed().as_millis(), - nodes.len() - ); - - let witnesses: Vec<_> = positions - .iter() - .map(|p| Witness::new(*p, 0, None)) - .collect(); - let (_, new_witnesses) = advance_tree(&CTree::new(), &witnesses, &mut nodes, true); - info!("Tree State & Witnesses: {} ms", start.elapsed().as_millis()); - new_witnesses -} - /// Connect to a lightwalletd server pub async fn connect_lightwalletd(url: &str) -> anyhow::Result> { log::info!("LWD URL: {}", url); diff --git a/src/db.rs b/src/db.rs index 1c597e0..5e476c6 100644 --- a/src/db.rs +++ b/src/db.rs @@ -500,10 +500,10 @@ impl DbAdapter { } pub fn get_tree(&self) -> anyhow::Result<(TreeCheckpoint, TreeCheckpoint)> { - self.get_tree_by_name("sapling"); + self.get_tree_by_name("sapling"); // TODO: pack in TreeCheckpoint } - pub fn get_tree_by_name(&self, shielded_pool: &str) -> anyhow::Result<(TreeCheckpoint)> { + pub fn get_tree_by_name(&self, shielded_pool: &str) -> anyhow::Result { let res = self.connection.query_row( &format!("SELECT height, {}_tree FROM blocks WHERE height = (SELECT MAX(height) FROM blocks)", shielded_pool), [], |row| { diff --git a/src/scan.rs b/src/scan.rs index 4bf2e01..e2fe1ac 100644 --- a/src/scan.rs +++ b/src/scan.rs @@ -143,6 +143,15 @@ pub async fn sync_async( } progress.downloaded += blocks_size; let (mut sapling_checkpoint, mut orchard_checkpoint) = db.get_tree()?; + /* TODO + - Change to WarpProcessors & Trial Decryptors - sapling & orchard + - Feed block into WP sapling + - Check height vs orchard activation height -> Feed block into WP orchard + - Refactor into function + - Remove new_idtx + + */ + let mut bp = BlockProcessor::new(&tree, &witnesses); let mut absolute_position_at_block_start = tree.get_position();