Updated on 2026-08-14

This commit is contained in:
Tangem 2025-07-24 14:06:24 +05:00
parent 5c5c31dfc0
commit 3e4e7d8da0
17 changed files with 120 additions and 34 deletions

View file

@ -9,6 +9,7 @@ import com.tangem.domain.walletconnect.model.WcRequestError
import com.tangem.domain.walletconnect.model.WcSession
import com.tangem.domain.walletconnect.model.sdkcopy.WcSdkSessionRequest
import com.tangem.domain.walletconnect.usecase.method.WcAddNetworkUseCase
import com.tangem.domain.walletconnect.usecase.method.WcNetworkDerivationState
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
@ -25,8 +26,10 @@ internal class WcEthAddNetworkUseCase @AssistedInject constructor(
get() = context.rawSdkRequest
override val network: Network
get() = context.network
override val walletAddress: String
get() = context.accountAddress
override val derivationState: WcNetworkDerivationState = when {
context.networkDerivationsCount > 1 -> WcNetworkDerivationState.Multiple(walletAddress = context.accountAddress)
else -> WcNetworkDerivationState.Single
}
override suspend fun approve(): Either<WcRequestError, String> {
return respondService.respond(rawSdkRequest, "")

View file

@ -75,6 +75,7 @@ internal class WcEthNetwork(
rawSdkRequest = request,
network = walletNetwork,
accountAddress = accountAddress,
networkDerivationsCount = networksConverter.filterWalletNetworkForRequest(chainId, wallet).size,
)
return when (method) {
is WcEthMethod.MessageSign -> factories.messageSign.create(context, method)

View file

@ -72,6 +72,7 @@ internal class WcSolanaNetwork(
rawSdkRequest = request,
network = walletNetwork,
accountAddress = accountAddress,
networkDerivationsCount = networksConverter.filterWalletNetworkForRequest(chainId, wallet).size,
)
return when (method) {
is WcSolanaMethod.SignMessage -> factories.messageSign.create(context, method)

View file

@ -7,6 +7,7 @@ import com.tangem.domain.walletconnect.WcAnalyticEvents
import com.tangem.domain.walletconnect.model.WcSession
import com.tangem.domain.walletconnect.model.sdkcopy.WcSdkSessionRequest
import com.tangem.domain.walletconnect.usecase.method.WcMethodUseCase
import com.tangem.domain.walletconnect.usecase.method.WcNetworkDerivationState
import com.tangem.domain.walletconnect.usecase.method.WcSignState
import com.tangem.domain.walletconnect.usecase.method.WcSignUseCase
import kotlinx.coroutines.flow.FlowCollector
@ -23,8 +24,12 @@ internal abstract class BaseWcSignUseCase<MiddleAction, SignModel> :
abstract val context: WcMethodUseCaseContext
override val network: Network get() = context.network
override val session: WcSession get() = context.session
override val walletAddress: String get() = context.accountAddress
override val rawSdkRequest: WcSdkSessionRequest get() = context.rawSdkRequest
override val derivationState: WcNetworkDerivationState
get() = when {
context.networkDerivationsCount > 1 -> WcNetworkDerivationState.Multiple(context.accountAddress)
else -> WcNetworkDerivationState.Single
}
protected val delegate by lazy {
WcSignUseCaseDelegate(
@ -73,6 +78,7 @@ internal class WcMethodUseCaseContext(
val rawSdkRequest: WcSdkSessionRequest,
val network: Network,
val accountAddress: String,
val networkDerivationsCount: Int,
)
internal typealias SignCollector<SignModel> = FlowCollector<WcSignState<SignModel>>

View file

@ -47,6 +47,7 @@ internal class WcSignUseCaseDelegateTest {
network = MockCryptoCurrencyFactory().ethereum.network,
accountAddress = "",
rawSdkRequest = rawRequestMock,
networkDerivationsCount = 1,
session = WcSession(
wallet = MockUserWalletFactory.create(),
networks = setOf(),