diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/data/DefaultLegacyWalletConnectRepository.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/data/DefaultLegacyWalletConnectRepository.kt index 27eb47df0b..0f673b9ba6 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/data/DefaultLegacyWalletConnectRepository.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/data/DefaultLegacyWalletConnectRepository.kt @@ -133,11 +133,29 @@ internal class DefaultLegacyWalletConnectRepository( return } + val optionalMissingNetwork = findMissingNetworks( + namespaces = sessionProposal.optionalNamespaces, + userNamespaces = this@DefaultLegacyWalletConnectRepository.userNamespaces ?: emptyMap(), + ) + val optionalWithoutMissingNetworks = removeMissingNetworks( namespaces = sessionProposal.optionalNamespaces, userNamespaces = this@DefaultLegacyWalletConnectRepository.userNamespaces ?: emptyMap(), ) + // for cases when optionalNamespaces is not empty but we doesn't support none of them + if (optionalMissingNetwork.isNotEmpty() && optionalWithoutMissingNetworks.isEmpty()) { + Timber.i("Not added optional blockchains: $optionalMissingNetwork") + scope.launch { + _events.emit( + WalletConnectEvents.SessionApprovalError( + WalletConnectError.ApprovalErrorMissingNetworks(optionalMissingNetwork.toList()), + ), + ) + } + return + } + val requiredChainIds = sessionProposal.requiredNamespaces.values.flatMap { it.chains ?: emptyList() } val optionalChainIds = optionalWithoutMissingNetworks.toList() val networks = (requiredChainIds + optionalChainIds) diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WalletConnectInteractor.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WalletConnectInteractor.kt index be7ff95089..2ba6a15344 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WalletConnectInteractor.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WalletConnectInteractor.kt @@ -149,21 +149,18 @@ class WalletConnectInteractor( Timber.i("WalletConnect: event: $wcEvent") when (wcEvent) { is WalletConnectEvents.SessionProposal -> { - val unsupportedNetworks = wcEvent.requiredChainIds.filter { - blockchainHelper.chainIdToNetworkIdOrNull(it) == null - } - - val supportedNetworks = (wcEvent.requiredChainIds + wcEvent.optionalChainIds) - .mapNotNull(blockchainHelper::chainIdToFullNameOrNull) - .distinct() - - if (unsupportedNetworks.isNotEmpty() || supportedNetworks.isEmpty()) { + val unsupportedNetworks = wcEvent.requiredChainIds + .filter { blockchainHelper.chainIdToNetworkIdOrNull(it) == null } + if (unsupportedNetworks.isNotEmpty()) { val error = WalletConnectError.ApprovalErrorUnsupportedNetwork(unsupportedNetworks) handler.onSessionRejected(error) return@onEach } - - handler.onProposalReceived(proposal = wcEvent, networksFormatted = supportedNetworks.toString()) + val networksFormatted = (wcEvent.requiredChainIds + wcEvent.optionalChainIds) + .mapNotNull { blockchainHelper.chainIdToFullNameOrNull(it) } + .distinct() + .toString() + handler.onProposalReceived(proposal = wcEvent, networksFormatted = networksFormatted) } is WalletConnectEvents.SessionApprovalError -> { val error = when (wcEvent.error) {