@@ -339,7 +339,7 @@ func (c *ClickHouseConnector) GetBlocks(qf QueryFilter) (blocks []common.Block,
339339}
340340
341341func (c * ClickHouseConnector ) GetTransactions (qf QueryFilter ) (QueryResult [common.Transaction ], error ) {
342- columns := "chain_id, hash, nonce, block_hash, block_number, block_timestamp, transaction_index, from_address, to_address, value, gas, gas_price, data, max_fee_per_gas, max_priority_fee_per_gas, transaction_type, r, s, v, access_list"
342+ columns := "chain_id, hash, nonce, block_hash, block_number, block_timestamp, transaction_index, from_address, to_address, value, gas, gas_price, data, function_selector, max_fee_per_gas, max_priority_fee_per_gas, transaction_type, r, s, v, access_list"
343343 return executeQuery [common.Transaction ](c , "transactions" , columns , qf , scanTransaction )
344344}
345345
@@ -359,7 +359,7 @@ func (c *ClickHouseConnector) GetAggregations(table string, qf QueryFilter) (Que
359359 }
360360 query = addContractAddress (table , query , qf .ContractAddress )
361361 if qf .Signature != "" {
362- query += fmt . Sprintf ( " AND topic_0 = '%s'" , qf .Signature )
362+ query = addSignatureClause ( table , query , qf .Signature )
363363 }
364364 for key , value := range qf .FilterParams {
365365 query = addFilterParams (key , strings .ToLower (value ), query )
@@ -452,7 +452,7 @@ func (c *ClickHouseConnector) buildQuery(table, columns string, qf QueryFilter)
452452
453453 // Add signature clause
454454 if qf .Signature != "" {
455- query += fmt . Sprintf ( " AND topic_0 = '%s'" , qf .Signature )
455+ query = addSignatureClause ( table , query , qf .Signature )
456456 }
457457 // Add filter params
458458 for key , value := range qf .FilterParams {
@@ -516,6 +516,15 @@ func addContractAddress(table, query string, contractAddress string) string {
516516 return query
517517}
518518
519+ func addSignatureClause (table , query , signature string ) string {
520+ if table == "logs" {
521+ query += fmt .Sprintf (" AND topic_0 = '%s'" , signature )
522+ } else if table == "transactions" {
523+ query += fmt .Sprintf (" AND function_selector = '%s'" , signature )
524+ }
525+ return query
526+ }
527+
519528func getTopicValueFormat (topic string ) string {
520529 if topic == "" {
521530 // if there is no indexed topic, indexer stores an empty string
@@ -545,6 +554,7 @@ func scanTransaction(rows driver.Rows) (common.Transaction, error) {
545554 & tx .Gas ,
546555 & tx .GasPrice ,
547556 & tx .Data ,
557+ & tx .FunctionSelector ,
548558 & tx .MaxFeePerGas ,
549559 & tx .MaxPriorityFeePerGas ,
550560 & tx .TransactionType ,
0 commit comments