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.
API Reference
Complete API reference for the Privacy Boost iOS SDK.
Generated Documentation
Full API documentation can be generated using cargo doc:
# From rust-sdk directory
make docs-rust
# iOS-specific docs
cargo doc --no-deps -p privacy-boost-ios
PrivacyBoost
Main SDK class for iOS.
Constructor
init(config: PrivacyBoostConfig) throws
Creates a new SDK instance.
Parameters:
config - SDK configuration
Throws: SDKError.internalError if initialization fails
Properties
var isConnected: Bool { get }
var isAuthenticated: Bool { get }
Connection & Authentication Methods
authenticate
func authenticate(wallet: WalletDelegate, keySource: KeySource? = nil, tokenProvider: TokenProvider? = nil) async throws -> AuthResult
Connect a wallet, derive privacy keys, and authenticate with the Privacy Boost backend in a single call.
Parameters:
wallet - Implementation of WalletDelegate protocol
keySource - Optional key derivation source. If nil and no persistence is configured, defaults to .walletDerived. If nil with persistence configured and no existing vault, an error is thrown.
tokenProvider - Optional custom token provider. If nil, the SDK sends the login payload directly to the Privacy Boost backend. Supply a TokenProvider to route authentication through your own server.
Returns: AuthResult - either .authenticated(LoginResult) or .credentialRequired(CredentialChallenge)
Throws:
SDKError.walletError if signing fails
SDKError.invalidConfig if configuration is invalid or keySource is required but missing
SDKError.networkError if backend unreachable
submitCredential
func submitCredential(_ credential: String, tokenProvider: TokenProvider? = nil) async throws -> LoginResult
Submit a credential when authenticate() returns .credentialRequired.
Parameters:
credential - The credential string
tokenProvider - Optional custom token provider for routing authentication through your own server
Returns: LoginResult with privacy address and MPK
logout
End session completely, clear all state.
clearSession
Clear JWT only, keep keys for quick re-auth.
State Accessors
func getPrivacyAddress() -> String?
func getMpk() -> String?
func getWalletAddress() -> String?
Balance Methods
getBalance
func getBalance(tokenAddress: String) async throws -> TokenBalance
Get balance for a specific token.
Parameters:
tokenAddress - ERC-20 token contract address
Returns: TokenBalance with shielded and wallet amounts
getAllBalances
func getAllBalances() async throws -> [TokenBalance]
Get all token balances.
Vault Operations
deposit
func deposit(tokenAddress: String, amount: String) async throws -> DepositResult
Deposit tokens into the shielded pool.
Parameters:
tokenAddress - Token contract address
amount - Amount in wei (as string)
Returns: DepositResult with transaction hash
withdraw
func withdraw(tokenAddress: String, amount: String, recipient: String) async throws -> UnshieldResult
Withdraw tokens from the shielded pool.
Parameters:
tokenAddress - Token contract address
amount - Amount in wei (as string)
recipient - Recipient Ethereum address
Returns: UnshieldResult with transaction hash
send
func send(tokenAddress: String, amount: String, recipientPrivacyAddress: String) async throws -> TransferResult
Send a private transfer.
Parameters:
tokenAddress - Token contract address
amount - Amount in wei (as string)
recipientPrivacyAddress - Recipient’s 194-char privacy address
Returns: TransferResult with transaction hash
Transaction History
func getTransactionHistory(
txType: String?,
tokenAddress: String?,
limit: UInt32?
) async throws -> [Transaction]
Get transaction history.
Parameters:
txType - Filter by type: “deposit”, “withdraw”, “transfer”
tokenAddress - Filter by token
limit - Maximum results
Session Persistence
exportSession
func exportSession() -> ExportedSession?
Export session data for persistence.
Returns: ExportedSession or nil if not authenticated
importSession
func importSession(_ session: ExportedSession) throws -> Bool
Import a previously exported session.
Returns: true if session is valid and imported
Address Lookup
resolveIdentity
func resolveIdentity(identifier: String) async throws -> IdentityResult
Look up a user’s privacy address by MPK or Ethereum address.
Parameters:
identifier - MPK or Ethereum address
Returns: IdentityResult with privacy address and public keys
Utilities
func isValidPrivacyAddress(_ address: String) -> Bool
func isValidAddress(_ address: String) -> Bool
func parseAmount(_ amount: String, decimals: UInt8) throws -> String
func formatAmount(_ wei: String, decimals: UInt8) throws -> String
Module Functions
func sdkVersion() -> String
func generateMnemonic() throws -> String
sdkVersion() — Returns the SDK version string
generateMnemonic() — Generates a random 12-word BIP-39 mnemonic
Types
PrivacyBoostConfig
struct PrivacyBoostConfig {
let serverUrl: String
let wethContractAddress: String
let appId: String
let chainId: UInt64?
let shieldContractAddress: String?
let teePublicKey: String?
}
| Field | Type | Description |
|---|
serverUrl | String | Privacy Boost server URL |
wethContractAddress | String | WETH contract address |
appId | String | Application ID (required) |
chainId | UInt64? | EIP-155 chain ID (optional, auto-discovered from server) |
shieldContractAddress | String? | Shield contract address (optional, auto-discovered from server) |
teePublicKey | String? | TEE public key for encryption (optional) |
KeySource
enum KeySource {
case walletDerived
case mnemonic(phrase: String)
case rawSeed(hexSeed: String)
}
Specifies how privacy keys are derived. Passed as an optional parameter to authenticate().
- walletDerived - Derive keys from a deterministic wallet signature (default when no persistence configured)
- mnemonic - Derive keys from a BIP-39 mnemonic phrase
- rawSeed - Derive keys from raw hex entropy (for testing)
AuthResult
enum AuthResult {
case authenticated(LoginResult)
case credentialRequired(CredentialChallenge)
}
LoginResult
struct LoginResult {
let privacyAddress: String
let mpk: String
}
TokenBalance
struct TokenBalance {
let tokenAddress: String
let shieldedBalance: String
let walletBalance: String
let symbol: String?
let decimals: UInt8
}
DepositResult
struct DepositResult {
let txHash: String
let commitment: String
let fee: String
}
UnshieldResult
struct UnshieldResult {
let txHash: String
let fee: String
}
TransferResult
struct TransferResult {
let txHash: String
let fee: String
}
Transaction
struct Transaction {
let txHash: String
let txType: String
let tokenAddress: String
let amount: String
let direction: String
let senderPubKey: String
let receiverPubKeys: [String]
let createdAt: UInt64
}
IdentityResult
struct IdentityResult {
let mpk: String
let ethereumAddress: String
let viewingPublicKeyX: String
let viewingPublicKeyY: String
let privacyAddress: String
}
ExportedSession
struct ExportedSession {
let walletPublicKeyX: String
let walletPublicKeyY: String
let viewingKey: String
let viewingPublicKeyX: String
let viewingPublicKeyY: String
let nullifyingKey: String
let nullifyingPublicKeyX: String
let nullifyingPublicKeyY: String
let mpk: String
let accountId: String
let jwt: String
let jwtExpiry: UInt64
let walletAddress: String
}
WalletDelegate Protocol
protocol WalletDelegate: AnyObject {
func getAddress() async throws -> String
func getChainId() async throws -> UInt64
func signMessage(message: String) async throws -> String
func signTypedData(typedDataJson: String) async throws -> String
func sendTransaction(toAddress: String, value: String, data: String) async throws -> String
}
TokenProvider Protocol
protocol TokenProvider: AnyObject {
func getToken(loginPayloadJson: String) async throws -> TokenResponse
}
Implement this protocol to route authentication through your own server. The SDK serializes the login payload as a JSON string and passes it to getToken(). Your implementation should forward this payload to your backend, which adds its own credentials and calls the Privacy Boost API.
TokenResponse
struct TokenResponse {
let token: String // JWT access token
let expiresIn: UInt64 // Token lifetime in seconds
}
Example
class MyTokenProvider: TokenProvider {
func getToken(loginPayloadJson: String) async throws -> TokenResponse {
var request = URLRequest(url: URL(string: "https://your-server.com/api/privacy-auth")!)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = loginPayloadJson.data(using: .utf8)
let (data, _) = try await URLSession.shared.data(for: request)
let json = try JSONSerialization.jsonObject(with: data) as! [String: Any]
return TokenResponse(
token: json["token"] as! String,
expiresIn: json["expiresIn"] as! UInt64
)
}
}
let result = try await sdk.authenticate(
wallet: walletDelegate,
tokenProvider: MyTokenProvider()
)
SDKError
enum SDKError: Error {
case notConnected
case notAuthenticated
case invalidConfig
case networkError(String)
case walletError(String)
case signatureRejected
case insufficientBalance
case invalidAddress
case invalidAmount
case serializationError(String)
case authServerError(code: String, message: String)
case shieldError(code: String, message: String)
case transferError(code: String, message: String)
case noteError(code: String, message: String)
case merkleError(code: String, message: String)
case apiError(code: String, message: String, retryable: Bool)
case rateLimited(retryAfterMs: UInt64)
case forbidden(String)
case resourceNotFound(String)
case internalError(String)
}
See Also