Updated on 2026-08-14

This commit is contained in:
Tangem 2025-04-09 18:35:40 +05:00
parent 42c8be234e
commit b5f664d225
4 changed files with 27 additions and 17 deletions

View file

@ -302,12 +302,13 @@ internal class StakingModel @Inject constructor(
)
modelScope.launch {
feeLoader.getFee(
onStakingFee = { gasEstimate ->
onStakingFee = { gasEstimate, isFeeApproximate ->
stateController.update(
SetConfirmationStateAssentTransformer(
appCurrencyProvider = Provider { appCurrency },
feeCryptoCurrencyStatus = feeCryptoCurrencyStatus,
fee = gasEstimate,
isFeeApproximate = isFeeApproximate,
cryptoCurrencyStatus = cryptoCurrencyStatus,
),
)
@ -363,13 +364,14 @@ internal class StakingModel @Inject constructor(
stakingEventFactory.createSendTransactionErrorAlert(error)
stateController.update(SetConfirmationStateResetAssentTransformer(cryptoCurrencyStatus))
},
onFeeIncreased = { increasedFee ->
onFeeIncreased = { increasedFee, isFeeApproximate ->
stateController.updateAll(
SetConfirmationStateResetAssentTransformer(cryptoCurrencyStatus),
SetConfirmationStateAssentTransformer(
appCurrencyProvider = Provider { appCurrency },
feeCryptoCurrencyStatus = feeCryptoCurrencyStatus,
fee = increasedFee,
isFeeApproximate = isFeeApproximate,
cryptoCurrencyStatus = cryptoCurrencyStatus,
),
)

View file

@ -18,6 +18,7 @@ import com.tangem.domain.tokens.model.CryptoCurrencyStatus
import com.tangem.domain.tokens.model.staking.getCurrentToken
import com.tangem.domain.transaction.error.GetFeeError
import com.tangem.domain.transaction.usecase.GetFeeUseCase
import com.tangem.domain.transaction.usecase.IsFeeApproximateUseCase
import com.tangem.domain.wallets.models.UserWallet
import com.tangem.features.staking.impl.presentation.state.StakingStateController
import com.tangem.features.staking.impl.presentation.state.StakingStates
@ -38,13 +39,14 @@ internal class StakingFeeTransactionLoader @AssistedInject constructor(
private val stateController: StakingStateController,
private val getFeeUseCase: GetFeeUseCase,
private val estimateGasUseCase: EstimateGasUseCase,
private val isFeeApproximateUseCase: IsFeeApproximateUseCase,
@Assisted private val cryptoCurrencyStatus: CryptoCurrencyStatus,
@Assisted private val userWallet: UserWallet,
@Assisted private val yield: Yield,
) {
suspend fun getFee(
onStakingFee: (Fee) -> Unit,
onStakingFee: (Fee, Boolean) -> Unit,
onStakingFeeError: (StakingError) -> Unit,
onApprovalFee: (TransactionFee) -> Unit,
onFeeError: (GetFeeError) -> Unit,
@ -91,7 +93,7 @@ internal class StakingFeeTransactionLoader @AssistedInject constructor(
amount: BigDecimal,
validatorAddress: String,
onStakingFeeError: (StakingError) -> Unit,
onStakingFee: (Fee) -> Unit,
onStakingFee: (Fee, Boolean) -> Unit,
) {
val sourceAddress = cryptoCurrencyStatus.value.networkAddress?.defaultAddress?.value
?: error("No available address")
@ -144,14 +146,14 @@ internal class StakingFeeTransactionLoader @AssistedInject constructor(
}
}
val amount = Amount(
currencySymbol = gasEstimate.token.symbol,
value = gasEstimate.amount,
decimals = gasEstimate.token.decimals,
)
onStakingFee(
Fee.Common(
Amount(
currencySymbol = gasEstimate.token.symbol,
value = gasEstimate.amount,
decimals = gasEstimate.token.decimals,
),
),
Fee.Common(amount),
isFeeApproximateUseCase(networkId = cryptoCurrencyStatus.currency.network.id, amountType = amount.type),
)
}

View file

@ -5,7 +5,10 @@ import com.tangem.blockchain.common.TransactionData
import com.tangem.blockchain.common.TransactionSender
import com.tangem.blockchain.common.transaction.Fee
import com.tangem.common.ui.amountScreen.models.AmountState
import com.tangem.domain.staking.*
import com.tangem.domain.staking.GetConstructedStakingTransactionUseCase
import com.tangem.domain.staking.GetStakingTransactionsUseCase
import com.tangem.domain.staking.SaveUnsubmittedHashUseCase
import com.tangem.domain.staking.SubmitHashUseCase
import com.tangem.domain.staking.model.SubmitHashData
import com.tangem.domain.staking.model.stakekit.NetworkType
import com.tangem.domain.staking.model.stakekit.PendingAction
@ -19,6 +22,7 @@ import com.tangem.domain.staking.model.stakekit.transaction.StakingTransactionTy
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
import com.tangem.domain.tokens.model.staking.getCurrentToken
import com.tangem.domain.transaction.error.SendTransactionError
import com.tangem.domain.transaction.usecase.IsFeeApproximateUseCase
import com.tangem.domain.transaction.usecase.SendTransactionUseCase
import com.tangem.domain.txhistory.usecase.GetExplorerTransactionUrlUseCase
import com.tangem.domain.utils.convertToSdkAmount
@ -49,6 +53,7 @@ internal class StakingTransactionSender @AssistedInject constructor(
private val getExplorerTransactionUrlUseCase: GetExplorerTransactionUrlUseCase,
private val submitHashUseCase: SubmitHashUseCase,
private val saveUnsubmittedHashUseCase: SaveUnsubmittedHashUseCase,
private val isFeeApproximateUseCase: IsFeeApproximateUseCase,
@Assisted private val cryptoCurrencyStatus: CryptoCurrencyStatus,
@Assisted private val userWallet: UserWallet,
@Assisted private val yield: Yield,
@ -63,7 +68,7 @@ internal class StakingTransactionSender @AssistedInject constructor(
onConstructError: (StakingError) -> Unit,
onSendSuccess: (String) -> Unit,
onSendError: (SendTransactionError?) -> Unit,
onFeeIncreased: (Fee) -> Unit,
onFeeIncreased: (Fee, Boolean) -> Unit,
) {
val state = stateController.value
@ -101,10 +106,10 @@ internal class StakingTransactionSender @AssistedInject constructor(
onSendError = onSendError,
)
} else {
val amount = fee.amount.copy(value = totalFee)
onFeeIncreased(
Fee.Common(
fee.amount.copy(value = totalFee),
),
Fee.Common(amount),
isFeeApproximateUseCase(networkId = cryptoCurrencyStatus.currency.network.id, amountType = amount.type),
)
}
}

View file

@ -13,6 +13,7 @@ internal class SetConfirmationStateAssentTransformer(
private val appCurrencyProvider: Provider<AppCurrency>,
private val feeCryptoCurrencyStatus: CryptoCurrencyStatus?,
private val fee: Fee,
private val isFeeApproximate: Boolean,
private val cryptoCurrencyStatus: CryptoCurrencyStatus,
) : Transformer<StakingUiState> {
@ -31,7 +32,7 @@ internal class SetConfirmationStateAssentTransformer(
rate = feeCryptoCurrencyStatus?.value?.fiatRate,
isFeeConvertibleToFiat = isFeeConvertibleToFiat,
appCurrency = appCurrencyProvider(),
isFeeApproximate = false,
isFeeApproximate = isFeeApproximate,
),
isPrimaryButtonEnabled = with(cryptoCurrencyStatus.value) {
sources.yieldBalanceSource.isActual() && sources.networkSource.isActual()