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,
|
||||
sessionsManager: WcSessionsManager,
|
||||
factories: WcEthNetwork.Factories,
|
||||
walletManagersFacade: WalletManagersFacade,
|
||||
wcNetworksConverter: WcNetworksConverter,
|
||||
): WcEthNetwork = WcEthNetwork(
|
||||
moshi = moshi,
|
||||
networksConverter = wcNetworksConverter,
|
||||
sessionsManager = sessionsManager,
|
||||
factories = factories,
|
||||
walletManagersFacade = walletManagersFacade,
|
||||
)
|
||||
|
||||
@Provides
|
||||
|
|
@ -165,24 +163,20 @@ internal object WalletConnectDataModule {
|
|||
wcNetworksConverter: WcNetworksConverter,
|
||||
sessionsManager: WcSessionsManager,
|
||||
factories: WcSolanaNetwork.Factories,
|
||||
walletManagersFacade: WalletManagersFacade,
|
||||
): WcSolanaNetwork = WcSolanaNetwork(
|
||||
moshi = moshi,
|
||||
sessionsManager = sessionsManager,
|
||||
factories = factories,
|
||||
networksConverter = wcNetworksConverter,
|
||||
walletManagersFacade = walletManagersFacade,
|
||||
)
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun caipNamespaceDelegate(
|
||||
namespaceConverters: Set<@JvmSuppressWildcards WcNamespaceConverter>,
|
||||
walletManagersFacade: WalletManagersFacade,
|
||||
wcNetworksConverter: WcNetworksConverter,
|
||||
): CaipNamespaceDelegate = CaipNamespaceDelegate(
|
||||
namespaceConverters = namespaceConverters,
|
||||
walletManagersFacade = walletManagersFacade,
|
||||
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.repository.WcSessionsManager
|
||||
import com.tangem.domain.walletconnect.usecase.method.WcMethodUseCase
|
||||
import com.tangem.domain.walletmanager.WalletManagersFacade
|
||||
import jakarta.inject.Inject
|
||||
|
||||
internal class WcEthNetwork(
|
||||
|
|
@ -26,7 +25,6 @@ internal class WcEthNetwork(
|
|||
private val sessionsManager: WcSessionsManager,
|
||||
private val factories: Factories,
|
||||
private val networksConverter: WcNetworksConverter,
|
||||
private val walletManagersFacade: WalletManagersFacade,
|
||||
) : WcRequestToUseCaseConverter {
|
||||
|
||||
override fun toWcMethodName(request: WcSdkSessionRequest): WcEthMethodName? {
|
||||
|
|
@ -57,7 +55,7 @@ internal class WcEthNetwork(
|
|||
is WcEthMethod.SwitchEthereumChain,
|
||||
->
|
||||
anyExistNetwork()
|
||||
?.let { network -> walletManagersFacade.getDefaultAddress(wallet.walletId, network).orEmpty() }
|
||||
?.let { network -> networksConverter.getAddressForWC(wallet.walletId, network).orEmpty() }
|
||||
.orEmpty()
|
||||
}
|
||||
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.repository.WcSessionsManager
|
||||
import com.tangem.domain.walletconnect.usecase.method.WcMethodUseCase
|
||||
import com.tangem.domain.walletmanager.WalletManagersFacade
|
||||
import jakarta.inject.Inject
|
||||
|
||||
internal class WcSolanaNetwork(
|
||||
|
|
@ -30,7 +29,6 @@ internal class WcSolanaNetwork(
|
|||
private val sessionsManager: WcSessionsManager,
|
||||
private val factories: Factories,
|
||||
private val networksConverter: WcNetworksConverter,
|
||||
private val walletManagersFacade: WalletManagersFacade,
|
||||
) : WcRequestToUseCaseConverter {
|
||||
|
||||
override fun toWcMethodName(request: WcSdkSessionRequest): WcSolanaMethodName? {
|
||||
|
|
@ -52,7 +50,7 @@ internal class WcSolanaNetwork(
|
|||
val chainId = request.chainId.orEmpty()
|
||||
suspend fun anyExistNetwork() = networksConverter.mainOrAnyWalletNetworkForRequest(chainId, wallet)
|
||||
suspend fun anyAddress() = anyExistNetwork()
|
||||
?.let { network -> walletManagersFacade.getDefaultAddress(wallet.walletId, network).orEmpty() }
|
||||
?.let { network -> networksConverter.getAddressForWC(wallet.walletId, network).orEmpty() }
|
||||
.orEmpty()
|
||||
|
||||
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.wallet.UserWalletId
|
||||
import com.tangem.domain.walletconnect.model.WcSessionApprove
|
||||
import com.tangem.domain.walletmanager.WalletManagersFacade
|
||||
|
||||
internal class CaipNamespaceDelegate(
|
||||
private val namespaceConverters: Set<WcNamespaceConverter>,
|
||||
private val walletManagersFacade: WalletManagersFacade,
|
||||
private val wcNetworksConverter: WcNetworksConverter,
|
||||
) {
|
||||
|
||||
|
|
@ -36,7 +34,7 @@ internal class CaipNamespaceDelegate(
|
|||
}
|
||||
|
||||
suspend fun createCAIP10(userWalletId: UserWalletId, network: Network): CAIP10? {
|
||||
val address = walletManagersFacade.getDefaultAddress(userWalletId, network)
|
||||
val address = wcNetworksConverter.getAddressForWC(userWalletId, network)
|
||||
val chainId = allWcNetworks
|
||||
.find { (wcNetwork, _) -> network.rawId == wcNetwork.rawId }
|
||||
?.second
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
package com.tangem.data.walletconnect.utils
|
||||
|
||||
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.walletconnect.model.CAIP10
|
||||
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 requestNetwork = allCoinNetwork.find { network ->
|
||||
val address = walletManagersFacade.getDefaultAddress(wallet.walletId, network)
|
||||
val address = getAddressForWC(wallet.walletId, network)
|
||||
requestAddress.lowercase() == address?.lowercase()
|
||||
}
|
||||
return requestNetwork
|
||||
|
|
@ -60,7 +63,18 @@ internal class WcNetworksConverter @Inject constructor(
|
|||
|
||||
suspend fun allAddressForChain(rawChainId: String, wallet: UserWallet): List<String> {
|
||||
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
|
||||
.filter { it.rawId == blockchain.id }
|
||||
// find equal address
|
||||
.firstOrNull {
|
||||
val walletAddress = walletManagersFacade.getDefaultAddress(wallet.walletId, it)
|
||||
.firstOrNull { network ->
|
||||
val walletAddress = getAddressForWC(wallet.walletId, network)
|
||||
walletAddress?.lowercase() == caip10.accountAddress.lowercase()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue