Updated on 2026-08-14

This commit is contained in:
Tangem 2026-01-17 15:15:04 +03:00
parent 52cc0be3cb
commit ba4e916cd0
17 changed files with 98 additions and 13 deletions

View file

@ -16,6 +16,8 @@ import com.tangem.domain.transaction.models.GaslessTransactionData
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext
import java.math.BigInteger
@ -26,6 +28,8 @@ class DefaultGaslessTransactionRepository(
) : GaslessTransactionRepository {
private val supportedTokensState = MutableStateFlow<Map<Network.ID, Set<CryptoCurrency>>>(hashMapOf())
private val allFeeRecipientAddress = mutableSetOf<String>()
private val addressesMutex = Mutex()
private val gaslessTransactionRequestBuilder = GaslessTransactionRequestBuilder()
private val signedTransactionResultConverter = GaslessSignedTransactionResultConverter()
@ -115,6 +119,21 @@ class DefaultGaslessTransactionRepository(
return networkBlockchain.getChainId() ?: error("ChainId not found for blockchain ${networkBlockchain.name}")
}
override suspend fun getGaslessFeeAddresses(): Set<String> {
return addressesMutex.withLock {
allFeeRecipientAddress.ifEmpty {
val allFeeAddresses = getAllFeeRecipientAddresses()
allFeeRecipientAddress.addAll(allFeeAddresses)
allFeeRecipientAddress
}
}
}
private suspend fun getAllFeeRecipientAddresses(): Set<String> {
// TODO Replace with other backend call to get all fee recipient addresses when available
return setOf(getTokenFeeReceiverAddress())
}
private companion object {
val BASE_GAS_FOR_TRANSACTION: BigInteger = BigInteger("100000")
}

View file

@ -34,6 +34,10 @@ class MockedGaslessTransactionRepository(
return networkBlockchain.getChainId() ?: error("ChainId not found for blockchain ${networkBlockchain.name}")
}
override suspend fun getGaslessFeeAddresses(): Set<String> {
return setOf("0x2bD8AA05a92CcDaeDE5d42EB7D196ed07F8F8EF3")
}
override suspend fun getTokenFeeReceiverAddress(): String {
return TOKEN_RECEIVER_ADDRESS
}