Add configuration which can force sync from start_block_number (#183)

* queyr logs via LogQuery in wath loop
This commit is contained in:
Joel Liu 2024-09-08 08:34:59 +08:00 committed by GitHub
parent 29fcc415a6
commit 43c2d5f788
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 17 additions and 2 deletions

View File

@ -32,6 +32,8 @@ pub struct LogSyncConfig {
pub remove_finalized_block_interval_minutes: u64, pub remove_finalized_block_interval_minutes: u64,
// watch_loop (eth_getLogs) trigger interval // watch_loop (eth_getLogs) trigger interval
pub watch_loop_wait_time_ms: u64, pub watch_loop_wait_time_ms: u64,
// force to sync log from start block number
pub force_log_sync_from_start_block_number: bool,
} }
#[derive(Clone)] #[derive(Clone)]
@ -58,6 +60,7 @@ impl LogSyncConfig {
default_finalized_block_count: u64, default_finalized_block_count: u64,
remove_finalized_block_interval_minutes: u64, remove_finalized_block_interval_minutes: u64,
watch_loop_wait_time_ms: u64, watch_loop_wait_time_ms: u64,
force_log_sync_from_start_block_number: bool,
) -> Self { ) -> Self {
Self { Self {
rpc_endpoint_url, rpc_endpoint_url,
@ -73,6 +76,7 @@ impl LogSyncConfig {
default_finalized_block_count, default_finalized_block_count,
remove_finalized_block_interval_minutes, remove_finalized_block_interval_minutes,
watch_loop_wait_time_ms, watch_loop_wait_time_ms,
force_log_sync_from_start_block_number,
} }
} }
} }

View File

@ -5,7 +5,7 @@ use anyhow::{anyhow, bail, Result};
use ethereum_types::H256; use ethereum_types::H256;
use ethers::{prelude::Middleware, types::BlockNumber}; use ethers::{prelude::Middleware, types::BlockNumber};
use futures::FutureExt; use futures::FutureExt;
use jsonrpsee::tracing::{debug, error, trace, warn}; use jsonrpsee::tracing::{debug, error, warn};
use shared_types::{ChunkArray, Transaction}; use shared_types::{ChunkArray, Transaction};
use std::collections::BTreeMap; use std::collections::BTreeMap;
use std::fmt::Debug; use std::fmt::Debug;
@ -305,7 +305,7 @@ impl LogSyncManager {
}; };
while let Some(data) = rx.recv().await { while let Some(data) = rx.recv().await {
trace!("handle_data: data={:?}", data); debug!("handle_data: data={:?}", data);
match data { match data {
LogFetchProgress::SyncedBlock(( LogFetchProgress::SyncedBlock((
block_number, block_number,
@ -472,6 +472,15 @@ impl LogSyncManager {
async fn get_start_block_number_with_hash( async fn get_start_block_number_with_hash(
log_sync_manager: &LogSyncManager, log_sync_manager: &LogSyncManager,
) -> Result<(u64, H256), anyhow::Error> { ) -> Result<(u64, H256), anyhow::Error> {
if log_sync_manager
.config
.force_log_sync_from_start_block_number
{
let block_number = log_sync_manager.config.start_block_number;
let block_hash = log_sync_manager.get_block(block_number.into()).await?.1;
return Ok((block_number, block_hash));
}
if let Some(block_number) = log_sync_manager.store.get_log_latest_block_number()? { if let Some(block_number) = log_sync_manager.store.get_log_latest_block_number()? {
if let Some(Some(val)) = log_sync_manager if let Some(Some(val)) = log_sync_manager
.block_hash_cache .block_hash_cache

View File

@ -156,6 +156,7 @@ impl ZgsConfig {
self.default_finalized_block_count, self.default_finalized_block_count,
self.remove_finalized_block_interval_minutes, self.remove_finalized_block_interval_minutes,
self.watch_loop_wait_time_ms, self.watch_loop_wait_time_ms,
self.force_log_sync_from_start_block_number,
)) ))
} }

View File

@ -33,6 +33,7 @@ build_config! {
(blockchain_rpc_endpoint, (String), "http://127.0.0.1:8545".to_string()) (blockchain_rpc_endpoint, (String), "http://127.0.0.1:8545".to_string())
(log_contract_address, (String), "".to_string()) (log_contract_address, (String), "".to_string())
(log_sync_start_block_number, (u64), 0) (log_sync_start_block_number, (u64), 0)
(force_log_sync_from_start_block_number, (bool), false)
(confirmation_block_count, (u64), 3) (confirmation_block_count, (u64), 3)
(log_page_size, (u64), 999) (log_page_size, (u64), 999)
(max_cache_data_size, (usize), 100 * 1024 * 1024) // 100 MB (max_cache_data_size, (usize), 100 * 1024 * 1024) // 100 MB