Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 26 additions & 15 deletions pepper-sync/src/scan/task.rs
Original file line number Diff line number Diff line change
Expand Up @@ -355,10 +355,14 @@ where
scan_task.scan_range.priority() == ScanPriority::ScannedWithoutMapping;

let mut retry_height = scan_task.scan_range.block_range().start;
let mut sapling_output_count = 0;
let mut orchard_output_count = 0;
let mut sapling_nullifier_count = 0;
let mut orchard_nullifier_count = 0;
let mut batch_sapling_output_count = 0;
let mut batch_orchard_output_count = 0;
let mut batch_sapling_nullifier_count = 0;
let mut batch_orchard_nullifier_count = 0;
let mut current_block_sapling_output_count = 0;
let mut current_block_orchard_output_count = 0;
let mut current_block_sapling_nullifier_count = 0;
let mut current_block_orchard_nullifier_count = 0;
let mut first_batch = true;

let mut block_stream = {
Expand Down Expand Up @@ -454,14 +458,16 @@ where
};

if fetch_nullifiers_only {
sapling_nullifier_count += compact_block
current_block_sapling_nullifier_count = compact_block
.vtx
.iter()
.fold(0, |acc, transaction| acc + transaction.spends.len());
orchard_nullifier_count += compact_block
batch_sapling_nullifier_count += current_block_sapling_nullifier_count;
current_block_orchard_nullifier_count = compact_block
.vtx
.iter()
.fold(0, |acc, transaction| acc + transaction.actions.len());
batch_orchard_nullifier_count += current_block_orchard_nullifier_count;
} else {
if let Some(block) = previous_task_last_block.as_ref()
&& scan_task.start_seam_block.is_none()
Expand Down Expand Up @@ -499,18 +505,23 @@ where
);
}

sapling_output_count += compact_block
current_block_sapling_output_count = compact_block
.vtx
.iter()
.fold(0, |acc, transaction| acc + transaction.outputs.len());
orchard_output_count += compact_block
batch_sapling_output_count += current_block_sapling_output_count;
current_block_orchard_output_count = compact_block
.vtx
.iter()
.fold(0, |acc, transaction| acc + transaction.actions.len());
batch_orchard_output_count += current_block_orchard_output_count;
}

if sapling_output_count + orchard_output_count > max_batch_outputs
|| sapling_nullifier_count + orchard_nullifier_count > MAX_BATCH_NULLIFIERS
if (batch_sapling_output_count + batch_orchard_output_count > max_batch_outputs
|| batch_sapling_nullifier_count + batch_orchard_nullifier_count
> MAX_BATCH_NULLIFIERS)
&& scan_task.scan_range.block_range().start
!= get_compact_block_height(&compact_block)
{
let (full_batch, new_batch) = scan_task
.clone()
Expand All @@ -524,10 +535,10 @@ where
let _ignore_error = batch_sender.send(full_batch).await;

scan_task = new_batch;
sapling_output_count = 0;
orchard_output_count = 0;
sapling_nullifier_count = 0;
orchard_nullifier_count = 0;
batch_sapling_output_count = current_block_sapling_output_count;
batch_orchard_output_count = current_block_orchard_output_count;
batch_sapling_nullifier_count = current_block_sapling_nullifier_count;
batch_orchard_nullifier_count = current_block_orchard_nullifier_count;
}

retry_height = get_compact_block_height(&compact_block) + 1;
Expand Down Expand Up @@ -777,7 +788,7 @@ impl ScanTask {
block_height: BlockHeight,
) -> Result<(Self, Self), ServerError> {
if block_height < self.scan_range.block_range().start
&& block_height > self.scan_range.block_range().end - 1
|| block_height > self.scan_range.block_range().end - 1
{
panic!("block height should be within scan tasks block range!");
}
Expand Down
Loading