Updated on 2026-08-14

This commit is contained in:
Tangem 2025-04-17 21:50:36 +07:00
parent 887ea85b3b
commit e6de882b3b
16 changed files with 273 additions and 62 deletions

View file

@ -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)
}

View file

@ -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
}

View file

@ -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?,
)

View file

@ -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<WcPersonalEthSignUseCase.SignModel> {
WcSignUseCase.SimpleRun<WcEthMessageSignUseCase.SignModel> {
data class SignModel(
val humanMsg: String,

View file

@ -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<TransactionData> {
fun updateFee(fee: TransactionFee)
}
interface WcEthSignTransactionUseCase :
WcSignUseCase,
WcSignUseCase.SimpleRun<TransactionData> {
fun updateFee(fee: TransactionFee)
}
data class WcEthTransaction(
val isFeeByDap: Boolean,
val fee: TransactionFee,
)

View file

@ -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<WcPairError, WcSession>,
) : Approving
}
}

View file

@ -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<WcPairError, WcSession>,
) : Approving
}
}

View file

@ -1,14 +0,0 @@
package com.tangem.domain.walletconnect.usecase.sign
import arrow.core.Either
data class WcSignState<SignModel>(
val signModel: SignModel,
val domainStep: WcSignStep,
)
sealed interface WcSignStep {
data object PreSign : WcSignStep
data object Signing : WcSignStep
data class Result(val result: Either<Throwable, Unit>) : WcSignStep
}

View file

@ -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<SignModel> {
operator fun invoke(): Flow<WcSignState<SignModel>>
@ -17,4 +16,15 @@ interface WcSignUseCase : WcMethodUseCase {
interface ArgsRun<SignModel, Args> {
operator fun invoke(args: Args): Flow<WcSignState<SignModel>>
}
}
data class WcSignState<SignModel>(
val signModel: SignModel,
val domainStep: WcSignStep,
)
sealed interface WcSignStep {
data object PreSign : WcSignStep
data object Signing : WcSignStep
data class Result(val result: Either<Throwable, Unit>) : WcSignStep
}