diff --git a/core/lib/dal/.sqlx/query-c988b8aa7708a4b76671a8454c3e9806a8cb4031f7c11c6890213d8693e7d385.json b/core/lib/dal/.sqlx/query-c988b8aa7708a4b76671a8454c3e9806a8cb4031f7c11c6890213d8693e7d385.json new file mode 100644 index 00000000000..c2d68b62c31 --- /dev/null +++ b/core/lib/dal/.sqlx/query-c988b8aa7708a4b76671a8454c3e9806a8cb4031f7c11c6890213d8693e7d385.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n (logs_bloom IS NOT NULL) AS \"logs_bloom_not_null!\"\n FROM\n miniblocks\n WHERE\n number = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "logs_bloom_not_null!", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + null + ] + }, + "hash": "c988b8aa7708a4b76671a8454c3e9806a8cb4031f7c11c6890213d8693e7d385" +} diff --git a/core/lib/dal/src/blocks_dal.rs b/core/lib/dal/src/blocks_dal.rs index 60956101a8c..1f4cc3b0b98 100644 --- a/core/lib/dal/src/blocks_dal.rs +++ b/core/lib/dal/src/blocks_dal.rs @@ -2356,6 +2356,25 @@ impl BlocksDal<'_, '_> { Ok(results.into_iter().map(L::from).collect()) } + pub async fn has_l2_block_bloom(&mut self, l2_block_number: L2BlockNumber) -> DalResult { + let row = sqlx::query!( + r#" + SELECT + (logs_bloom IS NOT NULL) AS "logs_bloom_not_null!" + FROM + miniblocks + WHERE + number = $1 + "#, + i64::from(l2_block_number.0), + ) + .instrument("has_l2_block_bloom") + .fetch_optional(self.storage) + .await?; + + Ok(row.map(|row| row.logs_bloom_not_null).unwrap_or(false)) + } + pub async fn has_last_l2_block_bloom(&mut self) -> DalResult { let row = sqlx::query!( r#" diff --git a/core/node/logs_bloom_backfill/src/lib.rs b/core/node/logs_bloom_backfill/src/lib.rs index 3dd52144212..4337c0b8dc9 100644 --- a/core/node/logs_bloom_backfill/src/lib.rs +++ b/core/node/logs_bloom_backfill/src/lib.rs @@ -57,6 +57,14 @@ impl LogsBloomBackfill { return Ok(()); // Stop signal received } + let genesis_block_has_bloom = connection + .blocks_dal() + .has_l2_block_bloom(L2BlockNumber(0)) + .await?; + if genesis_block_has_bloom { + return Ok(()); // Migration has already been completed. + } + let max_block_without_bloom = connection .blocks_dal() .get_max_l2_block_without_bloom()