Updated on 2026-08-14

This commit is contained in:
Tangem 2025-10-22 20:23:45 +04:00
parent 468843f7b9
commit 6dcb4d9aa6
2 changed files with 25 additions and 24 deletions

View file

@ -2,9 +2,12 @@ package com.tangem.data.pay
import arrow.core.Either
import com.squareup.moshi.Moshi
import com.tangem.blockchain.blockchains.ethereum.Chain
import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchainsdk.utils.ExcludedBlockchains
import com.tangem.core.error.UniversalError
import com.tangem.data.common.currency.CryptoCurrencyFactory
import com.tangem.data.common.network.NetworkFactory
import com.tangem.data.pay.util.TangemPayErrorConverter
import com.tangem.data.pay.util.TangemPayWalletsManager
import com.tangem.datasource.di.NetworkMoshi
@ -18,6 +21,13 @@ import timber.log.Timber
import javax.inject.Inject
private const val TAG = "TangemPay: TokenReceiveConfigFactory"
/**
* Custom token parameters. Will be used only for F&F.
*/
private const val TOKEN_ID = "usd-coin"
private const val TOKEN_NAME = "USDC"
private const val TOKEN_CONTRACT_ADDRESS = "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359"
private const val TOKEN_DECIMALS = 6
internal class DefaultDataForReceiveFactory @Inject constructor(
@NetworkMoshi moshi: Moshi,
@ -28,22 +38,28 @@ internal class DefaultDataForReceiveFactory @Inject constructor(
private val cryptoCurrencyFactory by lazy(mode = LazyThreadSafetyMode.NONE) {
CryptoCurrencyFactory(excludedBlockchains)
}
private val networkFactory by lazy(mode = LazyThreadSafetyMode.NONE) {
NetworkFactory(excludedBlockchains)
}
private val errorConverter by lazy(mode = LazyThreadSafetyMode.NONE) { TangemPayErrorConverter(moshi) }
override fun getDataForReceive(depositAddress: String, chainId: Int): Either<UniversalError, DataForReceive> {
return try {
val wallet = tangemPayWalletsManager.getDefaultWalletForTangemPayBlocking()
/**
* Create [CryptoCurrency.Coin] only for F&F.
* Later will use [CryptoCurrency.Token] when contractAddresses will be provided by BFF.
*/
val currency = cryptoCurrencyFactory.createCoin(
chainId = chainId,
val blockchain: Blockchain? = Chain.entries.find { it.id == chainId }?.blockchain
val network = networkFactory.create(
blockchain = requireNotNull(blockchain),
extraDerivationPath = null,
userWallet = wallet,
) ?: error("Cannot create crypto currency from chainId $chainId")
)
val currency = cryptoCurrencyFactory.createToken(
network = requireNotNull(network),
rawId = CryptoCurrency.RawID(TOKEN_ID),
name = TOKEN_NAME,
symbol = TOKEN_NAME,
contractAddress = TOKEN_CONTRACT_ADDRESS,
decimals = TOKEN_DECIMALS,
)
val result = DataForReceive(
currency = currency,
walletId = wallet.walletId,

View file

@ -1,7 +1,6 @@
package com.tangem.features.tangempay.model
import androidx.compose.runtime.Stable
import androidx.compose.ui.graphics.toArgb
import com.arkivanov.decompose.router.slot.SlotNavigation
import com.arkivanov.decompose.router.slot.activate
import com.tangem.core.decompose.di.ModelScoped
@ -13,9 +12,7 @@ import com.tangem.core.ui.clipboard.ClipboardManager
import com.tangem.core.ui.components.containers.pullToRefresh.PullToRefreshConfig.ShowRefreshState
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.message.SnackbarMessage
import com.tangem.core.ui.res.TangemColorPalette
import com.tangem.domain.models.TokenReceiveConfig
import com.tangem.domain.models.TokenReceiveType
import com.tangem.domain.pay.DataForReceiveFactory
import com.tangem.domain.pay.repository.CardDetailsRepository
import com.tangem.domain.visa.model.TangemPayTxHistoryItem
@ -38,12 +35,6 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import javax.inject.Inject
/**
* Custom token name and icon url. Will be used only for F&F.
*/
private const val TOKEN_NAME = "USDC"
private const val TOKEN_ICON_URL = "https://s3.eu-central-1.amazonaws.com/tangem.api/coins/large/usd-coin.png"
@Suppress("LongParameterList")
@Stable
@ModelScoped
@ -104,12 +95,6 @@ internal class TangemPayDetailsModel @Inject constructor(
userWalletId = it.walletId,
showMemoDisclaimer = false,
receiveAddress = it.receiveAddress,
type = TokenReceiveType.Custom(
tokenName = TOKEN_NAME,
tokenIconUrl = TOKEN_ICON_URL,
fallbackTint = TangemColorPalette.Black.toArgb(),
fallbackBackground = TangemColorPalette.Meadow.toArgb(),
),
)
bottomSheetNavigation.activate(TangemPayDetailsNavigation.Receive(config))
}