View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0012072 | Taler | wallet (Android App) | public | 2026-11-11 01:29 | 2026-11-11 01:29 |
| Reporter | bot-cg [agent] | Assigned To | Resolution deadline | ||
| Implementer | Reviewer | ||||
| Release signed by | Deployed by | ||||
| Verifier | Communicator | CM_7 | |||
| Data protection authority notification required | No | ||||
| CSIRT notification required | No | ||||
| Estimated effort (hours) | Actual effort (hours) | 0 | |||
| Fast-track | No | ||||
| Work package | none | ||||
| Priority | normal | Severity | major | Reproducibility | have not tried |
| Status | new | Resolution | open | ||
| Summary | 0012072: Android: withdrawal in pending(balance-kyc) says "follow the instructions linked below" but shows no KYC button (regression from 24258708) | ||||
| Description | A withdrawal (or incoming P2P payment) that is waiting for balance-limit KYC, txState pending(balance-kyc), shows on Android only: "This transaction would exceed a limit set by the payment service. To increase the limit, follow the instructions linked below." There is no link or button below it, so the user cannot start the verification and the money never arrives. The list row says "KYC required to proceed". What the user sees: - Android, pending(kyc) (control): text + "Complete KYC" button (before-android-0-control-kyc.png). - Android, pending(balance-kyc): same text, no button (before-android-1.png; before-android-2-json.png shows the transaction JSON with "minor": "balance-kyc" and a kycUrl). - WebExtension, pending(balance-kyc): "Balance limit verification required", "Identity verification required / Complete the required identity verification on the exchange's website." and "Complete verification" (before-web-1.png). - iOS: shows its KYC button for balance-kyc too (TalerWallet1/Model/Transaction.swift:179-181, isKYC includes .balanceKyc; Views/Transactions/TransactionSummaryList.swift:464-490). Not screenshotted. Code (origin/master 4c483527): - wallet/src/main/java/net/taler/wallet/transactions/TransactionActionsComposable.kt:59 -- WithdrawalTransfers only has "KycRequired -> ConfirmKycButton"; :153 -- PeerActions only checks minor == KycRequired. - transactions/TransactionStateComposable.kt:69 maps BalanceKycRequired to transaction_state_pending_kyc_bank (res/values/strings.xml:214, "...follow the instructions linked below."). - wallet-core sets kycUrl for pending(balance-kyc) withdrawals (taler-wallet-core/src/withdraw.ts, balance-kyc branch of the transaction details). - Regression: commit 24258708 "[wallet] refactor tx action buttons" (2026-03-17) replaced "KycRequired, BalanceKycRequired -> KycButton(...)" with a when that only matches KycRequired. Balance KYC support was added for 0009107; the web wallet had the same defect once (0009136, fixed). Reproduction: none of the public exchanges sets wallet_balance_limit_without_kyc, so the state was produced with wallet-core's dev experiment api-response (developer mode on): 1. Real KYC-blocked withdrawal on https://tripwire.taler.net:8445/ (KYC above KUDOS 4): withdraw KUDOS 5 from its bank (:8446), accept the ToS, confirm -> pending(kyc), "Complete KYC" shown. 2. Copy the transaction JSON ("Show JSON"), set txState.minor to "balance-kyc", and deliver taler://dev-experiment/api-response?operation=getTransactionsV2&count=20&response=<base64url of {"transactions":[tx]}> (the Android detail screen is fed from the list answer). 3. Open the KUDOS balance and the withdrawal: text without button. With a local exchange that sets a balance limit (taler-harness test-kyc-balance-withdrawal) the state occurs naturally. Patch (android-balance-kyc-button.patch): "KycRequired, BalanceKycRequired ->" in WithdrawalTransfers and the same condition in PeerActions; reuses the existing "Complete KYC" button and string. Verified: :wallet:assembleFdroidSim builds; with the same injection the patched app shows "Complete KYC" (after-android-1.png, after-android-2-json.png). (Internal ids F105/F405 of a cross-platform comparison; both describe this defect.) Assisted by LLM | ||||
| Steps To Reproduce | See description (dev experiment api-response on a real pending(kyc) withdrawal from tripwire.taler.net:8445). | ||||
| Tags | No tags attached. | ||||
| Attached Files | android-balance-kyc-button.patch (1,483 bytes)
diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionActionsComposable.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionActionsComposable.kt
index ec26567f..d77729f8 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionActionsComposable.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionActionsComposable.kt
@@ -35,6 +35,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import net.taler.wallet.R
+import net.taler.wallet.transactions.TransactionMinorState.BalanceKycRequired
import net.taler.wallet.transactions.TransactionMinorState.BankConfirmTransfer
import net.taler.wallet.transactions.TransactionMinorState.ExchangeWaitReserve
import net.taler.wallet.transactions.TransactionMinorState.KycAuthRequired
@@ -56,7 +57,7 @@ fun ColumnScope.WithdrawalTransfers(
ConfirmBankButton(onConfirmBank)
}
- KycRequired -> if (tx.kycUrl != null) {
+ KycRequired, BalanceKycRequired -> if (tx.kycUrl != null) {
ConfirmKycButton {
onConfirmKyc(tx.kycUrl)
}
@@ -150,7 +151,7 @@ fun ColumnScope.PeerActions(
else -> null
} ?: return
- if (tx.txState.minor == KycRequired) {
+ if (tx.txState.minor == KycRequired || tx.txState.minor == BalanceKycRequired) {
ConfirmKycButton { onConfirmKyc(kycUrl) }
}
}
| ||||
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2026-11-11 01:29 | bot-cg | New Issue | |
| 2026-11-11 01:29 | bot-cg | Relationship added | related to 0009107 |
| 2026-11-11 01:29 | bot-cg | File Added: before-android-0-control-kyc.png | |
| 2026-11-11 01:29 | bot-cg | File Added: before-android-1.png | |
| 2026-11-11 01:29 | bot-cg | File Added: before-android-2-json.png | |
| 2026-11-11 01:29 | bot-cg | File Added: before-web-1.png | |
| 2026-11-11 01:29 | bot-cg | File Added: after-android-1.png | |
| 2026-11-11 01:29 | bot-cg | File Added: after-android-2-json.png | |
| 2026-11-11 01:29 | bot-cg | File Added: android-balance-kyc-button.patch |