Skip to content

Commit a811382

Browse files
committed
Fix comment and allow small and 0 amount transfer
1 parent 0994f9c commit a811382

File tree

4 files changed

+16
-34
lines changed

4 files changed

+16
-34
lines changed

app/src/main/java/to/bitkit/repositories/BlocktankRepo.kt

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -361,18 +361,12 @@ class BlocktankRepo @Inject constructor(
361361
return@withContext getDefaultLspBalance(params)
362362
}
363363

364-
fun calculateLiquidityOptions(clientBalanceSat: ULong): ChannelLiquidityOptions? {
364+
fun calculateLiquidityOptions(clientBalanceSat: ULong): Result<ChannelLiquidityOptions> {
365365
val blocktankInfo = blocktankState.value.info
366-
if (blocktankInfo == null) {
367-
Logger.warn("calculateLiquidityOptions: blocktankInfo is null", context = TAG)
368-
return null
369-
}
366+
?: return Result.failure(ServiceError.BlocktankInfoUnavailable)
370367

371368
val satsPerEur = getSatsPerEur()
372-
if (satsPerEur == null) {
373-
Logger.warn("calculateLiquidityOptions: satsPerEur is null", context = TAG)
374-
return null
375-
}
369+
?: return Result.failure(ServiceError.CurrencyRateUnavailable)
376370

377371
val existingChannelsTotalSat = totalBtChannelsValueSats(blocktankInfo)
378372

@@ -384,7 +378,7 @@ class BlocktankRepo @Inject constructor(
384378
satsPerEur = satsPerEur
385379
)
386380

387-
return calculateChannelLiquidityOptions(params)
381+
return Result.success(calculateChannelLiquidityOptions(params))
388382
}
389383

390384
private fun getSatsPerEur(): ULong? {

app/src/main/java/to/bitkit/ui/screens/transfer/SpendingAmountScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ private fun SpendingAmountNodeRunning(
230230
PrimaryButton(
231231
text = stringResource(R.string.common__continue),
232232
onClick = onConfirmAmount,
233-
enabled = amountUiState.sats != 0L && amountUiState.sats <= uiState.maxAllowedToSend,
233+
enabled = !uiState.isLoading && amountUiState.sats <= uiState.maxAllowedToSend,
234234
isLoading = uiState.isLoading,
235235
modifier = Modifier.testTag("SpendingAmountContinue")
236236
)

app/src/main/java/to/bitkit/utils/Errors.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ sealed class ServiceError(message: String) : AppError(message) {
3030
data object NodeStillRunning : ServiceError("Node is still running")
3131
data object InvalidNodeSigningMessage : ServiceError("Invalid node signing message")
3232
data object CurrencyRateUnavailable : ServiceError("Currency rate unavailable")
33+
data object BlocktankInfoUnavailable : ServiceError("Blocktank info not available")
3334
data object GeoBlocked : ServiceError("Geo blocked user")
3435
}
3536

app/src/main/java/to/bitkit/viewmodels/TransferViewModel.kt

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ import to.bitkit.repositories.WalletRepo
4242
import to.bitkit.ui.shared.toast.ToastEventBus
4343
import to.bitkit.utils.Logger
4444
import javax.inject.Inject
45-
import kotlin.math.max
4645
import kotlin.math.min
4746
import kotlin.math.roundToLong
4847
import kotlin.time.Duration.Companion.minutes
@@ -88,7 +87,8 @@ class TransferViewModel @Inject constructor(
8887
// region Spending
8988

9089
fun onConfirmAmount(satsAmount: Long) {
91-
if (_transferValues.value.maxLspBalance == 0uL) {
90+
val values = blocktankRepo.calculateLiquidityOptions(satsAmount.toULong()).getOrNull()
91+
if (values == null || values.maxLspBalanceSat == 0uL) {
9292
setTransferEffect(
9393
TransferEffect.ToastError(
9494
title = context.getString(R.string.lightning__spending_amount__error_max__title),
@@ -99,28 +99,20 @@ class TransferViewModel @Inject constructor(
9999
)
100100
return
101101
}
102+
103+
val lspBalance = maxOf(values.defaultLspBalanceSat, values.minLspBalanceSat)
104+
102105
viewModelScope.launch {
103106
_spendingUiState.update { it.copy(isLoading = true) }
104107

105-
val minAmount = getMinAmountToPurchase(satsAmount)
106-
if (satsAmount < minAmount) {
107-
setTransferEffect(
108-
TransferEffect.ToastError(
109-
title = context.getString(R.string.lightning__spending_amount__error_min__title),
110-
description = context.getString(
111-
R.string.lightning__spending_amount__error_min__description
112-
).replace("{amount}", "$minAmount"),
113-
)
114-
)
115-
_spendingUiState.update { it.copy(isLoading = false) }
116-
return@launch
117-
}
118-
119108
withTimeoutOrNull(1.minutes) {
120109
isNodeRunning.first { it }
121110
}
122111

123-
blocktankRepo.createOrder(satsAmount.toULong())
112+
blocktankRepo.createOrder(
113+
spendingBalanceSats = satsAmount.toULong(),
114+
receivingBalanceSats = lspBalance,
115+
)
124116
.onSuccess { order ->
125117
settingsStore.update { it.copy(lightningSetupStep = 0) }
126118
onOrderCreated(order)
@@ -269,11 +261,6 @@ class TransferViewModel @Inject constructor(
269261
}
270262
}
271263

272-
private suspend fun getMinAmountToPurchase(satsAmount: Long = 0L): Long {
273-
val fee = lightningRepo.calculateTotalFee(satsAmount.toULong()).getOrNull() ?: 0u
274-
return max((fee + maxLspFee).toLong(), Env.TransactionDefaults.dustLimit.toLong())
275-
}
276-
277264
private suspend fun onOrderCreated(order: IBtOrder) {
278265
settingsStore.update { it.copy(lightningSetupStep = 0) }
279266
_spendingUiState.update { it.copy(order = order, isAdvanced = false, defaultOrder = null) }
@@ -355,7 +342,7 @@ class TransferViewModel @Inject constructor(
355342
// region Balance Calc
356343

357344
fun updateTransferValues(clientBalanceSat: ULong) {
358-
val options = blocktankRepo.calculateLiquidityOptions(clientBalanceSat)
345+
val options = blocktankRepo.calculateLiquidityOptions(clientBalanceSat).getOrNull()
359346
_transferValues.value = if (options != null) {
360347
TransferValues(
361348
defaultLspBalance = options.defaultLspBalanceSat,

0 commit comments

Comments
 (0)