fix: restrict start block correctly (#2460)

This commit is contained in:
Matthias Seitz
2023-04-28 23:21:08 +02:00
committed by GitHub
parent eba1e885a4
commit b8b2772932
2 changed files with 50 additions and 2 deletions

View File

@@ -1,7 +1,7 @@
use crate::{BlockNumber, BlockNumberOrTag, H256};
/// Current status of the blockchain's head.
#[derive(Default, Debug, Eq, PartialEq)]
#[derive(Default, Clone, Debug, Eq, PartialEq)]
pub struct ChainInfo {
/// The block hash of the highest fully synced block.
pub best_hash: H256,

View File

@@ -83,7 +83,7 @@ pub(crate) fn get_filter_block_range(
// from block is maximum of block from last poll or `from_block` of filter
if let Some(filter_from_block) = from_block.and_then(|num| info.convert_block_number(num)) {
from_block_number = start_block.max(filter_from_block)
from_block_number = start_block.min(filter_from_block)
}
// to block is max the best number
@@ -95,3 +95,51 @@ pub(crate) fn get_filter_block_range(
}
(from_block_number, to_block_number)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_log_range_from_and_to() {
let from: BlockNumberOrTag = 14000000u64.into();
let to: BlockNumberOrTag = 14000100u64.into();
let info = ChainInfo { best_number: 15000000, ..Default::default() };
let range = get_filter_block_range(Some(from), Some(to), info.best_number, info);
assert_eq!(range, (from.as_number().unwrap(), to.as_number().unwrap()));
}
#[test]
fn test_log_range_higher() {
let from: BlockNumberOrTag = 15000001u64.into();
let to: BlockNumberOrTag = 15000002u64.into();
let info = ChainInfo { best_number: 15000000, ..Default::default() };
let range = get_filter_block_range(Some(from), Some(to), info.best_number, info.clone());
assert_eq!(range, (info.best_number, info.best_number));
}
#[test]
fn test_log_range_from() {
let from: BlockNumberOrTag = 14000000u64.into();
let info = ChainInfo { best_number: 15000000, ..Default::default() };
let range = get_filter_block_range(Some(from), None, info.best_number, info.clone());
assert_eq!(range, (from.as_number().unwrap(), info.best_number));
}
#[test]
fn test_log_range_to() {
let to: BlockNumberOrTag = 14000000u64.into();
let info = ChainInfo { best_number: 15000000, ..Default::default() };
let range = get_filter_block_range(None, Some(to), info.best_number, info.clone());
assert_eq!(range, (info.best_number, to.as_number().unwrap()));
}
#[test]
fn test_log_range_empty() {
let info = ChainInfo { best_number: 15000000, ..Default::default() };
let range = get_filter_block_range(None, None, info.best_number, info.clone());
// no range given -> head
assert_eq!(range, (info.best_number, info.best_number));
}
}