Documentation Index
Fetch the complete documentation index at: https://docs.privacyboost.io/llms.txt
Use this file to discover all available pages before exploring further.
Transaction History
This guide covers querying and filtering transaction history in the Privacy Boost iOS SDK.
Basic Usage
do {
let transactions = try await sdk.getTransactionHistory(
txType: nil,
tokenAddress: nil,
limit: nil
)
for tx in transactions {
print("\(tx.txType): \(tx.amount) - \(tx.txHash)")
}
} catch {
print("Failed to get history: \(error)")
}
Transaction Type
struct Transaction {
let txHash: String // Transaction hash
let txType: String // "deposit", "withdraw", or "transfer"
let tokenAddress: String // Token contract address
let amount: String // Amount in wei
let direction: String // "incoming" or "outgoing"
let senderPubKey: String // Sender's public key
let receiverPubKeys: [String] // Receiver public keys
let createdAt: UInt64 // Unix timestamp
}
Filtering History
By Transaction Type
// Only deposits
let deposits = try await sdk.getTransactionHistory(
txType: "deposit",
tokenAddress: nil,
limit: nil
)
// Only withdrawals
let withdrawals = try await sdk.getTransactionHistory(
txType: "withdraw",
tokenAddress: nil,
limit: nil
)
// Only transfers
let transfers = try await sdk.getTransactionHistory(
txType: "transfer",
tokenAddress: nil,
limit: nil
)
By Token
let usdcHistory = try await sdk.getTransactionHistory(
txType: nil,
tokenAddress: "0x...usdc-address",
limit: nil
)
With Limit
// Get last 10 transactions
let recent = try await sdk.getTransactionHistory(
txType: nil,
tokenAddress: nil,
limit: 10
)
Combined Filters
// Last 5 USDC deposits
let recentUsdcDeposits = try await sdk.getTransactionHistory(
txType: "deposit",
tokenAddress: "0x...usdc-address",
limit: 5
)
Filter Parameters
| Parameter | Type | Description |
|---|
txType | String? | Filter by type: "deposit", "withdraw", "transfer" |
tokenAddress | String? | Filter by token contract address |
limit | UInt32? | Maximum number of results |
Displaying Transactions in SwiftUI
struct TransactionHistoryView: View {
@State private var transactions: [Transaction] = []
@State private var isLoading = true
@State private var selectedFilter = "all"
let filters = ["all", "deposit", "withdraw", "transfer"]
var body: some View {
VStack {
// Filter picker
Picker("Filter", selection: $selectedFilter) {
ForEach(filters, id: \.self) { filter in
Text(filter.capitalized).tag(filter)
}
}
.pickerStyle(.segmented)
.padding(.horizontal)
// Transaction list
List {
if isLoading {
ProgressView("Loading transactions...")
} else if transactions.isEmpty {
Text("No transactions found")
.foregroundColor(.secondary)
} else {
ForEach(transactions, id: \.txHash) { tx in
TransactionRow(transaction: tx)
}
}
}
}
.task { await loadTransactions() }
.onChange(of: selectedFilter) { _ in
Task { await loadTransactions() }
}
.refreshable {
await loadTransactions()
}
}
private func loadTransactions() async {
isLoading = true
do {
let typeFilter = selectedFilter == "all" ? nil : selectedFilter
transactions = try await sdk.getTransactionHistory(
txType: typeFilter,
tokenAddress: nil,
limit: 50
)
} catch {
print("Failed to load transactions: \(error)")
}
isLoading = false
}
}
struct TransactionRow: View {
let transaction: Transaction
var icon: String {
switch transaction.txType {
case "deposit": return "arrow.down.circle.fill"
case "withdraw": return "arrow.up.circle.fill"
case "transfer": return "arrow.left.arrow.right.circle.fill"
default: return "circle.fill"
}
}
var formattedDate: String {
let date = Date(timeIntervalSince1970: TimeInterval(transaction.createdAt))
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .short
return formatter.string(from: date)
}
var body: some View {
HStack {
Image(systemName: icon)
.foregroundColor(transaction.txType == "deposit" ? .green : .blue)
VStack(alignment: .leading) {
Text(transaction.txType.capitalized)
.font(.headline)
Text(formattedDate)
.font(.caption)
.foregroundColor(.secondary)
}
Spacer()
Text(transaction.amount)
.font(.subheadline)
.monospacedDigit()
}
}
}
Error Handling
do {
let transactions = try await sdk.getTransactionHistory(
txType: nil,
tokenAddress: nil,
limit: nil
)
} catch SDKError.notAuthenticated {
print("Please log in first")
} catch SDKError.networkError(let message) {
print("Network error: \(message)")
} catch {
print("Failed to get history: \(error)")
}
Best Practices
1. Paginate Results
For apps with many transactions, use the limit parameter to load in pages:
func loadPage(offset: Int, pageSize: UInt32 = 20) async throws -> [Transaction] {
return try await sdk.getTransactionHistory(
txType: nil,
tokenAddress: nil,
limit: pageSize
)
}
2. Refresh After Operations
Fetch updated history after deposits, withdrawals, or transfers to show the latest state:
let shieldResult = try await sdk.shield(
tokenAddress: tokenAddress,
amount: amount
)
// Refresh transaction list
let updatedHistory = try await sdk.getTransactionHistory(
txType: nil,
tokenAddress: nil,
limit: 20
)
Next Steps