From 5c48dab8870e496609aef57da327cc0486b71275 Mon Sep 17 00:00:00 2001 From: erhant Date: Fri, 26 Jun 2026 21:08:06 +0300 Subject: [PATCH] feat(indexer): run genesis-consistency check at service and FFI startup --- lez/indexer/ffi/src/api/lifecycle.rs | 15 +++++++++++---- .../service/configs/debug/indexer_config.json | 3 ++- lez/indexer/service/src/lib.rs | 1 + lez/indexer/service/src/service.rs | 5 +++-- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/lez/indexer/ffi/src/api/lifecycle.rs b/lez/indexer/ffi/src/api/lifecycle.rs index f668f3ee..b9d5873b 100644 --- a/lez/indexer/ffi/src/api/lifecycle.rs +++ b/lez/indexer/ffi/src/api/lifecycle.rs @@ -112,10 +112,17 @@ unsafe fn setup_indexer( unsafe { Runtime::from_borrowed(caller.as_ref()) } }; - let core = IndexerCore::new(config, &storage_dir).map_err(|e| { - log::error!("Could not initialize indexer core: {e}"); - OperationStatus::InitializationError - })?; + let allow_reset = config.allow_chain_reset; + let core = runtime + .block_on(IndexerCore::new_with_genesis_check( + config, + &storage_dir, + allow_reset, + )) + .map_err(|e| { + log::error!("Could not initialize indexer core: {e}"); + OperationStatus::InitializationError + })?; // The block stream writes each parsed block into the store as a side effect // of being polled, so we spawn a task that simply drains it. There are no diff --git a/lez/indexer/service/configs/debug/indexer_config.json b/lez/indexer/service/configs/debug/indexer_config.json index 85227700..a87421da 100644 --- a/lez/indexer/service/configs/debug/indexer_config.json +++ b/lez/indexer/service/configs/debug/indexer_config.json @@ -3,5 +3,6 @@ "bedrock_config": { "addr": "http://localhost:18080" }, - "channel_id": "0101010101010101010101010101010101010101010101010101010101010101" + "channel_id": "0101010101010101010101010101010101010101010101010101010101010101", + "allow_chain_reset": false } diff --git a/lez/indexer/service/src/lib.rs b/lez/indexer/service/src/lib.rs index b1c57163..355d7801 100644 --- a/lez/indexer/service/src/lib.rs +++ b/lez/indexer/service/src/lib.rs @@ -87,6 +87,7 @@ pub async fn run_server( #[cfg(not(feature = "mock-responses"))] let handle = { let service = service::IndexerService::new(config, storage_dir) + .await .context("Failed to initialize indexer service")?; server.start(service.into_rpc()) }; diff --git a/lez/indexer/service/src/service.rs b/lez/indexer/service/src/service.rs index 7abab18f..7a0b3a87 100644 --- a/lez/indexer/service/src/service.rs +++ b/lez/indexer/service/src/service.rs @@ -19,8 +19,9 @@ pub struct IndexerService { } impl IndexerService { - pub fn new(config: IndexerConfig, storage_dir: &Path) -> Result { - let indexer = IndexerCore::new(config, storage_dir)?; + pub async fn new(config: IndexerConfig, storage_dir: &Path) -> Result { + let allow_reset = config.allow_chain_reset; + let indexer = IndexerCore::new_with_genesis_check(config, storage_dir, allow_reset).await?; let subscription_service = SubscriptionService::spawn_new(indexer.clone()); Ok(Self {