From ee69ff5fb31f58936366030d3f6c4f9421d8b13e Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 6 Aug 2025 16:52:39 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../sign/BlockAidChainNameConverter.kt | 29 +++++----- .../utils/BlockAidVerificationDelegate.kt | 53 +++++++++++-------- 2 files changed, 45 insertions(+), 37 deletions(-) diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/BlockAidChainNameConverter.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/BlockAidChainNameConverter.kt index 3421317947..c8491f5be6 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/BlockAidChainNameConverter.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/BlockAidChainNameConverter.kt @@ -4,31 +4,32 @@ import com.tangem.blockchain.common.Blockchain import com.tangem.blockchainsdk.utils.fromNetworkId import com.tangem.domain.models.network.Network import com.tangem.utils.converter.Converter -import javax.inject.Inject -internal class BlockAidChainNameConverter @Inject constructor() : Converter { +internal object BlockAidChainNameConverter : Converter { @Suppress("CyclomaticComplexMethod") - override fun convert(value: Network): String { + override fun convert(value: Network): String? { return when (Blockchain.fromNetworkId(value.backendId)) { Blockchain.Arbitrum -> "arbitrum" Blockchain.Avalanche -> "avalanche" Blockchain.AvalancheTestnet -> "avalanche-fuji" - Blockchain.Binance, Blockchain.BSC -> "bsc" - Blockchain.Ethereum -> "ethereum" - Blockchain.EthereumTestnet -> "ethereum-sepolia" - Blockchain.Polygon -> "polygon" - Blockchain.Solana -> "mainnet" - Blockchain.Gnosis -> "gnosis" - Blockchain.Optimism -> "optimism" - Blockchain.ZkSyncEra -> "zksync" - Blockchain.ZkSyncEraTestnet -> "zksync-sepolia" Blockchain.Base -> "base" Blockchain.BaseTestnet -> "base-sepolia" + Blockchain.Binance, Blockchain.BSC -> "bsc" + Blockchain.Ethereum -> "ethereum" + Blockchain.Optimism -> "optimism" + Blockchain.Polygon -> "polygon" + Blockchain.ZkSyncEra -> "zksync" + Blockchain.ZkSyncEraTestnet -> "zksync-sepolia" Blockchain.Blast, Blockchain.BlastTestnet -> "blast" - Blockchain.ApeChain, Blockchain.ApeChainTestnet -> "apechain" Blockchain.Scroll -> "scroll" - else -> value.name + Blockchain.EthereumTestnet -> "ethereum-sepolia" + Blockchain.Gnosis -> "gnosis" + Blockchain.ApeChain, Blockchain.ApeChainTestnet -> "apechain" + + Blockchain.Solana -> "mainnet" + + else -> null } } } \ No newline at end of file diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/utils/BlockAidVerificationDelegate.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/utils/BlockAidVerificationDelegate.kt index 4a774ac505..eb03530b0a 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/utils/BlockAidVerificationDelegate.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/utils/BlockAidVerificationDelegate.kt @@ -17,7 +17,6 @@ import javax.inject.Inject internal class BlockAidVerificationDelegate @Inject constructor( private val blockAidVerifier: BlockAidVerifier, - private val blockAidChainNameConverter: BlockAidChainNameConverter, ) { fun getSecurityStatus( @@ -27,7 +26,6 @@ internal class BlockAidVerificationDelegate @Inject constructor( session: WcSession, accountAddress: String?, ): LceFlow = flow { - emit(Lce.Loading(partialContent = null)) val failedResult = CheckTransactionResult( validation = ValidationResult.FAILED_TO_VALIDATE, simulation = SimulationResult.FailedToSimulate, @@ -36,7 +34,13 @@ internal class BlockAidVerificationDelegate @Inject constructor( emit(Lce.Content(failedResult)) return@flow } - when (method) { + val chain = BlockAidChainNameConverter.convert(network) + if (chain == null) { + emit(Lce.Content(failedResult)) + return@flow + } + emit(Lce.Loading(partialContent = null)) + val params = when (method) { is WcEthMethod -> TransactionParams.Evm(rawSdkRequest.request.params) is WcSolanaMethod.SignAllTransaction -> TransactionParams.Solana(method.transaction) is WcSolanaMethod.SignTransaction -> TransactionParams.Solana(listOf(method.transaction)) @@ -45,25 +49,28 @@ internal class BlockAidVerificationDelegate @Inject constructor( emit(Lce.Content(failedResult)) return@flow } - else -> null - }?.let { params -> - blockAidVerifier.verifyTransaction( - TransactionData( - chain = blockAidChainNameConverter.convert(network), - accountAddress = accountAddress, - method = rawSdkRequest.request.method, - domainUrl = session.sdkModel.appMetaData.url, - params = params, - ), - ).fold( - ifLeft = { - Timber.e("Failed to verify transaction: ${it.localizedMessage}") - emit(Lce.Error(it)) - }, - ifRight = { - emit(Lce.Content(it)) - }, - ) - } ?: emit(Lce.Content(failedResult)) + else -> { + emit(Lce.Content(failedResult)) + return@flow + } + } + + blockAidVerifier.verifyTransaction( + data = TransactionData( + chain = chain, + accountAddress = accountAddress, + method = rawSdkRequest.request.method, + domainUrl = session.sdkModel.appMetaData.url, + params = params, + ), + ).fold( + ifLeft = { + Timber.e("Failed to verify transaction: ${it.localizedMessage}") + emit(Lce.Error(it)) + }, + ifRight = { + emit(Lce.Content(it)) + }, + ) } } \ No newline at end of file