diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/gasless/models/GaslessTransactionRequest.kt b/core/datasource/src/main/java/com/tangem/datasource/api/gasless/models/GaslessTransactionRequest.kt index 948567af63..034bb21097 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/gasless/models/GaslessTransactionRequest.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/gasless/models/GaslessTransactionRequest.kt @@ -65,6 +65,9 @@ data class FeeData( @Json(name = "baseGas") val baseGas: String, + + @Json(name = "feeReceiver") + val feeReceiver: String, ) /** diff --git a/data/transaction/src/main/java/com/tangem/data/transaction/DefaultGaslessTransactionRepository.kt b/data/transaction/src/main/java/com/tangem/data/transaction/DefaultGaslessTransactionRepository.kt index b4d16fbe7e..e094b97d9d 100644 --- a/data/transaction/src/main/java/com/tangem/data/transaction/DefaultGaslessTransactionRepository.kt +++ b/data/transaction/src/main/java/com/tangem/data/transaction/DefaultGaslessTransactionRepository.kt @@ -32,6 +32,7 @@ class DefaultGaslessTransactionRepository( private val supportedTokensState = MutableStateFlow>>(hashMapOf()) private val allFeeRecipientAddress = mutableSetOf() private val addressesMutex = Mutex() + private var feeReceiverAddress: String? = null private val gaslessTransactionRequestBuilder = GaslessTransactionRequestBuilder() private val signedTransactionResultConverter = GaslessSignedTransactionResultConverter() @@ -77,11 +78,18 @@ class DefaultGaslessTransactionRepository( override suspend fun getTokenFeeReceiverAddress(): String { return withContext(coroutineDispatcherProvider.io) { - val response = gaslessTxServiceApi.getFeeRecipient().getOrThrow() - if (response.isSuccess) { - response.result.address - } else { - error("Gasless service returned unsuccessful response") + addressesMutex.withLock { + val feeReceiver = feeReceiverAddress + if (feeReceiver != null) { + return@withContext feeReceiver + } + val response = gaslessTxServiceApi.getFeeRecipient().getOrThrow() + if (response.isSuccess) { + feeReceiverAddress = response.result.address + response.result.address + } else { + error("Gasless service returned unsuccessful response") + } } } } diff --git a/data/transaction/src/main/java/com/tangem/data/transaction/convertes/GaslessTxDataToGaslessRequestConverter.kt b/data/transaction/src/main/java/com/tangem/data/transaction/convertes/GaslessTxDataToGaslessRequestConverter.kt index 1d20602465..925d10460a 100644 --- a/data/transaction/src/main/java/com/tangem/data/transaction/convertes/GaslessTxDataToGaslessRequestConverter.kt +++ b/data/transaction/src/main/java/com/tangem/data/transaction/convertes/GaslessTxDataToGaslessRequestConverter.kt @@ -39,6 +39,7 @@ class GaslessTxDataToGaslessRequestConverter : Converter