@@ -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+
196209func serializeDecodedTransactions (transactions []* common.DecodedTransaction ) []common.DecodedTransactionModel {
197210 decodedTransactionModels := make ([]common.DecodedTransactionModel , len (transactions ))
198211 for i , transaction := range transactions {
0 commit comments