Updated on 2026-08-14
This commit is contained in:
parent
016b1e18d2
commit
1f233c091b
5 changed files with 33 additions and 7 deletions
|
|
@ -32,6 +32,9 @@ data class ExchangeProvider(
|
||||||
|
|
||||||
@Json(name = "slippage")
|
@Json(name = "slippage")
|
||||||
val slippage: BigDecimal?,
|
val slippage: BigDecimal?,
|
||||||
|
|
||||||
|
@Json(name = "exchangeOnlyWithinSingleAddress")
|
||||||
|
val isExchangeOnlyWithinSingleAddress: Boolean = false,
|
||||||
)
|
)
|
||||||
|
|
||||||
@JsonClass(generateAdapter = false)
|
@JsonClass(generateAdapter = false)
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ internal class ExpressProviderConverter : Converter<ExchangeProvider, ExpressPro
|
||||||
privacyPolicy = value.privacyPolicy,
|
privacyPolicy = value.privacyPolicy,
|
||||||
isRecommended = value.isRecommended,
|
isRecommended = value.isRecommended,
|
||||||
slippage = value.slippage,
|
slippage = value.slippage,
|
||||||
|
isExchangeOnlyWithinSingleAddress = value.isExchangeOnlyWithinSingleAddress,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -75,11 +75,11 @@ internal class DefaultSwapRepositoryV2 @Inject constructor(
|
||||||
swapTxType = swapTxType,
|
swapTxType = swapTxType,
|
||||||
)
|
)
|
||||||
|
|
||||||
val providers = expressRepository.getProviders(
|
val expressProviders = expressRepository.getFilteredProviders(
|
||||||
userWallet = userWallet,
|
userWallet = userWallet,
|
||||||
filterProviderTypes = filterProviderTypes,
|
filterProviderTypes = filterProviderTypes,
|
||||||
)
|
swapTxType = swapTxType,
|
||||||
val expressProviders = providers.associateBy(ExpressProvider::providerId)
|
).associateBy(ExpressProvider::providerId)
|
||||||
|
|
||||||
allPairs.map { pair ->
|
allPairs.map { pair ->
|
||||||
async {
|
async {
|
||||||
|
|
@ -125,11 +125,11 @@ internal class DefaultSwapRepositoryV2 @Inject constructor(
|
||||||
swapTxType = swapTxType,
|
swapTxType = swapTxType,
|
||||||
)
|
)
|
||||||
|
|
||||||
val providers = expressRepository.getProviders(
|
val mappedProviders = expressRepository.getFilteredProviders(
|
||||||
userWallet = userWallet,
|
userWallet = userWallet,
|
||||||
filterProviderTypes = filterProviderTypes,
|
filterProviderTypes = filterProviderTypes,
|
||||||
)
|
swapTxType = swapTxType,
|
||||||
val mappedProviders = providers.associateBy(ExpressProvider::providerId)
|
).associateBy(ExpressProvider::providerId)
|
||||||
|
|
||||||
allPairs.map { pair ->
|
allPairs.map { pair ->
|
||||||
async {
|
async {
|
||||||
|
|
@ -435,3 +435,19 @@ internal class DefaultSwapRepositoryV2 @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private suspend fun ExpressRepository.getFilteredProviders(
|
||||||
|
userWallet: UserWallet,
|
||||||
|
filterProviderTypes: List<ExpressProviderType>,
|
||||||
|
swapTxType: SwapTxType,
|
||||||
|
): List<ExpressProvider> {
|
||||||
|
return getProviders(
|
||||||
|
userWallet = userWallet,
|
||||||
|
filterProviderTypes = filterProviderTypes,
|
||||||
|
).let { allProviders ->
|
||||||
|
when (swapTxType) {
|
||||||
|
SwapTxType.SendWithSwap -> allProviders.filterNot { it.isExchangeOnlyWithinSingleAddress }
|
||||||
|
SwapTxType.Swap -> allProviders
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -16,6 +16,7 @@ import java.math.BigDecimal
|
||||||
* @property privacyPolicy privacy policy link
|
* @property privacyPolicy privacy policy link
|
||||||
* @property isRecommended flag that indicates if this provider is recommended
|
* @property isRecommended flag that indicates if this provider is recommended
|
||||||
* @property slippage provider slippage
|
* @property slippage provider slippage
|
||||||
|
* @property isExchangeOnlyWithinSingleAddress flag that indicates if exchange is only allowed within a single address
|
||||||
*
|
*
|
||||||
* Uses to store transaction data in datastore, when extends - should always add default value
|
* Uses to store transaction data in datastore, when extends - should always add default value
|
||||||
* to support backward compatibility
|
* to support backward compatibility
|
||||||
|
|
@ -40,4 +41,6 @@ data class ExpressProvider(
|
||||||
val isRecommended: Boolean = false,
|
val isRecommended: Boolean = false,
|
||||||
@Json(name = "slippage")
|
@Json(name = "slippage")
|
||||||
val slippage: BigDecimal?,
|
val slippage: BigDecimal?,
|
||||||
|
@Json(name = "exchangeOnlyWithinSingleAddress")
|
||||||
|
val isExchangeOnlyWithinSingleAddress: Boolean = false,
|
||||||
)
|
)
|
||||||
|
|
@ -14,7 +14,10 @@ internal object SwapUtils {
|
||||||
const val INCREASE_GAS_LIMIT_FOR_CEX = 105 // 5%
|
const val INCREASE_GAS_LIMIT_FOR_CEX = 105 // 5%
|
||||||
|
|
||||||
/** List of supported provider types in Send with Swap */
|
/** List of supported provider types in Send with Swap */
|
||||||
internal val SEND_WITH_SWAP_PROVIDER_TYPES = listOf(ExpressProviderType.CEX)
|
internal val SEND_WITH_SWAP_PROVIDER_TYPES = listOf(
|
||||||
|
ExpressProviderType.CEX,
|
||||||
|
ExpressProviderType.DEX,
|
||||||
|
)
|
||||||
|
|
||||||
fun getExpressErrorMessage(expressError: ExpressError): TextReference {
|
fun getExpressErrorMessage(expressError: ExpressError): TextReference {
|
||||||
return when (expressError) {
|
return when (expressError) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue