@@ -50,6 +50,7 @@ import com.getcode.opencode.model.core.errors.SwapError
5050import com.getcode.opencode.model.financial.Currency
5151import com.getcode.opencode.model.financial.CurrencyCode
5252import com.getcode.opencode.model.financial.Fiat
53+ import com.getcode.opencode.model.financial.HOUSE_SELL_FEE_BPS
5354import com.getcode.opencode.model.financial.Limits
5455import com.getcode.opencode.model.financial.LocalFiat
5556import com.getcode.opencode.model.financial.Rate
@@ -63,6 +64,7 @@ import com.getcode.opencode.model.financial.max
6364import com.getcode.opencode.model.financial.min
6465import com.getcode.opencode.model.financial.minus
6566import com.getcode.opencode.model.financial.plus
67+ import com.getcode.opencode.model.financial.sellFeeBpsOrHouseRate
6668import com.getcode.opencode.model.financial.toFiat
6769import com.getcode.opencode.model.financial.usdf
6870import com.getcode.opencode.model.transactions.SwapState
@@ -483,8 +485,8 @@ class SwapViewModel @Inject constructor(
483485 get() {
484486 val purpose = stateFlow.value.purpose as ? SwapPurpose .Convert ? : return 0
485487 if (purpose.mint == Mint .usdf) return DEFAULT_CONVERT_FEE_BPS
486- return stateFlow.value.tokenWithBalance?.token?.launchpadMetadata?.sellFeeBps
487- ? : DEFAULT_CONVERT_FEE_BPS
488+ return stateFlow.value.tokenWithBalance?.token?.launchpadMetadata
489+ .sellFeeBpsOrHouseRate
488490 }
489491
490492 private val feeAmount: Fiat
@@ -559,12 +561,13 @@ class SwapViewModel @Inject constructor(
559561 /* *
560562 * The fee a buy funded by [fundingToken] charges, as bps and whether it rides on top of the
561563 * entered amount. A v2 Get from Dollars pays the flat house rate on top (no pool to skim);
562- * every other currency has its pool's sell fee grossed up into the debit; v1's reserves buy is
564+ * every other currency has its pool's sell fee grossed up into the debit (falling back to the
565+ * house rate when the pool doesn't declare one, as [convertFeeBps] does); v1's reserves buy is
563566 * free.
564567 */
565568 private fun buyFeeFor (fundingToken : Token ): Pair <Int , Boolean > = when {
566569 fundingToken.address != Mint .usdf ->
567- ( fundingToken.launchpadMetadata?.sellFeeBps ? : 0 ) to false
570+ fundingToken.launchpadMetadata.sellFeeBpsOrHouseRate to false
568571 stateFlow.value.isGet -> DEFAULT_CONVERT_FEE_BPS to true
569572 else -> 0 to false
570573 }
@@ -1315,7 +1318,7 @@ class SwapViewModel @Inject constructor(
13151318 }
13161319 } else {
13171320 enteredFiat.grossingUpLaunchpadSellFee(
1318- bps = fundingToken.launchpadMetadata?.sellFeeBps ? : 0 ,
1321+ bps = fundingToken.launchpadMetadata.sellFeeBpsOrHouseRate ,
13191322 )
13201323 },
13211324 token = fundingToken,
@@ -1891,7 +1894,7 @@ class SwapViewModel @Inject constructor(
18911894 * House rate for a conversion when the source pool doesn't charge its own sell fee — 1%,
18921895 * matching the launchpad default.
18931896 */
1894- private const val DEFAULT_CONVERT_FEE_BPS = 100
1897+ private const val DEFAULT_CONVERT_FEE_BPS = HOUSE_SELL_FEE_BPS
18951898
18961899 val updateStateForEvent: (Event ) -> ((State ) -> State ) = { event ->
18971900 when (event) {
0 commit comments