@@ -5,15 +5,18 @@ import com.flipcash.app.core.encryption.boxOpen
55import com.flipcash.app.core.navigation.DeeplinkType
66import com.flipcash.app.core.onramp.deeplinks.ExternalWalletConnection
77import com.flipcash.app.core.onramp.deeplinks.ExternallySignedTransaction
8+ import com.flipcash.app.userflags.UserFlagsCoordinator
89import com.flipcash.services.internal.model.thirdparty.OnRampProvider
10+ import com.flipcash.services.internal.model.thirdparty.UsdcLiquidtyPool
911import com.flipcash.services.user.UserManager
1012import com.getcode.opencode.controllers.TransactionOperations
1113import com.getcode.opencode.exchange.VerifiedFiat
1214import com.getcode.opencode.internal.solana.extensions.deriveAssociatedAccount
13- import com.getcode.opencode.internal.solana.model.LiquidityPool
1415import com.getcode.opencode.internal.solana.model.SwapId
1516import com.getcode.opencode.model.financial.LocalFiat
1617import com.getcode.opencode.model.financial.Token
18+ import com.getcode.opencode.model.transactions.FundSwapPool
19+ import com.getcode.opencode.model.transactions.LiquidityPool
1720import com.getcode.opencode.model.transactions.SwapFundingSource
1821import com.getcode.opencode.solana.SolanaTransaction
1922import com.getcode.opencode.solana.TransactionBuilder
@@ -29,6 +32,7 @@ import com.getcode.solana.rpc.RpcException
2932import com.getcode.solana.rpc.SolanaConnection
3033import com.getcode.solana.rpc.doesAccountExist
3134import com.getcode.solana.rpc.getBalance
35+ import com.getcode.solana.rpc.getAccountData
3236import com.getcode.solana.rpc.getTokenAccountBalance
3337import com.getcode.solana.rpc.sendTransaction
3438import com.getcode.solana.rpc.simulateTransaction
@@ -52,13 +56,16 @@ import kotlinx.coroutines.flow.SharedFlow
5256import kotlinx.coroutines.flow.StateFlow
5357import kotlinx.coroutines.flow.asSharedFlow
5458import kotlinx.coroutines.flow.asStateFlow
59+ import kotlinx.coroutines.flow.firstOrNull
60+ import kotlinx.coroutines.flow.map
5561import kotlinx.coroutines.withContext
5662import kotlinx.serialization.json.Json
5763import javax.inject.Inject
5864
5965@ActivityRetainedScoped
6066class ExternalWalletOnRampController @Inject constructor(
6167 private val userManager : UserManager ,
68+ private val userFlags : UserFlagsCoordinator ,
6269 private val transactionController : TransactionOperations ,
6370 private val rpcConfig : RpcConfig ,
6471) {
@@ -445,11 +452,25 @@ class ExternalWalletOnRampController @Inject constructor(
445452
446453 val swapId = SwapId .generate()
447454 val recentBlockhash = connection.getLatestBlockhash()
455+
456+ val liquidityPool = userFlags.resolvedFlags.value.usdcOnRampLiquidityPool.effectiveValue
457+ val swapPool = when (liquidityPool) {
458+ UsdcLiquidtyPool .CoinbaseStableSwapper -> {
459+ val poolAddress = FundSwapPool .CoinbaseStableSwapper .poolAddress
460+ val poolData = driver.getAccountData(poolAddress).getOrThrow()
461+ FundSwapPool .CoinbaseStableSwapper .fromAccountData(poolData)
462+ }
463+ UsdcLiquidtyPool .Unknown ,
464+ UsdcLiquidtyPool .Flipcash -> FundSwapPool .Usdf (LiquidityPool .usdf)
465+ }
466+
467+ trace(" Building USDC -> USDF fund swap using $liquidityPool LP" )
468+
448469 val transaction = TransactionBuilder .usdcFundSwap(
449470 owner = owner.authorityPublicKey,
450471 sender = sender,
451472 amount = amount.underlyingTokenAmount.quarks,
452- pool = LiquidityPool .usdf ,
473+ pool = swapPool ,
453474 blockhash = Hash (recentBlockhash),
454475 swapId = swapId,
455476 )
0 commit comments