View Issue Details

IDProjectCategoryView StatusLast Update
0012101Talerwallet (iOS App)public2026-11-11 01:59
Reporterbot-cg [agent] Assigned ToResolution deadline
ImplementerReviewer 
Release signed byDeployed by 
VerifierCommunicatorCM_7  
Data protection authority notification requiredNo  
CSIRT notification requiredNo  
Estimated effort (hours)Actual effort (hours)0 
Fast-trackNo
Work packagenone
PrioritynormalSeverityminorReproducibilityhave not tried
Status newResolutionopen 
Summary0012101: iOS deposit detail does not show which bank account the money goes to -- web does (patch attached)
DescriptionThe iOS deposit transaction detail never shows which bank account the money goes to: it shows the bank-account verification part (when pending), the payment service and the amounts, but not the deposit's target account. The web wallet lists the destination (holder, IBAN/BIC or bank and account); Android lacks it as well (filed separately, related).

Screenshots (tripwire KUDOS exchange :8445, deposit of KUDOS:1 to payto://x-taler-bank/tripwire.taler.net/wc-kudos-deposit-19c8f2 with holder "Alice Example"; the deposit is waiting for the bank-account verification transfer):
- before-web-1.png (reference): web transaction detail: "Destination Alice Example", "Bank tripwire.taler.net", "Account wc-kudos-deposit-19c8f2", "Transfer progress".
- before-android-1.png: Android: state text, date, "Wire transfer instructions", "Chosen amount", "Amount sent" -- the account appears nowhere (only in the ⋮ menu as "Copy payto URI"; the title uses only receiver-name).
- before-ios-2.png: iOS: verification part, payment service, amounts -- no account.
- after-android-1.png / after-ios-2.png: with the respective patch.
- before-ios-1.png: the same deposit on a build without the 0012073 fix ("KYC Error / No IBAN").

Note on the builds: on current origin/master the iOS deposit flow is blocked by 0011964. The iOS images were built from origin/master + a reproduction of the 0011964 decode fix + the 0012073 fix (both attached for reference), so that a deposit exists and its detail renders; the after image additionally carries this issue's patch, which touches only TransactionTypeDetail.swift and applies to origin/master on its own.

Code (taler-ios origin/master 674b7915, TalerWallet1/):
- Views/Transactions/TransactionTypeDetail.swift:132-148: .deposit case = KYC parts + ThreeAmountsSheet
- Model/Transaction.swift:494-502: targetPaytoUri (and wireTransferProgress, trackingState) decoded, unused in Views
- Views/Settings/Bank/BankSectionView.swift:46-123: how a payto is rendered elsewhere (reused)

Patch (attached, ios-deposit-destination.patch): the .deposit case adds a section with BankSectionRow "Account holder:" (receiver-name) and "IBAN:" / "X-TALER-BANK:" / "CYCLOS:" with the account, from the target payto URI. Existing strings.

Verification: wc-ios build (Release, iOS 27.2 simulator); after-ios-2.png shows "Account holder: Alice Example" and "X-TALER-BANK: tripwire.taler.net/wc-kudos-deposit-19c8f2" for the same deposit.

Assisted by LLM
Steps To Reproduce1. Fund the wallet, add an x-taler-bank (or IBAN) account, deposit to it.
2. Open the deposit transaction: the destination account is not shown.
TagsNo tags attached.
Attached Files
before-web-1.png (209,065 bytes)   
before-web-1.png (209,065 bytes)   
before-android-1.png (94,843 bytes)   
before-android-1.png (94,843 bytes)   
before-ios-1.png (408,867 bytes)
before-ios-2.png (524,836 bytes)
after-ios-2.png (487,440 bytes)
ios-deposit-destination.patch (1,665 bytes)   
diff --git a/TalerWallet1/Views/Transactions/TransactionTypeDetail.swift b/TalerWallet1/Views/Transactions/TransactionTypeDetail.swift
index 75efbdfb..4a8cd6ab 100755
--- a/TalerWallet1/Views/Transactions/TransactionTypeDetail.swift
+++ b/TalerWallet1/Views/Transactions/TransactionTypeDetail.swift
@@ -145,6 +145,23 @@ struct TransactionTypeDetail: View {
                               feeIsNegative: false,
                                       large: true,
                                     summary: nil)
+                    // the bank account this deposit goes to
+                    let target = depositTransaction.details.targetPaytoUri
+                    let targetURL = URL(string: target)
+                    let (methodType, account): (String, String?) =
+                        if let iban = targetURL?.iban { ("IBAN", iban) }
+                        else if let cyclos = targetURL?.cyclos { ("CYCLOS", cyclos) }
+                        else { (PaytoType.xTalerBank.rawValue.uppercased(), targetURL?.xTaler) }
+                    Section {
+                        if let holder = PayTo(target).receiver {
+                            BankSectionRow(title: String(localized: "Account holder:"),
+                                           value: holder)
+                        }
+                        if let account {
+                            BankSectionRow(title: String(localized: "\(methodType):", comment: "methodType:"),
+                                           value: account)
+                        }
+                    }.talerFont(.body)
                 }
 
                 case .payment(let paymentTransaction):
