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")
|
||||
val slippage: BigDecimal?,
|
||||
|
||||
@Json(name = "exchangeOnlyWithinSingleAddress")
|
||||
val isExchangeOnlyWithinSingleAddress: Boolean = false,
|
||||
)
|
||||
|
||||
@JsonClass(generateAdapter = false)
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ internal class ExpressProviderConverter : Converter<ExchangeProvider, ExpressPro
|
|||
privacyPolicy = value.privacyPolicy,
|
||||
isRecommended = value.isRecommended,
|
||||
slippage = value.slippage,
|
||||
isExchangeOnlyWithinSingleAddress = value.isExchangeOnlyWithinSingleAddress,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -75,11 +75,11 @@ internal class DefaultSwapRepositoryV2 @Inject constructor(
|
|||
swapTxType = swapTxType,
|
||||
)
|
||||
|
||||
val providers = expressRepository.getProviders(
|
||||
val expressProviders = expressRepository.getFilteredProviders(
|
||||
userWallet = userWallet,
|
||||
filterProviderTypes = filterProviderTypes,
|
||||
)
|
||||
val expressProviders = providers.associateBy(ExpressProvider::providerId)
|
||||
swapTxType = swapTxType,
|
||||
).associateBy(ExpressProvider::providerId)
|
||||
|
||||
allPairs.map { pair ->
|
||||
async {
|
||||
|
|
@ -125,11 +125,11 @@ internal class DefaultSwapRepositoryV2 @Inject constructor(
|
|||
swapTxType = swapTxType,
|
||||
)
|
||||
|
||||
val providers = expressRepository.getProviders(
|
||||
val mappedProviders = expressRepository.getFilteredProviders(
|
||||
userWallet = userWallet,
|
||||
filterProviderTypes = filterProviderTypes,
|
||||
)
|
||||
val mappedProviders = providers.associateBy(ExpressProvider::providerId)
|
||||
swapTxType = swapTxType,
|
||||
).associateBy(ExpressProvider::providerId)
|
||||
|
||||
allPairs.map { pair ->
|
||||
async {
|
||||
|
|
@ -434,4 +434,20 @@ internal class DefaultSwapRepositoryV2 @Inject constructor(
|
|||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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 isRecommended flag that indicates if this provider is recommended
|
||||
* @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
|
||||
* to support backward compatibility
|
||||
|
|
@ -40,4 +41,6 @@ data class ExpressProvider(
|
|||
val isRecommended: Boolean = false,
|
||||
@Json(name = "slippage")
|
||||
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%
|
||||
|
||||
/** 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 {
|
||||
return when (expressError) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue