Skip to content

Commit 7c49c60

Browse files
committed
use contract api as a fallback for decoding if signature based fails
1 parent f9bf58c commit 7c49c60

File tree

2 files changed

+53
-26
lines changed

2 files changed

+53
-26
lines changed

internal/handlers/logs_handlers.go

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -179,27 +179,41 @@ func handleLogsRequest(c *gin.Context) {
179179
api.InternalErrorHandler(c)
180180
return
181181
}
182-
if eventABI != nil {
183-
decodedLogs := []common.DecodedLogModel{}
184-
for _, log := range logsResult.Data {
185-
decodedLog := log.Decode(eventABI)
186-
decodedLogs = append(decodedLogs, decodedLog.Serialize())
187-
}
188-
queryResult.Data = decodedLogs
182+
183+
if decodedLogs := decodeLogsIfNeeded(chainId.String(), logsResult.Data, eventABI, config.Cfg.API.AbiDecodingEnabled && queryParams.Decode); decodedLogs != nil {
184+
queryResult.Data = serializeDecodedLogs(decodedLogs)
189185
} else {
190-
if config.Cfg.API.AbiDecodingEnabled && queryParams.Decode {
191-
decodedLogs := common.DecodeLogs(chainId.String(), logsResult.Data)
192-
queryResult.Data = serializeDecodedLogs(decodedLogs)
193-
} else {
194-
queryResult.Data = serializeLogs(logsResult.Data)
195-
}
186+
queryResult.Data = serializeLogs(logsResult.Data)
196187
}
188+
197189
queryResult.Meta.TotalItems = len(logsResult.Data)
198190
}
199191

200192
sendJSONResponse(c, queryResult)
201193
}
202194

195+
func decodeLogsIfNeeded(chainId string, logs []common.Log, eventABI *abi.Event, useContractService bool) []*common.DecodedLog {
196+
if eventABI != nil {
197+
decodingCompletelySuccessful := true
198+
decodedLogs := []*common.DecodedLog{}
199+
for _, log := range logs {
200+
decodedLog := log.Decode(eventABI)
201+
if decodedLog.Decoded.Name == "" || decodedLog.Decoded.Signature == "" {
202+
decodingCompletelySuccessful = false
203+
}
204+
decodedLogs = append(decodedLogs, decodedLog)
205+
}
206+
if !useContractService || decodingCompletelySuccessful {
207+
// decoding was successful or contract service decoding is disabled
208+
return decodedLogs
209+
}
210+
}
211+
if useContractService {
212+
return common.DecodeLogs(chainId, logs)
213+
}
214+
return nil
215+
}
216+
203217
func getMainStorage() (storage.IMainStorage, error) {
204218
storageOnce.Do(func() {
205219
var err error

internal/handlers/transactions_handlers.go

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -172,27 +172,40 @@ func handleTransactionsRequest(c *gin.Context) {
172172
api.InternalErrorHandler(c)
173173
return
174174
}
175-
if functionABI != nil {
176-
decodedTransactions := []common.DecodedTransactionModel{}
177-
for _, transaction := range transactionsResult.Data {
178-
decodedTransaction := transaction.Decode(functionABI)
179-
decodedTransactions = append(decodedTransactions, decodedTransaction.Serialize())
180-
}
181-
queryResult.Data = decodedTransactions
175+
176+
if decodedTxs := decodeTransactionsIfNeeded(chainId.String(), transactionsResult.Data, functionABI, config.Cfg.API.AbiDecodingEnabled && queryParams.Decode); decodedTxs != nil {
177+
queryResult.Data = serializeDecodedTransactions(decodedTxs)
182178
} else {
183-
if config.Cfg.API.AbiDecodingEnabled && queryParams.Decode {
184-
decodedTransactions := common.DecodeTransactions(chainId.String(), transactionsResult.Data)
185-
queryResult.Data = serializeDecodedTransactions(decodedTransactions)
186-
} else {
187-
queryResult.Data = serializeTransactions(transactionsResult.Data)
188-
}
179+
queryResult.Data = serializeTransactions(transactionsResult.Data)
189180
}
190181
queryResult.Meta.TotalItems = len(transactionsResult.Data)
191182
}
192183

193184
c.JSON(http.StatusOK, queryResult)
194185
}
195186

187+
func decodeTransactionsIfNeeded(chainId string, transactions []common.Transaction, functionABI *abi.Method, useContractService bool) []*common.DecodedTransaction {
188+
if functionABI != nil {
189+
decodingCompletelySuccessful := true
190+
decodedTransactions := []*common.DecodedTransaction{}
191+
for _, transaction := range transactions {
192+
decodedTransaction := transaction.Decode(functionABI)
193+
if decodedTransaction.Decoded.Name == "" || decodedTransaction.Decoded.Signature == "" {
194+
decodingCompletelySuccessful = false
195+
}
196+
decodedTransactions = append(decodedTransactions, decodedTransaction)
197+
}
198+
if !useContractService || decodingCompletelySuccessful {
199+
// decoding was successful or contract service decoding is disabled
200+
return decodedTransactions
201+
}
202+
}
203+
if useContractService {
204+
return common.DecodeTransactions(chainId, transactions)
205+
}
206+
return nil
207+
}
208+
196209
func serializeDecodedTransactions(transactions []*common.DecodedTransaction) []common.DecodedTransactionModel {
197210
decodedTransactionModels := make([]common.DecodedTransactionModel, len(transactions))
198211
for i, transaction := range transactions {

0 commit comments

Comments
 (0)