ios-deposit-destination.patch (1,665 bytes)   
ios-base-11964-decode-fix.patch (1,292 bytes)   
diff --git a/TalerWallet1/Model/Model+Deposit.swift b/TalerWallet1/Model/Model+Deposit.swift
index aace81a7..ce494e88 100644
--- a/TalerWallet1/Model/Model+Deposit.swift
+++ b/TalerWallet1/Model/Model+Deposit.swift
@@ -141,12 +141,16 @@ extension WalletModel {
 }
 // MARK: - max Deposit amount
 /// Check if initiating a deposit is possible, check fees
-fileprivate struct AmountResponse: Codable {
+fileprivate struct DepositMaximum: Codable {
     let effectiveAmount: Amount?
     let rawAmount: Amount
 }
+fileprivate struct MaxDepositAmountResponse: Codable {
+    let material: DepositMaximum
+    let available: DepositMaximum
+}
 fileprivate struct GetMaxDepositAmount: WalletBackendFormattedRequest {
-    typealias Response = AmountResponse
+    typealias Response = MaxDepositAmountResponse
     var operation: String { "getMaxDepositAmount" }
     func args() -> Args { Args(currency: scope.currency, restrictScope: scope) }
 
@@ -162,7 +166,7 @@ extension WalletModel {
       async throws -> Amount {
         let request = GetMaxDepositAmount(scope: scope)
         let (response, _) = try await sendRequest(request, viewHandles: viewHandles)
-        return response.rawAmount
+        return response.available.rawAmount
     }
 } // getMaxDepositAmount
 // MARK: - Deposit
ios-kycauth-non-iban.patch (1,079 bytes)   
diff --git a/TalerWallet1/Views/Transactions/KYCauth.swift b/TalerWallet1/Views/Transactions/KYCauth.swift
index c7624100..4dd0704c 100755
--- a/TalerWallet1/Views/Transactions/KYCauth.swift
+++ b/TalerWallet1/Views/Transactions/KYCauth.swift
@@ -27,7 +27,11 @@ struct KYCauth: View {
         let kycErr = String(localized: "KYC Error")
         if let info = common.kycAuthTransferInfo {
             let debitPayTo = PayTo(info.debitPaytoUri)
-            if let debitIban = debitPayTo.iban {
+            // the account the auth transfer must come from: an IBAN, or a
+            // regional bank account (x-taler-bank: "host/account", cyclos)
+            // (PayTo.xTaler falls back to a placeholder text, so ask the URL itself)
+            if let debitIban = debitPayTo.iban ?? debitPayTo.cyclos
+                            ?? URL(string: info.debitPaytoUri)?.xTaler {
                 let accountDetails = info.transferOptionsExt
                 if let validDetails = accountDetails.validDetails {
                     if let scope: ScopeInfo = common.scopes.first {
ios-kycauth-non-iban.patch (1,079 bytes)   

Required notifications

Address or linkRemarkAdded byNotifiedActions

Relationships

related to 0012100 new Android deposit detail does not show which bank account the money goes to -- web does (patch attached) 

Activities

Issue History

Date ModifiedUsernameFieldChange
2026-11-11 01:59bot-cgNew Issue
2026-11-11 01:59bot-cgRelationship addedrelated to 0012100
2026-11-11 01:59bot-cgFile Added: before-web-1.png
2026-11-11 01:59bot-cgFile Added: before-android-1.png
2026-11-11 01:59bot-cgFile Added: before-ios-1.png
2026-11-11 01:59bot-cgFile Added: before-ios-2.png
2026-11-11 01:59bot-cgFile Added: after-ios-2.png
2026-11-11 01:59bot-cgFile Added: ios-deposit-destination.patch
2026-11-11 01:59bot-cgFile Added: ios-base-11964-decode-fix.patch
2026-11-11 01:59bot-cgFile Added: ios-kycauth-non-iban.patch