Updated on 2026-08-14
This commit is contained in:
parent
a16a27546c
commit
14135be555
6 changed files with 49 additions and 22 deletions
|
|
@ -106,7 +106,7 @@ class DialogManager : StoreSubscriber<GlobalState> {
|
|||
context.getString(R.string.wallet_connect_scanner_error_unsupported_network)
|
||||
} else {
|
||||
context.getString(R.string.wallet_connect_error_unsupported_blockchains) +
|
||||
state.dialog.networks
|
||||
state.dialog.networks.joinToString()
|
||||
}
|
||||
SimpleAlertDialog.create(
|
||||
titleRes = R.string.wallet_connect_title,
|
||||
|
|
|
|||
|
|
@ -1,23 +1,28 @@
|
|||
package com.tangem.tap.domain.walletconnect2.app
|
||||
|
||||
import com.tangem.blockchain.common.*
|
||||
import com.tangem.domain.common.extensions.*
|
||||
import com.tangem.tap.domain.walletconnect2.domain.*
|
||||
import com.tangem.blockchain.common.Blockchain
|
||||
import com.tangem.domain.common.extensions.fromNetworkId
|
||||
import com.tangem.domain.common.extensions.toNetworkId
|
||||
import com.tangem.tap.domain.walletconnect2.domain.WcBlockchainHelper
|
||||
|
||||
class TangemWcBlockchainHelper : WcBlockchainHelper {
|
||||
override fun chainIdToNetworkIdOrNull(chainId: String): String? {
|
||||
val parsed = chainId.split(CHAIN_SEPARATOR)
|
||||
if (parsed.size != 2) return null
|
||||
when {
|
||||
parsed.first() == EVM_NAMESPACE -> {
|
||||
val chainIdInt = parsed[1].toIntOrNull() ?: return null
|
||||
return Blockchain.fromChainId(chainIdInt)?.toNetworkId()
|
||||
val parsedId = chainId.parseId() ?: return null
|
||||
val blockchain = parsedId.chainIdToBlockchain()
|
||||
|
||||
return blockchain?.toNetworkId()
|
||||
}
|
||||
|
||||
override fun chainIdToMissingNetworkNameOrNull(chainId: String): String? {
|
||||
val parsedId = chainId.parseId() ?: return null
|
||||
val blockchain = parsedId.chainIdToBlockchain()
|
||||
|
||||
return blockchain?.fullName
|
||||
?: if (parsedId.first == EVM_NAMESPACE) {
|
||||
chainId
|
||||
} else {
|
||||
parsedId.first.replaceFirstChar(Char::titlecase)
|
||||
}
|
||||
else -> {
|
||||
val blockchain = Blockchain.fromNetworkId(parsed.first())
|
||||
return if (supportedNonEvmBlockchains.contains(blockchain)) blockchain?.toNetworkId() else null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun networkIdToChainIdOrNull(networkId: String): String? {
|
||||
|
|
@ -57,6 +62,26 @@ private fun Blockchain.getCaip2Namespace(): String? {
|
|||
}
|
||||
}
|
||||
|
||||
private fun String.parseId(): Pair<String, String>? {
|
||||
val parsed = this.split(CHAIN_SEPARATOR)
|
||||
if (parsed.size != 2) return null
|
||||
|
||||
return parsed[0] to parsed[1]
|
||||
}
|
||||
|
||||
private fun Pair<String, String>.chainIdToBlockchain(): Blockchain? {
|
||||
return when (first) {
|
||||
EVM_NAMESPACE -> {
|
||||
second.toIntOrNull()
|
||||
?.let(Blockchain::fromChainId)
|
||||
}
|
||||
else -> {
|
||||
Blockchain.fromNetworkId(networkId = first)
|
||||
.takeIf(supportedNonEvmBlockchains::contains)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val supportedNonEvmBlockchains = emptySet<Blockchain>() // TODO: add supported networks
|
||||
|
||||
private const val EVM_NAMESPACE = "eip155"
|
||||
|
|
|
|||
|
|
@ -75,9 +75,11 @@ class WalletConnectInteractor(
|
|||
is WalletConnectEvents.SessionApprovalError -> {
|
||||
val error = when (wcEvent.error) {
|
||||
is WalletConnectError.ApprovalErrorMissingNetworks -> {
|
||||
val missingNetworks = wcEvent.error.missingChains
|
||||
.map { blockchainHelper.chainIdToNetworkIdOrNull(it) }
|
||||
WalletConnectError.ApprovalErrorAddNetwork(missingNetworks.filterNotNull())
|
||||
val missingNetworks = wcEvent.error.missingChains.mapNotNull {
|
||||
blockchainHelper.chainIdToMissingNetworkNameOrNull(it)
|
||||
}
|
||||
|
||||
WalletConnectError.ApprovalErrorAddNetwork(missingNetworks)
|
||||
}
|
||||
else -> wcEvent.error
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ package com.tangem.tap.domain.walletconnect2.domain
|
|||
interface WcBlockchainHelper {
|
||||
fun chainIdToNetworkIdOrNull(chainId: String): String?
|
||||
|
||||
fun chainIdToMissingNetworkNameOrNull(chainId: String): String?
|
||||
|
||||
fun networkIdToChainIdOrNull(networkId: String): String?
|
||||
|
||||
fun getNamespaceFromFullChainIdOrNull(chainId: String): String?
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import com.tangem.core.navigation.AppScreen
|
|||
import com.tangem.core.navigation.NavigationAction
|
||||
import com.tangem.domain.common.BlockchainNetwork
|
||||
import com.tangem.domain.common.DerivationStyleProvider
|
||||
import com.tangem.domain.common.extensions.fromNetworkId
|
||||
import com.tangem.domain.common.extensions.toNetworkId
|
||||
import com.tangem.domain.common.extensions.withMainContext
|
||||
import com.tangem.domain.common.util.cardTypesResolver
|
||||
|
|
@ -324,10 +323,9 @@ class WalletConnectMiddleware {
|
|||
is WalletConnectAction.SessionRejected -> {
|
||||
when (action.error) {
|
||||
is WalletConnectError.ApprovalErrorAddNetwork -> {
|
||||
val blockchains = action.error.networks.mapNotNull { Blockchain.fromNetworkId(it)?.fullName }
|
||||
store.dispatchOnMain(
|
||||
GlobalAction.ShowDialog(
|
||||
WalletConnectDialog.AddNetwork(blockchains.toString()),
|
||||
WalletConnectDialog.UnsupportedNetwork(action.error.networks),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ class UnlockWalletsUseCase(private val walletsStateHolder: WalletsStateHolder) {
|
|||
value = walletsStateHolder.userWalletsListManager?.asLockable(),
|
||||
raise = {
|
||||
UnlockWalletsError.DataError(
|
||||
cause = IllegalStateException("The lockable user wallets list manager could not be found")
|
||||
cause = IllegalStateException("The lockable user wallets list manager could not be found"),
|
||||
)
|
||||
},
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue