Updated on 2026-08-14
This commit is contained in:
parent
0d3a9692e2
commit
afa13d836e
7 changed files with 26 additions and 20 deletions
|
|
@ -148,14 +148,12 @@ internal object WalletConnectDataModule {
|
||||||
@SdkMoshi moshi: Moshi,
|
@SdkMoshi moshi: Moshi,
|
||||||
sessionsManager: WcSessionsManager,
|
sessionsManager: WcSessionsManager,
|
||||||
factories: WcEthNetwork.Factories,
|
factories: WcEthNetwork.Factories,
|
||||||
walletManagersFacade: WalletManagersFacade,
|
|
||||||
wcNetworksConverter: WcNetworksConverter,
|
wcNetworksConverter: WcNetworksConverter,
|
||||||
): WcEthNetwork = WcEthNetwork(
|
): WcEthNetwork = WcEthNetwork(
|
||||||
moshi = moshi,
|
moshi = moshi,
|
||||||
networksConverter = wcNetworksConverter,
|
networksConverter = wcNetworksConverter,
|
||||||
sessionsManager = sessionsManager,
|
sessionsManager = sessionsManager,
|
||||||
factories = factories,
|
factories = factories,
|
||||||
walletManagersFacade = walletManagersFacade,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
|
|
@ -165,24 +163,20 @@ internal object WalletConnectDataModule {
|
||||||
wcNetworksConverter: WcNetworksConverter,
|
wcNetworksConverter: WcNetworksConverter,
|
||||||
sessionsManager: WcSessionsManager,
|
sessionsManager: WcSessionsManager,
|
||||||
factories: WcSolanaNetwork.Factories,
|
factories: WcSolanaNetwork.Factories,
|
||||||
walletManagersFacade: WalletManagersFacade,
|
|
||||||
): WcSolanaNetwork = WcSolanaNetwork(
|
): WcSolanaNetwork = WcSolanaNetwork(
|
||||||
moshi = moshi,
|
moshi = moshi,
|
||||||
sessionsManager = sessionsManager,
|
sessionsManager = sessionsManager,
|
||||||
factories = factories,
|
factories = factories,
|
||||||
networksConverter = wcNetworksConverter,
|
networksConverter = wcNetworksConverter,
|
||||||
walletManagersFacade = walletManagersFacade,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun caipNamespaceDelegate(
|
fun caipNamespaceDelegate(
|
||||||
namespaceConverters: Set<@JvmSuppressWildcards WcNamespaceConverter>,
|
namespaceConverters: Set<@JvmSuppressWildcards WcNamespaceConverter>,
|
||||||
walletManagersFacade: WalletManagersFacade,
|
|
||||||
wcNetworksConverter: WcNetworksConverter,
|
wcNetworksConverter: WcNetworksConverter,
|
||||||
): CaipNamespaceDelegate = CaipNamespaceDelegate(
|
): CaipNamespaceDelegate = CaipNamespaceDelegate(
|
||||||
namespaceConverters = namespaceConverters,
|
namespaceConverters = namespaceConverters,
|
||||||
walletManagersFacade = walletManagersFacade,
|
|
||||||
wcNetworksConverter = wcNetworksConverter,
|
wcNetworksConverter = wcNetworksConverter,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ import com.tangem.domain.walletconnect.model.*
|
||||||
import com.tangem.domain.walletconnect.model.sdkcopy.WcSdkSessionRequest
|
import com.tangem.domain.walletconnect.model.sdkcopy.WcSdkSessionRequest
|
||||||
import com.tangem.domain.walletconnect.repository.WcSessionsManager
|
import com.tangem.domain.walletconnect.repository.WcSessionsManager
|
||||||
import com.tangem.domain.walletconnect.usecase.method.WcMethodUseCase
|
import com.tangem.domain.walletconnect.usecase.method.WcMethodUseCase
|
||||||
import com.tangem.domain.walletmanager.WalletManagersFacade
|
|
||||||
import jakarta.inject.Inject
|
import jakarta.inject.Inject
|
||||||
|
|
||||||
internal class WcEthNetwork(
|
internal class WcEthNetwork(
|
||||||
|
|
@ -26,7 +25,6 @@ internal class WcEthNetwork(
|
||||||
private val sessionsManager: WcSessionsManager,
|
private val sessionsManager: WcSessionsManager,
|
||||||
private val factories: Factories,
|
private val factories: Factories,
|
||||||
private val networksConverter: WcNetworksConverter,
|
private val networksConverter: WcNetworksConverter,
|
||||||
private val walletManagersFacade: WalletManagersFacade,
|
|
||||||
) : WcRequestToUseCaseConverter {
|
) : WcRequestToUseCaseConverter {
|
||||||
|
|
||||||
override fun toWcMethodName(request: WcSdkSessionRequest): WcEthMethodName? {
|
override fun toWcMethodName(request: WcSdkSessionRequest): WcEthMethodName? {
|
||||||
|
|
@ -57,7 +55,7 @@ internal class WcEthNetwork(
|
||||||
is WcEthMethod.SwitchEthereumChain,
|
is WcEthMethod.SwitchEthereumChain,
|
||||||
->
|
->
|
||||||
anyExistNetwork()
|
anyExistNetwork()
|
||||||
?.let { network -> walletManagersFacade.getDefaultAddress(wallet.walletId, network).orEmpty() }
|
?.let { network -> networksConverter.getAddressForWC(wallet.walletId, network).orEmpty() }
|
||||||
.orEmpty()
|
.orEmpty()
|
||||||
}
|
}
|
||||||
val walletNetwork = when (method) {
|
val walletNetwork = when (method) {
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ import com.tangem.domain.walletconnect.model.WcSolanaMethodName
|
||||||
import com.tangem.domain.walletconnect.model.sdkcopy.WcSdkSessionRequest
|
import com.tangem.domain.walletconnect.model.sdkcopy.WcSdkSessionRequest
|
||||||
import com.tangem.domain.walletconnect.repository.WcSessionsManager
|
import com.tangem.domain.walletconnect.repository.WcSessionsManager
|
||||||
import com.tangem.domain.walletconnect.usecase.method.WcMethodUseCase
|
import com.tangem.domain.walletconnect.usecase.method.WcMethodUseCase
|
||||||
import com.tangem.domain.walletmanager.WalletManagersFacade
|
|
||||||
import jakarta.inject.Inject
|
import jakarta.inject.Inject
|
||||||
|
|
||||||
internal class WcSolanaNetwork(
|
internal class WcSolanaNetwork(
|
||||||
|
|
@ -30,7 +29,6 @@ internal class WcSolanaNetwork(
|
||||||
private val sessionsManager: WcSessionsManager,
|
private val sessionsManager: WcSessionsManager,
|
||||||
private val factories: Factories,
|
private val factories: Factories,
|
||||||
private val networksConverter: WcNetworksConverter,
|
private val networksConverter: WcNetworksConverter,
|
||||||
private val walletManagersFacade: WalletManagersFacade,
|
|
||||||
) : WcRequestToUseCaseConverter {
|
) : WcRequestToUseCaseConverter {
|
||||||
|
|
||||||
override fun toWcMethodName(request: WcSdkSessionRequest): WcSolanaMethodName? {
|
override fun toWcMethodName(request: WcSdkSessionRequest): WcSolanaMethodName? {
|
||||||
|
|
@ -52,7 +50,7 @@ internal class WcSolanaNetwork(
|
||||||
val chainId = request.chainId.orEmpty()
|
val chainId = request.chainId.orEmpty()
|
||||||
suspend fun anyExistNetwork() = networksConverter.mainOrAnyWalletNetworkForRequest(chainId, wallet)
|
suspend fun anyExistNetwork() = networksConverter.mainOrAnyWalletNetworkForRequest(chainId, wallet)
|
||||||
suspend fun anyAddress() = anyExistNetwork()
|
suspend fun anyAddress() = anyExistNetwork()
|
||||||
?.let { network -> walletManagersFacade.getDefaultAddress(wallet.walletId, network).orEmpty() }
|
?.let { network -> networksConverter.getAddressForWC(wallet.walletId, network).orEmpty() }
|
||||||
.orEmpty()
|
.orEmpty()
|
||||||
|
|
||||||
val accountAddress = when (method) {
|
val accountAddress = when (method) {
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,9 @@ import com.tangem.data.walletconnect.utils.WcNetworksConverter
|
||||||
import com.tangem.domain.models.network.Network
|
import com.tangem.domain.models.network.Network
|
||||||
import com.tangem.domain.models.wallet.UserWalletId
|
import com.tangem.domain.models.wallet.UserWalletId
|
||||||
import com.tangem.domain.walletconnect.model.WcSessionApprove
|
import com.tangem.domain.walletconnect.model.WcSessionApprove
|
||||||
import com.tangem.domain.walletmanager.WalletManagersFacade
|
|
||||||
|
|
||||||
internal class CaipNamespaceDelegate(
|
internal class CaipNamespaceDelegate(
|
||||||
private val namespaceConverters: Set<WcNamespaceConverter>,
|
private val namespaceConverters: Set<WcNamespaceConverter>,
|
||||||
private val walletManagersFacade: WalletManagersFacade,
|
|
||||||
private val wcNetworksConverter: WcNetworksConverter,
|
private val wcNetworksConverter: WcNetworksConverter,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
|
@ -36,7 +34,7 @@ internal class CaipNamespaceDelegate(
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun createCAIP10(userWalletId: UserWalletId, network: Network): CAIP10? {
|
suspend fun createCAIP10(userWalletId: UserWalletId, network: Network): CAIP10? {
|
||||||
val address = walletManagersFacade.getDefaultAddress(userWalletId, network)
|
val address = wcNetworksConverter.getAddressForWC(userWalletId, network)
|
||||||
val chainId = allWcNetworks
|
val chainId = allWcNetworks
|
||||||
.find { (wcNetwork, _) -> network.rawId == wcNetwork.rawId }
|
.find { (wcNetwork, _) -> network.rawId == wcNetwork.rawId }
|
||||||
?.second
|
?.second
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
package com.tangem.data.walletconnect.utils
|
package com.tangem.data.walletconnect.utils
|
||||||
|
|
||||||
import com.reown.walletkit.client.Wallet
|
import com.reown.walletkit.client.Wallet
|
||||||
|
import com.tangem.blockchain.common.Blockchain
|
||||||
|
import com.tangem.blockchain.common.address.AddressType
|
||||||
|
import com.tangem.blockchainsdk.utils.toBlockchain
|
||||||
import com.tangem.data.common.currency.isCustomCoin
|
import com.tangem.data.common.currency.isCustomCoin
|
||||||
import com.tangem.data.walletconnect.model.CAIP10
|
import com.tangem.data.walletconnect.model.CAIP10
|
||||||
import com.tangem.domain.account.producer.SingleAccountProducer
|
import com.tangem.domain.account.producer.SingleAccountProducer
|
||||||
|
|
@ -44,7 +47,7 @@ internal class WcNetworksConverter @Inject constructor(
|
||||||
val allCoinNetwork = filterWalletNetworkForRequest(request.chainId.orEmpty(), session.wallet)
|
val allCoinNetwork = filterWalletNetworkForRequest(request.chainId.orEmpty(), session.wallet)
|
||||||
|
|
||||||
val requestNetwork = allCoinNetwork.find { network ->
|
val requestNetwork = allCoinNetwork.find { network ->
|
||||||
val address = walletManagersFacade.getDefaultAddress(wallet.walletId, network)
|
val address = getAddressForWC(wallet.walletId, network)
|
||||||
requestAddress.lowercase() == address?.lowercase()
|
requestAddress.lowercase() == address?.lowercase()
|
||||||
}
|
}
|
||||||
return requestNetwork
|
return requestNetwork
|
||||||
|
|
@ -60,7 +63,18 @@ internal class WcNetworksConverter @Inject constructor(
|
||||||
|
|
||||||
suspend fun allAddressForChain(rawChainId: String, wallet: UserWallet): List<String> {
|
suspend fun allAddressForChain(rawChainId: String, wallet: UserWallet): List<String> {
|
||||||
return filterWalletNetworkForRequest(rawChainId, wallet)
|
return filterWalletNetworkForRequest(rawChainId, wallet)
|
||||||
.mapNotNull { walletManagersFacade.getDefaultAddress(wallet.walletId, it)?.lowercase() }
|
.mapNotNull { getAddressForWC(wallet.walletId, it)?.lowercase() }
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun getAddressForWC(userWalletId: UserWalletId, network: Network): String? {
|
||||||
|
return when (network.toBlockchain()) {
|
||||||
|
Blockchain.XDC,
|
||||||
|
Blockchain.XDCTestnet,
|
||||||
|
-> walletManagersFacade.getAddresses(userWalletId, network)
|
||||||
|
.find { address -> address.type == AddressType.Legacy }
|
||||||
|
?.value
|
||||||
|
else -> walletManagersFacade.getDefaultAddress(userWalletId, network)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -94,8 +108,8 @@ internal class WcNetworksConverter @Inject constructor(
|
||||||
// find all derivation
|
// find all derivation
|
||||||
.filter { it.rawId == blockchain.id }
|
.filter { it.rawId == blockchain.id }
|
||||||
// find equal address
|
// find equal address
|
||||||
.firstOrNull {
|
.firstOrNull { network ->
|
||||||
val walletAddress = walletManagersFacade.getDefaultAddress(wallet.walletId, it)
|
val walletAddress = getAddressForWC(wallet.walletId, network)
|
||||||
walletAddress?.lowercase() == caip10.accountAddress.lowercase()
|
walletAddress?.lowercase() == caip10.accountAddress.lowercase()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,4 +20,8 @@ internal interface WcCommonTransactionModel {
|
||||||
fun showSuccessSignMessage(message: TextReference = resourceReference(R.string.wc_successfully_signed)) {
|
fun showSuccessSignMessage(message: TextReference = resourceReference(R.string.wc_successfully_signed)) {
|
||||||
messageSender.send(ToastMessage(message = message))
|
messageSender.send(ToastMessage(message = message))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun showSuccessAddedMessage(message: TextReference = resourceReference(R.string.common_added)) {
|
||||||
|
messageSender.send(ToastMessage(message = message))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -111,7 +111,7 @@ internal class WcAddNetworkModel @Inject constructor(
|
||||||
modelScope.launch {
|
modelScope.launch {
|
||||||
_uiState.update { it?.copy(transaction = it.transaction.copy(isLoading = true)) }
|
_uiState.update { it?.copy(transaction = it.transaction.copy(isLoading = true)) }
|
||||||
useCase.approve().getOrNull()?.let {
|
useCase.approve().getOrNull()?.let {
|
||||||
showSuccessSignMessage()
|
showSuccessAddedMessage()
|
||||||
router.pop()
|
router.pop()
|
||||||
} ?: run {
|
} ?: run {
|
||||||
_uiState.update { it?.copy(transaction = it.transaction.copy(isLoading = false)) }
|
_uiState.update { it?.copy(transaction = it.transaction.copy(isLoading = false)) }
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue