From e6de882b3bdccb104a7affee2262b080d8c7f914 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 17 Apr 2025 21:50:36 +0700 Subject: [PATCH] Updated on 2026-08-14 --- data/wallet-connect/build.gradle.kts | 1 + .../di/WalletConnectDataModule.kt | 2 + ...e.kt => DefaultWcEthMessageSignUseCase.kt} | 26 ++++++--- .../DefaultWcEthSendTransactionUseCase.kt | 57 ++++++++++++++++++ .../DefaultWcEthSignTransactionUseCase.kt | 58 +++++++++++++++++++ .../network/ethereum/WcEthNetwork.kt | 31 ++++++++-- .../walletconnect/sign/BaseWcSignUseCase.kt | 8 ++- domain/wallet-connect/build.gradle.kts | 10 +++- .../domain/walletconnect/model/WcEthMethod.kt | 10 +++- .../model/WcEthTransactionParams.kt | 28 +++++++++ ...nUseCase.kt => WcEthMessageSignUseCase.kt} | 5 +- .../ethereum/WcEthTransactionUseCase.kt | 24 ++++++++ .../walletconnect/usecase/pair/WcPairState.kt | 23 -------- .../usecase/pair/WcPairUseCase.kt | 20 +++++++ .../walletconnect/usecase/sign/WcSignState.kt | 14 ----- .../usecase/sign/WcSignUseCase.kt | 18 ++++-- 16 files changed, 273 insertions(+), 62 deletions(-) rename data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/{DefaultWcPersonalEthSignUseCase.kt => DefaultWcEthMessageSignUseCase.kt} (78%) create mode 100644 data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/DefaultWcEthSendTransactionUseCase.kt create mode 100644 data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/DefaultWcEthSignTransactionUseCase.kt create mode 100644 domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthTransactionParams.kt rename domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/ethereum/{WcPersonalEthSignUseCase.kt => WcEthMessageSignUseCase.kt} (66%) create mode 100644 domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/ethereum/WcEthTransactionUseCase.kt delete mode 100644 domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/pair/WcPairState.kt delete mode 100644 domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/sign/WcSignState.kt diff --git a/data/wallet-connect/build.gradle.kts b/data/wallet-connect/build.gradle.kts index e130216844..cb90e05209 100644 --- a/data/wallet-connect/build.gradle.kts +++ b/data/wallet-connect/build.gradle.kts @@ -15,6 +15,7 @@ dependencies { implementation(projects.domain.walletConnect) implementation(projects.domain.walletConnect.models) implementation(projects.domain.transaction) + implementation(projects.domain.transaction.models) implementation(projects.domain.wallets) implementation(projects.domain.wallets.models) implementation(projects.domain.tokens) diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/di/WalletConnectDataModule.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/di/WalletConnectDataModule.kt index 609ebb2959..1a5345959e 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/di/WalletConnectDataModule.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/di/WalletConnectDataModule.kt @@ -131,10 +131,12 @@ internal object WalletConnectDataModule { @SdkMoshi moshi: Moshi, excludedBlockchains: ExcludedBlockchains, sessionsManager: WcSessionsManager, + factories: WcEthNetwork.Factories, ): WcEthNetwork = WcEthNetwork( moshi = moshi, excludedBlockchains = excludedBlockchains, sessionsManager = sessionsManager, + factories = factories, ) @Provides diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/DefaultWcPersonalEthSignUseCase.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/DefaultWcEthMessageSignUseCase.kt similarity index 78% rename from data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/DefaultWcPersonalEthSignUseCase.kt rename to data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/DefaultWcEthMessageSignUseCase.kt index 98e6f2db49..8421ccb613 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/DefaultWcPersonalEthSignUseCase.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/DefaultWcEthMessageSignUseCase.kt @@ -14,23 +14,26 @@ import com.tangem.data.walletconnect.sign.SignStateConverter.toResult import com.tangem.data.walletconnect.sign.WcMethodUseCaseContext import com.tangem.domain.transaction.usecase.SignUseCase import com.tangem.domain.walletconnect.model.WcEthMethod -import com.tangem.domain.walletconnect.usecase.ethereum.WcPersonalEthSignUseCase +import com.tangem.domain.walletconnect.usecase.ethereum.WcEthMessageSignUseCase import com.tangem.domain.walletconnect.usecase.sign.WcSignState import com.tangem.domain.walletmanager.WalletManagersFacade +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.emitAll import kotlinx.coroutines.flow.flow -internal class DefaultWcPersonalEthSignUseCase( +internal class DefaultWcEthMessageSignUseCase @AssistedInject constructor( override val respondService: WcRespondService, - override val context: WcMethodUseCaseContext, - private val method: WcEthMethod.PersonalEthSign, + @Assisted override val context: WcMethodUseCaseContext, + @Assisted private val method: WcEthMethod.MessageSign, private val walletManagersFacade: WalletManagersFacade, private val signUseCase: SignUseCase, -) : BaseWcSignUseCase(), - WcPersonalEthSignUseCase { +) : BaseWcSignUseCase(), + WcEthMessageSignUseCase { - override val onSign: OnSign = collector@{ state -> + override val onSign: OnSign = collector@{ state -> val hashToSign = LegacySdkHelper.createMessageData(state.signModel.rawMsg) val userWallet = session.wallet val walletManager = walletManagersFacade.getOrCreateWalletManager(userWallet.walletId, network) @@ -50,14 +53,19 @@ internal class DefaultWcPersonalEthSignUseCase( emit(state.toResult(wcRespondResult)) } - override fun invoke(): Flow> = flow { - val model = WcPersonalEthSignUseCase.SignModel( + override fun invoke(): Flow> = flow { + val model = WcEthMessageSignUseCase.SignModel( rawMsg = method.message, account = method.account, humanMsg = LegacySdkHelper.hexToAscii(method.message).orEmpty(), ) emitAll(delegate(model)) } + + @AssistedFactory + interface Factory { + fun create(context: WcMethodUseCaseContext, method: WcEthMethod.MessageSign): DefaultWcEthMessageSignUseCase + } } object LegacySdkHelper { diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/DefaultWcEthSendTransactionUseCase.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/DefaultWcEthSendTransactionUseCase.kt new file mode 100644 index 0000000000..76e1b410de --- /dev/null +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/DefaultWcEthSendTransactionUseCase.kt @@ -0,0 +1,57 @@ +package com.tangem.data.walletconnect.network.ethereum + +import arrow.core.left +import com.tangem.blockchain.common.HEX_PREFIX +import com.tangem.blockchain.common.TransactionData +import com.tangem.blockchain.common.transaction.TransactionFee +import com.tangem.data.walletconnect.respond.WcRespondService +import com.tangem.data.walletconnect.sign.BaseWcSignUseCase +import com.tangem.data.walletconnect.sign.OnSign +import com.tangem.data.walletconnect.sign.SignStateConverter.toResult +import com.tangem.data.walletconnect.sign.WcMethodUseCaseContext +import com.tangem.domain.transaction.usecase.SendTransactionUseCase +import com.tangem.domain.walletconnect.model.WcEthMethod +import com.tangem.domain.walletconnect.usecase.ethereum.WcEthSendTransactionUseCase +import com.tangem.domain.walletconnect.usecase.sign.WcSignState +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject +import kotlinx.coroutines.flow.Flow + +internal class DefaultWcEthSendTransactionUseCase @AssistedInject constructor( + @Assisted override val context: WcMethodUseCaseContext, + @Assisted private val method: WcEthMethod.SendTransaction, + override val respondService: WcRespondService, + private val sendTransaction: SendTransactionUseCase, +) : BaseWcSignUseCase(), + WcEthSendTransactionUseCase { + + override val onSign: OnSign = collector@{ state -> + val hash = sendTransaction(state.signModel, wallet, network) + .onLeft { error -> + val sendError = IllegalArgumentException(error.toString()) // todo(wc) use domain error + emit(state.toResult(sendError.left())) + } + .getOrNull() ?: return@collector + val respondHash = if (hash.startsWith(HEX_PREFIX)) hash else HEX_PREFIX + hash + val respondResult = respondService.respond(rawSdkRequest, respondHash) + emit(state.toResult(respondResult)) + } + + override fun updateFee(fee: TransactionFee) { + TODO("Not yet implemented") + } + + override fun invoke(): Flow> { + method + TODO("Not yet implemented") + } + + @AssistedFactory + interface Factory { + fun create( + context: WcMethodUseCaseContext, + method: WcEthMethod.SendTransaction, + ): DefaultWcEthSendTransactionUseCase + } +} \ No newline at end of file diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/DefaultWcEthSignTransactionUseCase.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/DefaultWcEthSignTransactionUseCase.kt new file mode 100644 index 0000000000..d8a01823c7 --- /dev/null +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/DefaultWcEthSignTransactionUseCase.kt @@ -0,0 +1,58 @@ +package com.tangem.data.walletconnect.network.ethereum + +import arrow.core.left +import com.tangem.blockchain.common.HEX_PREFIX +import com.tangem.blockchain.common.TransactionData +import com.tangem.blockchain.common.transaction.TransactionFee +import com.tangem.common.extensions.toHexString +import com.tangem.data.walletconnect.respond.WcRespondService +import com.tangem.data.walletconnect.sign.BaseWcSignUseCase +import com.tangem.data.walletconnect.sign.OnSign +import com.tangem.data.walletconnect.sign.SignStateConverter.toResult +import com.tangem.data.walletconnect.sign.WcMethodUseCaseContext +import com.tangem.domain.transaction.usecase.PrepareForSendUseCase +import com.tangem.domain.walletconnect.model.WcEthMethod +import com.tangem.domain.walletconnect.usecase.ethereum.WcEthSignTransactionUseCase +import com.tangem.domain.walletconnect.usecase.sign.WcSignState +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject +import kotlinx.coroutines.flow.Flow + +internal class DefaultWcEthSignTransactionUseCase @AssistedInject constructor( + override val respondService: WcRespondService, + private val prepareForSend: PrepareForSendUseCase, + @Assisted override val context: WcMethodUseCaseContext, + @Assisted private val method: WcEthMethod.SignTransaction, +) : BaseWcSignUseCase(), + WcEthSignTransactionUseCase { + + override val onSign: OnSign = collector@{ state -> + val hash = prepareForSend(state.signModel, wallet, network) + .onLeft { error -> + emit(state.toResult(error.left())) + } + .getOrNull() ?: return@collector + val hashString = hash.toHexString() + val respondHash = if (hashString.startsWith(HEX_PREFIX)) hashString else HEX_PREFIX + hashString + val respondResult = respondService.respond(rawSdkRequest, respondHash) + emit(state.toResult(respondResult)) + } + + override fun updateFee(fee: TransactionFee) { + TODO("Not yet implemented") + } + + override fun invoke(): Flow> { + method + TODO("Not yet implemented") + } + + @AssistedFactory + interface Factory { + fun create( + context: WcMethodUseCaseContext, + method: WcEthMethod.SignTransaction, + ): DefaultWcEthSignTransactionUseCase + } +} \ No newline at end of file diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/WcEthNetwork.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/WcEthNetwork.kt index a682ccfd11..171bb54185 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/WcEthNetwork.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/WcEthNetwork.kt @@ -7,18 +7,22 @@ import com.tangem.data.walletconnect.model.CAIP2 import com.tangem.data.walletconnect.model.NamespaceKey import com.tangem.data.walletconnect.request.WcRequestToUseCaseConverter import com.tangem.data.walletconnect.request.WcRequestToUseCaseConverter.Companion.fromJson +import com.tangem.data.walletconnect.sign.WcMethodUseCaseContext import com.tangem.data.walletconnect.utils.WcNamespaceConverter import com.tangem.domain.tokens.model.Network import com.tangem.domain.walletconnect.model.WcEthMethod +import com.tangem.domain.walletconnect.model.WcEthTransactionParams import com.tangem.domain.walletconnect.model.sdkcopy.WcSdkSessionRequest import com.tangem.domain.walletconnect.repository.WcSessionsManager import com.tangem.domain.walletconnect.usecase.WcMethodUseCase import com.tangem.domain.wallets.models.UserWallet +import jakarta.inject.Inject internal class WcEthNetwork constructor( private val moshi: Moshi, private val excludedBlockchains: ExcludedBlockchains, private val sessionsManager: WcSessionsManager, + private val factories: Factories, ) : WcRequestToUseCaseConverter, WcNamespaceConverter { override val namespaceKey: NamespaceKey = NamespaceKey("eip155") @@ -29,8 +33,12 @@ internal class WcEthNetwork constructor( val method: WcEthMethod = name.toMethod(request) ?: return null val session = sessionsManager.findSessionByTopic(request.topic) ?: return null val network = toNetwork(request.chainId.orEmpty(), session.wallet) ?: return null + val context = WcMethodUseCaseContext(session = session, rawSdkRequest = request, network = network) + return when (method) { - is WcEthMethod.PersonalEthSign -> TODO() + is WcEthMethod.MessageSign -> factories.messageSign.create(context, method) + is WcEthMethod.SendTransaction -> factories.sendTransaction.create(context, method) + is WcEthMethod.SignTransaction -> factories.signTransaction.create(context, method) } } @@ -44,12 +52,21 @@ internal class WcEthNetwork constructor( val messageIndex = if (this == Name.EthSign) 1 else 0 val account = list.getOrNull(accountIndex) ?: return@let null val message = list.getOrNull(messageIndex) ?: return@let null - WcEthMethod.PersonalEthSign(account = account, message = message) + WcEthMethod.MessageSign(account = account, message = message) } Name.SignTypeData -> TODO() Name.SignTypeDataV4 -> TODO() - Name.SignTransaction -> TODO() - Name.SendTransaction -> TODO() + Name.SignTransaction, + Name.SendTransaction, + -> moshi.fromJson>(rawParams) + ?.firstOrNull() + ?.let { + if (this == Name.SignTransaction) { + WcEthMethod.SignTransaction(transaction = it) + } else { + WcEthMethod.SendTransaction(transaction = it) + } + } } } @@ -81,4 +98,10 @@ internal class WcEthNetwork constructor( reference = chainId.toString(), ) } + + internal class Factories @Inject constructor( + val messageSign: DefaultWcEthMessageSignUseCase.Factory, + val sendTransaction: DefaultWcEthSendTransactionUseCase.Factory, + val signTransaction: DefaultWcEthSignTransactionUseCase.Factory, + ) } \ No newline at end of file diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/BaseWcSignUseCase.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/BaseWcSignUseCase.kt index c1d53f51b9..d4e8696371 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/BaseWcSignUseCase.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/BaseWcSignUseCase.kt @@ -1,17 +1,18 @@ package com.tangem.data.walletconnect.sign -import com.tangem.domain.walletconnect.model.WcSession -import com.tangem.domain.walletconnect.model.sdkcopy.WcSdkSessionRequest import com.tangem.data.walletconnect.respond.WcRespondService import com.tangem.domain.tokens.model.Network +import com.tangem.domain.walletconnect.model.WcSession +import com.tangem.domain.walletconnect.model.sdkcopy.WcSdkSessionRequest import com.tangem.domain.walletconnect.usecase.WcMethodUseCase import com.tangem.domain.walletconnect.usecase.sign.WcSignState import com.tangem.domain.walletconnect.usecase.sign.WcSignUseCase +import com.tangem.domain.wallets.models.UserWallet import kotlinx.coroutines.flow.FlowCollector internal abstract class BaseWcSignUseCase : WcMethodUseCase, - WcSignUseCase.FinalAction, + WcSignUseCase, FinalActionCollector, MiddleActionCollector { @@ -21,6 +22,7 @@ internal abstract class BaseWcSignUseCase : override val network: Network get() = context.network override val session: WcSession get() = context.session override val rawSdkRequest: WcSdkSessionRequest get() = context.rawSdkRequest + val wallet: UserWallet get() = session.wallet protected val delegate by lazy { WcSignUseCaseDelegate( diff --git a/domain/wallet-connect/build.gradle.kts b/domain/wallet-connect/build.gradle.kts index e6bd5dea5d..f20c31f3c4 100644 --- a/domain/wallet-connect/build.gradle.kts +++ b/domain/wallet-connect/build.gradle.kts @@ -1,8 +1,13 @@ plugins { - alias(deps.plugins.kotlin.jvm) + alias(deps.plugins.android.library) + alias(deps.plugins.kotlin.android) id("configuration") } +android { + namespace = "com.tangem.domain.walletconnect" +} + dependencies { /* Project - Domain */ implementation(projects.domain.core) @@ -12,4 +17,7 @@ dependencies { /* Other */ implementation(deps.moshi.adapters) + + /* Tangem libraries */ + implementation(tangemDeps.blockchain) } \ No newline at end of file diff --git a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthMethod.kt b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthMethod.kt index ee9e7bfc98..15d22104ba 100644 --- a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthMethod.kt +++ b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthMethod.kt @@ -2,8 +2,16 @@ package com.tangem.domain.walletconnect.model sealed interface WcEthMethod : WcMethod { - data class PersonalEthSign( + data class MessageSign( val message: String, val account: String, ) : WcEthMethod + + data class SendTransaction( + val transaction: WcEthTransactionParams, + ) : WcEthMethod + + data class SignTransaction( + val transaction: WcEthTransactionParams, + ) : WcEthMethod } \ No newline at end of file diff --git a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthTransactionParams.kt b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthTransactionParams.kt new file mode 100644 index 0000000000..cdde8975d6 --- /dev/null +++ b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthTransactionParams.kt @@ -0,0 +1,28 @@ +package com.tangem.domain.walletconnect.model + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +data class WcEthTransactionParams( + @Json(name = "from") + val from: String, + + @Json(name = "to") + val to: String?, + + @Json(name = "data") + val data: String, + + @Json(name = "gas") + val gas: String?, + + @Json(name = "gasPrice") + val gasPrice: String?, + + @Json(name = "value") + val value: String?, + + @Json(name = "nonce") + val nonce: String?, +) \ No newline at end of file diff --git a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/ethereum/WcPersonalEthSignUseCase.kt b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/ethereum/WcEthMessageSignUseCase.kt similarity index 66% rename from domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/ethereum/WcPersonalEthSignUseCase.kt rename to domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/ethereum/WcEthMessageSignUseCase.kt index b853bbb096..0895241c36 100644 --- a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/ethereum/WcPersonalEthSignUseCase.kt +++ b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/ethereum/WcEthMessageSignUseCase.kt @@ -2,10 +2,9 @@ package com.tangem.domain.walletconnect.usecase.ethereum import com.tangem.domain.walletconnect.usecase.sign.WcSignUseCase -interface WcPersonalEthSignUseCase : +interface WcEthMessageSignUseCase : WcSignUseCase, - WcSignUseCase.FinalAction, - WcSignUseCase.SimpleRun { + WcSignUseCase.SimpleRun { data class SignModel( val humanMsg: String, diff --git a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/ethereum/WcEthTransactionUseCase.kt b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/ethereum/WcEthTransactionUseCase.kt new file mode 100644 index 0000000000..7df50defdc --- /dev/null +++ b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/ethereum/WcEthTransactionUseCase.kt @@ -0,0 +1,24 @@ +package com.tangem.domain.walletconnect.usecase.ethereum + +import com.tangem.blockchain.common.TransactionData +import com.tangem.blockchain.common.transaction.TransactionFee +import com.tangem.domain.walletconnect.usecase.sign.WcSignUseCase + +interface WcEthSendTransactionUseCase : + WcSignUseCase, + WcSignUseCase.SimpleRun { + + fun updateFee(fee: TransactionFee) +} + +interface WcEthSignTransactionUseCase : + WcSignUseCase, + WcSignUseCase.SimpleRun { + + fun updateFee(fee: TransactionFee) +} + +data class WcEthTransaction( + val isFeeByDap: Boolean, + val fee: TransactionFee, +) \ No newline at end of file diff --git a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/pair/WcPairState.kt b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/pair/WcPairState.kt deleted file mode 100644 index 07edd2b5f8..0000000000 --- a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/pair/WcPairState.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.tangem.domain.walletconnect.usecase.pair - -import arrow.core.Either -import com.tangem.domain.walletconnect.model.WcPairError -import com.tangem.domain.walletconnect.model.WcSession -import com.tangem.domain.walletconnect.model.WcSessionApprove -import com.tangem.domain.walletconnect.model.WcSessionProposal - -sealed interface WcPairState { - data object Loading : WcPairState - data class Error(val error: WcPairError) : WcPairState - data class Proposal(val dAppSession: WcSessionProposal) : WcPairState - - sealed interface Approving : WcPairState { - val session: WcSessionApprove - - data class Loading(override val session: WcSessionApprove) : Approving - data class Result( - override val session: WcSessionApprove, - val result: Either, - ) : Approving - } -} \ No newline at end of file diff --git a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/pair/WcPairUseCase.kt b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/pair/WcPairUseCase.kt index 2de6663dbd..b926213140 100644 --- a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/pair/WcPairUseCase.kt +++ b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/pair/WcPairUseCase.kt @@ -1,6 +1,10 @@ package com.tangem.domain.walletconnect.usecase.pair +import arrow.core.Either +import com.tangem.domain.walletconnect.model.WcPairError +import com.tangem.domain.walletconnect.model.WcSession import com.tangem.domain.walletconnect.model.WcSessionApprove +import com.tangem.domain.walletconnect.model.WcSessionProposal import kotlinx.coroutines.flow.Flow interface WcPairUseCase { @@ -11,4 +15,20 @@ interface WcPairUseCase { fun reject() enum class Source { QR, DEEPLINK, CLIPBOARD, ETC } +} + +sealed interface WcPairState { + data object Loading : WcPairState + data class Error(val error: WcPairError) : WcPairState + data class Proposal(val dAppSession: WcSessionProposal) : WcPairState + + sealed interface Approving : WcPairState { + val session: WcSessionApprove + + data class Loading(override val session: WcSessionApprove) : Approving + data class Result( + override val session: WcSessionApprove, + val result: Either, + ) : Approving + } } \ No newline at end of file diff --git a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/sign/WcSignState.kt b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/sign/WcSignState.kt deleted file mode 100644 index 047148fade..0000000000 --- a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/sign/WcSignState.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.tangem.domain.walletconnect.usecase.sign - -import arrow.core.Either - -data class WcSignState( - val signModel: SignModel, - val domainStep: WcSignStep, -) - -sealed interface WcSignStep { - data object PreSign : WcSignStep - data object Signing : WcSignStep - data class Result(val result: Either) : WcSignStep -} \ No newline at end of file diff --git a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/sign/WcSignUseCase.kt b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/sign/WcSignUseCase.kt index a0db5aa0e7..f011b82087 100644 --- a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/sign/WcSignUseCase.kt +++ b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/usecase/sign/WcSignUseCase.kt @@ -1,14 +1,13 @@ package com.tangem.domain.walletconnect.usecase.sign +import arrow.core.Either import com.tangem.domain.walletconnect.usecase.WcMethodUseCase import kotlinx.coroutines.flow.Flow interface WcSignUseCase : WcMethodUseCase { - interface FinalAction { - fun cancel() - fun sign() - } + fun cancel() + fun sign() interface SimpleRun { operator fun invoke(): Flow> @@ -17,4 +16,15 @@ interface WcSignUseCase : WcMethodUseCase { interface ArgsRun { operator fun invoke(args: Args): Flow> } +} + +data class WcSignState( + val signModel: SignModel, + val domainStep: WcSignStep, +) + +sealed interface WcSignStep { + data object PreSign : WcSignStep + data object Signing : WcSignStep + data class Result(val result: Either) : WcSignStep } \ No newline at end of file