Updated on 2026-08-14
This commit is contained in:
parent
887ea85b3b
commit
e6de882b3b
16 changed files with 273 additions and 62 deletions
|
|
@ -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)
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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?,
|
||||
)
|
||||
|
|
@ -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,
|
||||
|
|
@ -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,
|
||||
)
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue