From 458fc16dcb0490f2ebefde2fcf2007d486cf95fa Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 8 Sep 2025 11:59:41 +0300 Subject: [PATCH 1/3] Updated on 2026-08-14 --- .../data/walletconnect/respond/DefaultWcRespondService.kt | 7 ++++++- .../domain/walletconnect/DefaultWcPairUseCaseTest.kt | 1 + gradle/dependencies.toml | 4 ++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/respond/DefaultWcRespondService.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/respond/DefaultWcRespondService.kt index 3b8ea4f337..e2d5ff2e60 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/respond/DefaultWcRespondService.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/respond/DefaultWcRespondService.kt @@ -36,7 +36,12 @@ internal class DefaultWcRespondService : WcRespondService { } is Wallet.Model.JsonRpcResponse.JsonRpcResult -> { Timber.tag(WC_TAG).i("Successful respond $response for request $request") - response.result.right() + if (response.result == null) { + Timber.tag(WC_TAG).e( + "Response result is null, but it should be String. Casted to empty", + ) + } + (response.result ?: "").right() } } continuation.resume(result) diff --git a/data/wallet-connect/src/test/kotlin/com/tangem/domain/walletconnect/DefaultWcPairUseCaseTest.kt b/data/wallet-connect/src/test/kotlin/com/tangem/domain/walletconnect/DefaultWcPairUseCaseTest.kt index b244486335..6058a8f797 100644 --- a/data/wallet-connect/src/test/kotlin/com/tangem/domain/walletconnect/DefaultWcPairUseCaseTest.kt +++ b/data/wallet-connect/src/test/kotlin/com/tangem/domain/walletconnect/DefaultWcPairUseCaseTest.kt @@ -56,6 +56,7 @@ internal class DefaultWcPairUseCaseTest { proposerPublicKey = "", relayProtocol = "", relayData = "", + scopedProperties = null, ) private val sdkVerifyContext: Wallet.Model.VerifyContext get() = Wallet.Model.VerifyContext( diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index f9ef6078d0..972feade5e 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -74,8 +74,8 @@ zxingQrCode = "3.5.1" kotlinSerialization = "1.8.0" kotlinDatetime = "0.6.2" arrow = "1.2.4" # 2.0.1 breaks the build -reownCore = "1.1.2" -reownWeb3 = "1.1.2" +reownCore = "1.4.9" +reownWeb3 = "1.4.9" prettyLogger = "2.2.0" okHttp-prettyLogging = "3.1.0" chucker = "4.0.0" From f57cc0f7965fee1edd28b9ffb060a069944fdaa5 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 8 Sep 2025 18:35:03 +0700 Subject: [PATCH 2/3] Updated on 2026-08-14 --- .../request/DefaultWcRequestService.kt | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/request/DefaultWcRequestService.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/request/DefaultWcRequestService.kt index 92e8b87959..c04fa9a1c7 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/request/DefaultWcRequestService.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/request/DefaultWcRequestService.kt @@ -1,6 +1,8 @@ package com.tangem.data.walletconnect.request import com.reown.walletkit.client.Wallet +import com.tangem.common.extensions.calculateSha256 +import com.tangem.common.extensions.toHexString import com.tangem.data.walletconnect.respond.WcRespondService import com.tangem.data.walletconnect.utils.WC_TAG import com.tangem.data.walletconnect.utils.WcSdkObserver @@ -9,8 +11,9 @@ import com.tangem.domain.walletconnect.WcRequestService import com.tangem.domain.walletconnect.model.WcMethodName import com.tangem.domain.walletconnect.model.sdkcopy.WcSdkSessionRequest import kotlinx.coroutines.channels.Channel -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.receiveAsFlow +import kotlinx.coroutines.flow.* +import org.joda.time.DateTime +import org.joda.time.Duration import timber.log.Timber internal class DefaultWcRequestService( @@ -18,8 +21,12 @@ internal class DefaultWcRequestService( private val respondService: WcRespondService, ) : WcSdkObserver, WcRequestService { + private val expireDuration = Duration.standardSeconds(120) + private val cachedRequest = MutableStateFlow>>(setOf()) private val _wcRequest: Channel> = Channel(Channel.BUFFERED) override val wcRequest: Flow> = _wcRequest.receiveAsFlow() + .filter { filterDuplicateRequest(request = it.second) } + .onEach { saveRequest(request = it.second) } override fun onSessionRequest( sessionRequest: Wallet.Model.SessionRequest, @@ -42,4 +49,25 @@ internal class DefaultWcRequestService( } _wcRequest.trySend(name to sr) } + + private fun filterDuplicateRequest(request: WcSdkSessionRequest): Boolean { + val hash = request.request.params.calculateSha256().toHexString() + val now = DateTime.now().millis + val expiredMillis = now - expireDuration.millis + val cachedRequest = cachedRequest.updateAndGet { + it.filterTo(mutableSetOf()) { (millis, _) -> millis > expiredMillis } + } + + val noHaveCached = cachedRequest.none { (_, hashParams) -> hash == hashParams } + if (!noHaveCached) { + Timber.tag(WC_TAG).i("filter request $request") + } + return noHaveCached + } + + private fun saveRequest(request: WcSdkSessionRequest) { + val hash = request.request.params.calculateSha256().toHexString() + val now = DateTime.now().millis + cachedRequest.update { it + (now to hash) } + } } \ No newline at end of file From aa5774c3a136e6a994c97371941250e17ad6d692 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 10 Sep 2025 13:45:47 +0000 Subject: [PATCH 3/3] Updated on 2026-08-14 --- gradle/tangem_dependencies.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index 2572f02b34..4829355867 100644 --- a/gradle/tangem_dependencies.toml +++ b/gradle/tangem_dependencies.toml @@ -5,13 +5,13 @@ # https://github.com/tangem/tangem-sdk-android/ # https://github.com/tangem/vico -tangemBlockchainSdk = "releases-5.28-1218" +tangemBlockchainSdk = "develop-1216" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "releases-5.28-559" +tangemCardSdk = "develop-561" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ tangemVico = "2.0.0-alpha.25-tangem12" #tangemVico = "0.0.1" # Keep it! - used for local builds ^ -tangemHotSdk = "develop-461" +tangemHotSdk = "develop-527" #tangemHotSdk = "0.0.1" # Keep it! - used for local builds ^