Updated on 2026-08-14

This commit is contained in:
Tangem 2023-02-13 16:31:30 +03:00
parent c27049f0ea
commit 865bf08157
10 changed files with 37 additions and 28 deletions

View file

@ -97,6 +97,7 @@ internal class ConfigManagerImpl @Inject constructor() : ConfigManager {
shopify = configValues.shopifyShop,
zendesk = configValues.zendesk,
saltPayConfig = configValues.saltPay,
swapReferrerAccount = configValues.swapReferrerAccount,
)
}
}

View file

@ -18,4 +18,5 @@ data class Config(
val shopify: ShopifyShop? = null,
val zendesk: ZendeskConfig? = null,
val saltPayConfig: SaltPayConfig? = null,
val swapReferrerAccount: SwapReferrerAccount? = null,
)

View file

@ -34,6 +34,7 @@ class ConfigValueModel(
val saltPay: SaltPayConfig,
val tronGridApiKey: String,
val amplitudeApiKey: String,
val swapReferrerAccount: SwapReferrerAccount?,
)
data class AppsFlyer(
@ -41,6 +42,11 @@ data class AppsFlyer(
val appsFlyerAppID: String,
)
data class SwapReferrerAccount(
val address: String,
val fee: String,
)
class ConfigModel(
val features: FeatureModel?,
val configValues: ConfigValueModel?,

View file

@ -5,6 +5,7 @@ import com.tangem.datasource.api.oneinch.OneInchApiFactory
import com.tangem.datasource.api.oneinch.OneInchErrorsHandler
import com.tangem.datasource.api.oneinch.errors.OneIncResponseException
import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.datasource.config.ConfigManager
import com.tangem.feature.swap.converters.ApproveConverter
import com.tangem.feature.swap.converters.QuotesConverter
import com.tangem.feature.swap.converters.SwapConverter
@ -20,18 +21,19 @@ import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.withContext
import javax.inject.Inject
@Suppress("LongParameterList")
internal class SwapRepositoryImpl @Inject constructor(
private val tangemTechApi: TangemTechApi,
private val oneInchApiFactory: OneInchApiFactory,
private val tokensConverter: TokensConverter,
private val quotesConverter: QuotesConverter,
private val swapConverter: SwapConverter,
private val approveConverter: ApproveConverter,
private val oneInchErrorsHandler: OneInchErrorsHandler,
private val coroutineDispatcher: CoroutineDispatcherProvider,
private val configManager: ConfigManager,
) : SwapRepository {
private val tokensConverter = TokensConverter()
private val quotesConverter = QuotesConverter()
private val swapConverter = SwapConverter()
private val approveConverter = ApproveConverter()
override suspend fun getRates(currencyId: String, tokenIds: List<String>): Map<String, Double> {
return withContext(coroutineDispatcher.io) {
tangemTechApi.getRates(currencyId.lowercase(), tokenIds.joinToString(",")).rates
@ -115,6 +117,8 @@ internal class SwapRepositoryImpl @Inject constructor(
amount = amount,
fromAddress = fromWalletAddress,
slippage = slippage,
referrerAddress = configManager.config.swapReferrerAccount?.address,
fee = configManager.config.swapReferrerAccount?.fee,
),
)
@ -125,6 +129,10 @@ internal class SwapRepositoryImpl @Inject constructor(
}
}
override fun getTangemFee(): Double {
return configManager.config.swapReferrerAccount?.fee?.toDoubleOrNull() ?: 0.0
}
private fun getOneInchApi(networkId: String): OneInchApi {
return oneInchApiFactory.getApi(networkId)
}

View file

@ -3,9 +3,8 @@ package com.tangem.feature.swap.converters
import com.tangem.datasource.api.oneinch.models.ApproveCalldataResponse
import com.tangem.feature.swap.domain.models.domain.ApproveModel
import com.tangem.utils.converter.Converter
import javax.inject.Inject
class ApproveConverter @Inject constructor() : Converter<ApproveCalldataResponse, ApproveModel> {
class ApproveConverter : Converter<ApproveCalldataResponse, ApproveModel> {
override fun convert(value: ApproveCalldataResponse): ApproveModel {
return ApproveModel(

View file

@ -1,12 +1,11 @@
package com.tangem.feature.swap.converters
import com.tangem.datasource.api.oneinch.models.QuoteResponse
import com.tangem.feature.swap.domain.models.domain.QuoteModel
import com.tangem.feature.swap.domain.models.createFromAmountWithOffset
import com.tangem.feature.swap.domain.models.domain.QuoteModel
import com.tangem.utils.converter.Converter
import javax.inject.Inject
class QuotesConverter @Inject constructor() : Converter<QuoteResponse, QuoteModel> {
class QuotesConverter : Converter<QuoteResponse, QuoteModel> {
override fun convert(value: QuoteResponse): QuoteModel {
return QuoteModel(

View file

@ -2,13 +2,12 @@ package com.tangem.feature.swap.converters
import com.tangem.datasource.api.oneinch.models.SwapResponse
import com.tangem.datasource.api.oneinch.models.TransactionDto
import com.tangem.feature.swap.domain.models.createFromAmountWithOffset
import com.tangem.feature.swap.domain.models.domain.SwapDataModel
import com.tangem.feature.swap.domain.models.domain.TransactionModel
import com.tangem.feature.swap.domain.models.createFromAmountWithOffset
import com.tangem.utils.converter.Converter
import javax.inject.Inject
class SwapConverter @Inject constructor() : Converter<SwapResponse, SwapDataModel> {
class SwapConverter : Converter<SwapResponse, SwapDataModel> {
override fun convert(value: SwapResponse): SwapDataModel {
return SwapDataModel(

View file

@ -3,9 +3,8 @@ package com.tangem.feature.swap.converters
import com.tangem.datasource.api.tangemTech.models.CoinsResponse
import com.tangem.feature.swap.domain.models.domain.Currency
import com.tangem.utils.converter.Converter
import javax.inject.Inject
class TokensConverter @Inject constructor() : Converter<CoinsResponse.Coin, Currency> {
class TokensConverter : Converter<CoinsResponse.Coin, Currency> {
override fun convert(value: CoinsResponse.Coin): Currency {
val network = value.networks.first()

View file

@ -3,11 +3,8 @@ package com.tangem.feature.swap.di
import com.tangem.datasource.api.oneinch.OneInchApiFactory
import com.tangem.datasource.api.oneinch.OneInchErrorsHandler
import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.datasource.config.ConfigManager
import com.tangem.feature.swap.SwapRepositoryImpl
import com.tangem.feature.swap.converters.ApproveConverter
import com.tangem.feature.swap.converters.QuotesConverter
import com.tangem.feature.swap.converters.SwapConverter
import com.tangem.feature.swap.converters.TokensConverter
import com.tangem.feature.swap.domain.SwapRepository
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import dagger.Module
@ -25,22 +22,16 @@ class SwapDataModule {
fun provideSwapRepository(
tangemTechApi: TangemTechApi,
oneInchApiFactory: OneInchApiFactory,
tokensConverter: TokensConverter,
quotesConverter: QuotesConverter,
swapConverter: SwapConverter,
approveConverter: ApproveConverter,
oneInchErrorsHandler: OneInchErrorsHandler,
coroutineDispatcher: CoroutineDispatcherProvider,
configManager: ConfigManager,
): SwapRepository {
return SwapRepositoryImpl(
tangemTechApi = tangemTechApi,
oneInchApiFactory = oneInchApiFactory,
tokensConverter = tokensConverter,
quotesConverter = quotesConverter,
swapConverter = swapConverter,
approveConverter = approveConverter,
oneInchErrorsHandler = oneInchErrorsHandler,
coroutineDispatcher = coroutineDispatcher,
configManager = configManager,
)
}
}

View file

@ -1,10 +1,10 @@
package com.tangem.feature.swap.domain
import com.tangem.feature.swap.domain.models.data.AggregatedSwapDataModel
import com.tangem.feature.swap.domain.models.domain.ApproveModel
import com.tangem.feature.swap.domain.models.domain.Currency
import com.tangem.feature.swap.domain.models.domain.QuoteModel
import com.tangem.feature.swap.domain.models.domain.SwapDataModel
import com.tangem.feature.swap.domain.models.data.AggregatedSwapDataModel
interface SwapRepository {
@ -61,4 +61,10 @@ interface SwapRepository {
fromWalletAddress: String,
slippage: Int,
): AggregatedSwapDataModel<SwapDataModel>
/**
* Returns a tangem fee for swap in percents
* Example: 0.35%
*/
fun getTangemFee(): Double
}