From 8b91930e18e56f59c3bac6fa27bb0dc8322d2cbe Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 31 Oct 2024 15:21:06 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../domain/walletconnect2/app/TangemWcBlockchainHelper.kt | 8 ++++++++ .../walletconnect2/app/WalletConnectEventsHandlerImpl.kt | 2 +- .../domain/walletconnect2/domain/WcBlockchainHelper.kt | 3 +++ .../details/redux/walletconnect/WalletConnectAction.kt | 3 ++- .../redux/walletconnect/WalletConnectMiddleware.kt | 4 ++++ 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/app/TangemWcBlockchainHelper.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/app/TangemWcBlockchainHelper.kt index 8ed86f9fa2..07700916ac 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/app/TangemWcBlockchainHelper.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/app/TangemWcBlockchainHelper.kt @@ -24,6 +24,12 @@ internal class TangemWcBlockchainHelper( return blockchain?.toNetworkId() } + override fun chainIdsToBlockchains(chainIds: List): List { + return chainIds.mapNotNull { + it.parseId()?.chainIdToBlockchain() + }.distinct() + } + override fun chainIdToMissingNetworkNameOrNull(chainId: String): String? { val parsedId = chainId.parseId() ?: return null val blockchain = parsedId.chainIdToBlockchain() @@ -103,6 +109,7 @@ internal class TangemWcBlockchainHelper( second.toIntOrNull() ?.let(Blockchain::fromChainId) } + SOLANA_NAMESPACE -> Blockchain.Solana else -> { Blockchain.fromNetworkId(networkId = first) .takeIf(supportedNonEvmBlockchains::contains) @@ -112,6 +119,7 @@ internal class TangemWcBlockchainHelper( private companion object { const val EVM_NAMESPACE = "eip155" + const val SOLANA_NAMESPACE = "solana" const val CHAIN_SEPARATOR = ":" const val TESTNET_SEPARATOR = "/" } diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/app/WalletConnectEventsHandlerImpl.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/app/WalletConnectEventsHandlerImpl.kt index 073fcb8f0d..d84263034d 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/app/WalletConnectEventsHandlerImpl.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/app/WalletConnectEventsHandlerImpl.kt @@ -19,7 +19,7 @@ internal class WalletConnectEventsHandlerImpl : WalletConnectEventsHandler { WalletConnectDialog.SessionProposalDialog( sessionProposal = proposal, networks = networksFormatted, - onApprove = { store.dispatchOnMain(WalletConnectAction.ApproveProposal) }, + onApprove = { store.dispatchOnMain(WalletConnectAction.ApproveProposal(proposal)) }, onReject = { store.dispatchOnMain(WalletConnectAction.RejectProposal) }, ), ), diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WcBlockchainHelper.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WcBlockchainHelper.kt index 111c5c3d6f..91771ac6e1 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WcBlockchainHelper.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WcBlockchainHelper.kt @@ -1,5 +1,6 @@ package com.tangem.tap.domain.walletconnect2.domain +import com.tangem.blockchain.common.Blockchain import com.tangem.tap.domain.walletconnect2.domain.models.Account interface WcBlockchainHelper { @@ -14,4 +15,6 @@ interface WcBlockchainHelper { fun chainIdToFullNameOrNull(chainId: String): String? fun chainIdsToAccounts(walletAddress: String, chainIds: List, derivationPath: String?): List + + fun chainIdsToBlockchains(chainIds: List): List } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectAction.kt b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectAction.kt index a6c5dabb19..06591c01b0 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectAction.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectAction.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.details.redux.walletconnect import com.tangem.tap.domain.walletconnect2.domain.WcPreparedRequest import com.tangem.tap.domain.walletconnect2.domain.models.WalletConnectError +import com.tangem.tap.domain.walletconnect2.domain.models.WalletConnectEvents import com.tangem.tap.features.details.ui.walletconnect.WcSessionForScreen import org.rekotlin.Action @@ -22,7 +23,7 @@ sealed class WalletConnectAction : Action { data class ShowClipboardOrScanQrDialog(val wcUri: String) : WalletConnectAction() //region WalletConnect 2.0 - data object ApproveProposal : WalletConnectAction() + data class ApproveProposal(val proposal: WalletConnectEvents.SessionProposal) : WalletConnectAction() data object RejectProposal : WalletConnectAction() data object SessionEstablished : WalletConnectAction() diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt index 27df30674a..facfd60eab 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt @@ -85,7 +85,11 @@ class WalletConnectMiddleware { } is WalletConnectAction.ApproveProposal -> { scope.launch { + val proposalChainIds = action.proposal.requiredChainIds + action.proposal.optionalChainIds + val proposalBlockchains = + walletConnectInteractor.blockchainHelper.chainIdsToBlockchains(proposalChainIds) val accounts = getWalletManagers() + .filter { walletManager -> proposalBlockchains.contains(walletManager.wallet.blockchain) } .flatMap { val wallet = it.wallet val chainIds = walletConnectInteractor.blockchainHelper.networkIdToChainIdOrNull(