From a92cf92a63c10a5d75cf6f423f5497014bcac66c Mon Sep 17 00:00:00 2001 From: 0xFirekeeper <0xFirekeeper@gmail.com> Date: Fri, 10 Apr 2026 22:10:08 +0700 Subject: [PATCH 1/2] Remove FINAL from ClickHouse queries Remove the FINAL clause from multiple SELECT queries in internal/libs/clickhouse.go. Affected functions: GetTransactionMismatchRangeFromClickHouseV2, GetLogsMismatchRangeFromClickHouseV2, getBlocksFromV2, getTransactionsFromV2, getLogsFromV2, and getTracesFromV2. Queries now read directly from the respective tables (blocks, transactions, logs, traces) without the FINAL modifier. --- internal/libs/clickhouse.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/libs/clickhouse.go b/internal/libs/clickhouse.go index 21c5fef..1c7cd0b 100644 --- a/internal/libs/clickhouse.go +++ b/internal/libs/clickhouse.go @@ -415,7 +415,7 @@ func GetTransactionMismatchRangeFromClickHouseV2(chainId uint64, startBlockNumbe // Aggregate transaction counts per block from the transactions table. query := fmt.Sprintf( - "SELECT block_number, count() AS tx_count FROM %s.transactions FINAL WHERE chain_id = %d AND block_number BETWEEN %d AND %d GROUP BY block_number ORDER BY block_number", + "SELECT block_number, count() AS tx_count FROM %s.transactions WHERE chain_id = %d AND block_number BETWEEN %d AND %d GROUP BY block_number ORDER BY block_number", config.Cfg.CommitterClickhouseDatabase, chainId, startBlockNumber, @@ -492,7 +492,7 @@ func GetLogsMismatchRangeFromClickHouseV2(chainId uint64, startBlockNumber uint6 // Aggregate log counts and max log_index per block from the logs table. query := fmt.Sprintf( - "SELECT block_number, count() AS log_count, max(log_index) AS max_log_index FROM %s.logs FINAL WHERE chain_id = %d AND block_number BETWEEN %d AND %d GROUP BY block_number ORDER BY block_number", + "SELECT block_number, count() AS log_count, max(log_index) AS max_log_index FROM %s.logs WHERE chain_id = %d AND block_number BETWEEN %d AND %d GROUP BY block_number ORDER BY block_number", config.Cfg.CommitterClickhouseDatabase, chainId, startBlockNumber, @@ -560,7 +560,7 @@ func getBlocksFromV2(chainId uint64, startBlockNumber uint64, endBlockNumber uin length := endBlockNumber - startBlockNumber + 1 blocksRaw := make([]common.Block, length) - query := fmt.Sprintf("SELECT %s FROM %s.blocks FINAL WHERE chain_id = %d AND block_number BETWEEN %d AND %d order by block_number", + query := fmt.Sprintf("SELECT %s FROM %s.blocks WHERE chain_id = %d AND block_number BETWEEN %d AND %d order by block_number", strings.Join(defaultBlockFields, ", "), config.Cfg.CommitterClickhouseDatabase, chainId, @@ -589,7 +589,7 @@ func getTransactionsFromV2(chainId uint64, startBlockNumber uint64, endBlockNumb length := endBlockNumber - startBlockNumber + 1 transactionsRaw := make([][]common.Transaction, length) - query := fmt.Sprintf("SELECT %s FROM %s.transactions FINAL WHERE chain_id = %d AND block_number BETWEEN %d AND %d order by block_number, transaction_index", + query := fmt.Sprintf("SELECT %s FROM %s.transactions WHERE chain_id = %d AND block_number BETWEEN %d AND %d order by block_number, transaction_index", strings.Join(defaultTransactionFields, ", "), config.Cfg.CommitterClickhouseDatabase, chainId, @@ -618,7 +618,7 @@ func getLogsFromV2(chainId uint64, startBlockNumber uint64, endBlockNumber uint6 length := endBlockNumber - startBlockNumber + 1 logsRaw := make([][]common.Log, length) - query := fmt.Sprintf("SELECT %s FROM %s.logs FINAL WHERE chain_id = %d AND block_number BETWEEN %d AND %d order by block_number, log_index", + query := fmt.Sprintf("SELECT %s FROM %s.logs WHERE chain_id = %d AND block_number BETWEEN %d AND %d order by block_number, log_index", strings.Join(defaultLogFields, ", "), config.Cfg.CommitterClickhouseDatabase, chainId, @@ -647,7 +647,7 @@ func getTracesFromV2(chainId uint64, startBlockNumber uint64, endBlockNumber uin length := endBlockNumber - startBlockNumber + 1 tracesRaw := make([][]common.Trace, length) - query := fmt.Sprintf("SELECT %s FROM %s.traces FINAL WHERE chain_id = %d AND block_number BETWEEN %d AND %d order by block_number", + query := fmt.Sprintf("SELECT %s FROM %s.traces WHERE chain_id = %d AND block_number BETWEEN %d AND %d order by block_number", strings.Join(defaultTraceFields, ", "), config.Cfg.CommitterClickhouseDatabase, chainId, From d227598504161738446765a1534579aab93cf53a Mon Sep 17 00:00:00 2001 From: 0xFirekeeper <0xFirekeeper@gmail.com> Date: Fri, 10 Apr 2026 22:20:41 +0700 Subject: [PATCH 2/2] Remove FINAL from ClickHouse SELECT queries internal/libs/clickhouse.go: remove the FINAL clause from SELECT queries in queryBlocksByBlockNumbers, queryTransactionsByBlockNumbers, queryLogsByBlockNumbers and queryTracesByBlockNumbers. The change drops "FINAL" from queries against blocks, transactions, logs and traces tables (keeps same ordering and fields). This avoids using ClickHouse's FINAL merge behavior in these lookups, simplifying the queries and addressing related performance/consistency concerns. --- internal/libs/clickhouse.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/libs/clickhouse.go b/internal/libs/clickhouse.go index 1c7cd0b..1e1aab8 100644 --- a/internal/libs/clickhouse.go +++ b/internal/libs/clickhouse.go @@ -269,7 +269,7 @@ func queryBlocksByBlockNumbers(chainId uint64, nums []uint64) ([]common.Block, e return nil, nil } q := fmt.Sprintf( - "SELECT %s FROM %s.blocks FINAL WHERE chain_id = %d AND block_number IN (%s) ORDER BY block_number", + "SELECT %s FROM %s.blocks WHERE chain_id = %d AND block_number IN (%s) ORDER BY block_number", strings.Join(defaultBlockFields, ", "), config.Cfg.CommitterClickhouseDatabase, chainId, @@ -283,7 +283,7 @@ func queryTransactionsByBlockNumbers(chainId uint64, nums []uint64) ([]common.Tr return nil, nil } q := fmt.Sprintf( - "SELECT %s FROM %s.transactions FINAL WHERE chain_id = %d AND block_number IN (%s) ORDER BY block_number, transaction_index", + "SELECT %s FROM %s.transactions WHERE chain_id = %d AND block_number IN (%s) ORDER BY block_number, transaction_index", strings.Join(defaultTransactionFields, ", "), config.Cfg.CommitterClickhouseDatabase, chainId, @@ -297,7 +297,7 @@ func queryLogsByBlockNumbers(chainId uint64, nums []uint64) ([]common.Log, error return nil, nil } q := fmt.Sprintf( - "SELECT %s FROM %s.logs FINAL WHERE chain_id = %d AND block_number IN (%s) ORDER BY block_number, log_index", + "SELECT %s FROM %s.logs WHERE chain_id = %d AND block_number IN (%s) ORDER BY block_number, log_index", strings.Join(defaultLogFields, ", "), config.Cfg.CommitterClickhouseDatabase, chainId, @@ -311,7 +311,7 @@ func queryTracesByBlockNumbers(chainId uint64, nums []uint64) ([]common.Trace, e return nil, nil } q := fmt.Sprintf( - "SELECT %s FROM %s.traces FINAL WHERE chain_id = %d AND block_number IN (%s) ORDER BY block_number, transaction_index", + "SELECT %s FROM %s.traces WHERE chain_id = %d AND block_number IN (%s) ORDER BY block_number, transaction_index", strings.Join(defaultTraceFields, ", "), config.Cfg.CommitterClickhouseDatabase, chainId,