Updated on 2026-08-14
This commit is contained in:
parent
f748b8539d
commit
f1238f5ef8
20 changed files with 528 additions and 88 deletions
|
|
@ -0,0 +1,25 @@
|
|||
package com.tangem.domain.staking
|
||||
|
||||
import arrow.core.Either
|
||||
import com.tangem.blockchain.common.TransactionData
|
||||
import com.tangem.blockchain.common.transaction.Fee
|
||||
import com.tangem.domain.staking.model.stakekit.StakingError
|
||||
import com.tangem.domain.staking.model.stakekit.transaction.StakingTransaction
|
||||
import com.tangem.domain.staking.repositories.StakingErrorResolver
|
||||
import com.tangem.domain.staking.repositories.StakingRepository
|
||||
|
||||
class GetConstructedStakingTransactionUseCase(
|
||||
private val stakingRepository: StakingRepository,
|
||||
private val stakingErrorResolver: StakingErrorResolver,
|
||||
) {
|
||||
|
||||
suspend operator fun invoke(
|
||||
networkId: String,
|
||||
fee: Fee,
|
||||
transactionId: String,
|
||||
): Either<StakingError, Pair<StakingTransaction, TransactionData.Compiled>> = Either.catch {
|
||||
stakingRepository.constructTransaction(networkId, fee, transactionId)
|
||||
}.mapLeft {
|
||||
stakingErrorResolver.resolve(it)
|
||||
}
|
||||
}
|
||||
|
|
@ -22,19 +22,14 @@ class GetStakingTransactionUseCase(
|
|||
userWalletId: UserWalletId,
|
||||
network: Network,
|
||||
params: ActionParams,
|
||||
): Either<StakingError, StakingTransaction> {
|
||||
): Either<StakingError, List<StakingTransaction>> {
|
||||
return Either.catch {
|
||||
val createAction = stakingRepository.createAction(userWalletId, network, params)
|
||||
|
||||
// workaround, sometimes transaction is not created immediately after actions/enter
|
||||
delay(PATCH_TRANSACTION_REQUEST_DELAY)
|
||||
|
||||
val createdTransaction = createAction.transactions
|
||||
?.get(createAction.currentStepIndex)
|
||||
?: error("No available transaction to patch")
|
||||
val patchedTransaction = stakingRepository.constructTransaction(createdTransaction.id)
|
||||
|
||||
patchedTransaction
|
||||
createAction.transactions ?: error("No available transaction to patch")
|
||||
}.mapLeft {
|
||||
stakingErrorResolver.resolve(it)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.tangem.domain.staking
|
||||
|
||||
import arrow.core.Either
|
||||
import com.tangem.domain.staking.model.StakingApproval
|
||||
import com.tangem.domain.staking.model.stakekit.StakingError
|
||||
import com.tangem.domain.staking.repositories.StakingErrorResolver
|
||||
import com.tangem.domain.staking.repositories.StakingRepository
|
||||
|
|
@ -10,9 +11,9 @@ class IsApproveNeededUseCase(
|
|||
private val stakingRepository: StakingRepository,
|
||||
private val stakingErrorResolver: StakingErrorResolver,
|
||||
) {
|
||||
operator fun invoke(cryptoCurrency: CryptoCurrency): Either<StakingError, Boolean> {
|
||||
operator fun invoke(cryptoCurrency: CryptoCurrency): Either<StakingError, StakingApproval> {
|
||||
return Either
|
||||
.catch { stakingRepository.isApproveNeeded(cryptoCurrency) }
|
||||
.catch { stakingRepository.getStakingApproval(cryptoCurrency) }
|
||||
.mapLeft { stakingErrorResolver.resolve(it) }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,12 @@
|
|||
package com.tangem.domain.staking.repositories
|
||||
|
||||
import com.tangem.blockchain.common.TransactionData
|
||||
import com.tangem.blockchain.common.transaction.Fee
|
||||
import com.tangem.domain.core.lce.LceFlow
|
||||
import com.tangem.domain.staking.model.*
|
||||
import com.tangem.domain.staking.model.StakingApproval
|
||||
import com.tangem.domain.staking.model.StakingAvailability
|
||||
import com.tangem.domain.staking.model.StakingEntryInfo
|
||||
import com.tangem.domain.staking.model.UnsubmittedTransactionMetadata
|
||||
import com.tangem.domain.staking.model.stakekit.Yield
|
||||
import com.tangem.domain.staking.model.stakekit.YieldBalance
|
||||
import com.tangem.domain.staking.model.stakekit.YieldBalanceList
|
||||
|
|
@ -66,7 +71,11 @@ interface StakingRepository {
|
|||
|
||||
suspend fun estimateGas(userWalletId: UserWalletId, network: Network, params: ActionParams): StakingGasEstimate
|
||||
|
||||
suspend fun constructTransaction(transactionId: String): StakingTransaction
|
||||
suspend fun constructTransaction(
|
||||
networkId: String,
|
||||
fee: Fee,
|
||||
transactionId: String,
|
||||
): Pair<StakingTransaction, TransactionData.Compiled>
|
||||
|
||||
suspend fun submitHash(transactionId: String, transactionHash: String)
|
||||
|
||||
|
|
@ -77,6 +86,6 @@ interface StakingRepository {
|
|||
/** Returns whether additional staking is possible if there is already active staking */
|
||||
fun isStakeMoreAvailable(networkId: Network.ID): Boolean
|
||||
|
||||
/** Returns whether approve is needed before staking */
|
||||
fun isApproveNeeded(cryptoCurrency: CryptoCurrency): Boolean
|
||||
/** Returns staking approval */
|
||||
fun getStakingApproval(cryptoCurrency: CryptoCurrency): StakingApproval
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue