Updated on 2026-08-14
This commit is contained in:
commit
f3dfb262c2
527 changed files with 12898 additions and 3301 deletions
|
|
@ -27,6 +27,8 @@ dependencies {
|
|||
implementation(projects.libs.crypto)
|
||||
|
||||
implementation(projects.domain.account.status)
|
||||
implementation(projects.domain.dynamicAddresses)
|
||||
implementation(projects.domain.dynamicAddresses.models)
|
||||
implementation(projects.domain.models)
|
||||
implementation(projects.domain.legacy)
|
||||
implementation(projects.domain.walletManager)
|
||||
|
|
|
|||
|
|
@ -40,8 +40,8 @@ class GetEthSpecificFeeUseCase(
|
|||
?: (walletManager as? EthereumWalletManager)?.getGasPriceValue()
|
||||
?: error("not supported for ${cryptoCurrency.network}")
|
||||
|
||||
val blockchain = Blockchain.fromNetworkId(networkId = cryptoCurrency.network.backendId)
|
||||
?: error("unknown networkId ${cryptoCurrency.network.backendId}")
|
||||
val blockchain = Blockchain.fromNetworkId(networkId = cryptoCurrency.network.rawId)
|
||||
?: error("unknown networkId ${cryptoCurrency.network.rawId}")
|
||||
|
||||
val minimalFee = getEthLegacyFee(
|
||||
gasPrice = gasPriceResult,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,9 @@
|
|||
package com.tangem.domain.transaction.usecase
|
||||
|
||||
import com.tangem.domain.dynamicaddresses.DynamicAddressesFeatureToggles
|
||||
import com.tangem.domain.dynamicaddresses.GetDynamicReceiveAddressUseCase
|
||||
import com.tangem.domain.dynamicaddresses.model.DynamicAddressesStatus
|
||||
import com.tangem.domain.dynamicaddresses.repository.DynamicAddressesRepository
|
||||
import com.tangem.domain.models.Asset
|
||||
import com.tangem.domain.models.ReceiveAddressModel
|
||||
import com.tangem.domain.models.TokenReceiveConfig
|
||||
|
|
@ -12,10 +16,15 @@ import com.tangem.domain.models.wallet.UserWalletId
|
|||
import com.tangem.domain.tokens.GetViewedTokenReceiveWarningUseCase
|
||||
import com.tangem.domain.transaction.R
|
||||
import com.tangem.lib.crypto.BlockchainUtils
|
||||
import com.tangem.utils.logging.TangemLogger
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
|
||||
class ReceiveAddressesFactory(
|
||||
private val getEnsNameUseCase: GetEnsNameUseCase,
|
||||
private val getViewedTokenReceiveWarningUseCase: GetViewedTokenReceiveWarningUseCase,
|
||||
private val getDynamicReceiveAddressUseCase: GetDynamicReceiveAddressUseCase,
|
||||
private val dynamicAddressesRepository: DynamicAddressesRepository,
|
||||
private val dynamicAddressesFeatureToggles: DynamicAddressesFeatureToggles,
|
||||
) {
|
||||
|
||||
suspend fun create(
|
||||
|
|
@ -32,27 +41,14 @@ class ReceiveAddressesFactory(
|
|||
address = addresses.defaultAddress.value,
|
||||
)
|
||||
|
||||
val receiveAddresses = buildList {
|
||||
ensName?.let { ens ->
|
||||
add(
|
||||
ReceiveAddressModel(
|
||||
nameService = ReceiveAddressModel.NameService.Ens,
|
||||
value = ens,
|
||||
),
|
||||
)
|
||||
}
|
||||
addresses.availableAddresses.map { address ->
|
||||
add(
|
||||
ReceiveAddressModel(
|
||||
nameService = when (address.type) {
|
||||
NetworkAddress.Address.Type.Primary -> ReceiveAddressModel.NameService.Default
|
||||
NetworkAddress.Address.Type.Secondary -> ReceiveAddressModel.NameService.Legacy
|
||||
},
|
||||
value = address.value,
|
||||
),
|
||||
)
|
||||
}
|
||||
val dynamicAddress = getDynamicAddressIfEnabled(userWalletId, cryptoCurrency)
|
||||
|
||||
val receiveAddresses = if (dynamicAddress != null) {
|
||||
buildDynamicAddressList(ensName, dynamicAddress)
|
||||
} else {
|
||||
buildStandardAddressList(ensName, addresses)
|
||||
}
|
||||
|
||||
return TokenReceiveConfig(
|
||||
shouldShowWarning = cryptoCurrency.name !in getViewedTokenReceiveWarningUseCase(),
|
||||
cryptoCurrency = cryptoCurrency,
|
||||
|
|
@ -64,6 +60,52 @@ class ReceiveAddressesFactory(
|
|||
)
|
||||
}
|
||||
|
||||
private suspend fun getDynamicAddressIfEnabled(
|
||||
userWalletId: UserWalletId,
|
||||
cryptoCurrency: CryptoCurrency,
|
||||
): String? {
|
||||
if (!dynamicAddressesFeatureToggles.isDynamicAddressesEnabled) return null
|
||||
if (cryptoCurrency !is CryptoCurrency.Coin) return null
|
||||
|
||||
val status = dynamicAddressesRepository.getStatus(userWalletId, cryptoCurrency.network).firstOrNull()
|
||||
if (status != DynamicAddressesStatus.ENABLED) return null
|
||||
|
||||
return getDynamicReceiveAddressUseCase(userWalletId, cryptoCurrency.network)
|
||||
.onLeft { TangemLogger.e("Failed to get dynamic receive address: ${it.message}") }
|
||||
.getOrNull()
|
||||
}
|
||||
|
||||
private fun buildDynamicAddressList(ensName: String?, dynamicAddress: String): List<ReceiveAddressModel> =
|
||||
buildList {
|
||||
ensName?.let { ens ->
|
||||
add(ReceiveAddressModel(displayType = ReceiveAddressModel.DisplayType.Ens, value = ens))
|
||||
}
|
||||
add(
|
||||
ReceiveAddressModel(
|
||||
displayType = ReceiveAddressModel.DisplayType.Dynamic,
|
||||
value = dynamicAddress,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private fun buildStandardAddressList(ensName: String?, addresses: NetworkAddress): List<ReceiveAddressModel> =
|
||||
buildList {
|
||||
ensName?.let { ens ->
|
||||
add(ReceiveAddressModel(displayType = ReceiveAddressModel.DisplayType.Ens, value = ens))
|
||||
}
|
||||
addresses.availableAddresses.map { address ->
|
||||
add(
|
||||
ReceiveAddressModel(
|
||||
displayType = when (address.type) {
|
||||
NetworkAddress.Address.Type.Primary -> ReceiveAddressModel.DisplayType.Default
|
||||
NetworkAddress.Address.Type.Secondary -> ReceiveAddressModel.DisplayType.Legacy
|
||||
},
|
||||
value = address.value,
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun createForNft(
|
||||
userWalletId: UserWalletId,
|
||||
addresses: NetworkAddress,
|
||||
|
|
@ -82,7 +124,7 @@ class ReceiveAddressesFactory(
|
|||
ensName?.let { ens ->
|
||||
add(
|
||||
ReceiveAddressModel(
|
||||
nameService = ReceiveAddressModel.NameService.Ens,
|
||||
displayType = ReceiveAddressModel.DisplayType.Ens,
|
||||
value = ens,
|
||||
),
|
||||
)
|
||||
|
|
@ -90,9 +132,9 @@ class ReceiveAddressesFactory(
|
|||
addresses.availableAddresses.map { address ->
|
||||
add(
|
||||
ReceiveAddressModel(
|
||||
nameService = when (address.type) {
|
||||
NetworkAddress.Address.Type.Primary -> ReceiveAddressModel.NameService.Default
|
||||
NetworkAddress.Address.Type.Secondary -> ReceiveAddressModel.NameService.Legacy
|
||||
displayType = when (address.type) {
|
||||
NetworkAddress.Address.Type.Primary -> ReceiveAddressModel.DisplayType.Default
|
||||
NetworkAddress.Address.Type.Secondary -> ReceiveAddressModel.DisplayType.Legacy
|
||||
},
|
||||
value = address.value,
|
||||
),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue