secant-ios-wallet/modules/Sources/Models/WalletAccount.swift

77 lines
1.9 KiB
Swift

//
// WalletAccount.swift
// modules
//
// Created by Lukáš Korba on 26.11.2024.
//
import SwiftUI
import ZcashLightClientKit
import Generated
public struct WalletAccount: Equatable, Hashable, Codable, Identifiable {
public enum Vendor: Int, Equatable, Codable, Hashable {
case keystone = 0
case zcash
public func icon() -> Image {
switch self {
case .keystone:
return Asset.Assets.Partners.keystoneLogo.image
case .zcash:
return Asset.Assets.Icons.zashiLogoSq.image
}
}
public func isDefault() -> Bool {
self == .zcash
}
public func isHWWallet() -> Bool {
self != .zcash
}
public func name() -> String {
switch self {
case .keystone:
return L10n.Accounts.keystone
case .zcash:
return L10n.Accounts.zashi
}
}
}
public let id: AccountUUID
public let vendor: Vendor
public var defaultUA: UnifiedAddress?
public var privateUA: UnifiedAddress?
public var seedFingerprint: [UInt8]?
public var zip32AccountIndex: Zip32AccountIndex?
public let account: Account
public var unifiedAddress: String? {
defaultUA?.stringEncoded
}
public var privateUnifiedAddress: String? {
privateUA?.stringEncoded
}
public var saplingAddress: String? {
try? defaultUA?.saplingReceiver().stringEncoded
}
public var transparentAddress: String? {
try? defaultUA?.transparentReceiver().stringEncoded
}
public init(_ account: Account) {
self.id = account.id
self.vendor = account.keySource == L10n.Accounts.keystone.lowercased() ? .keystone : .zcash
self.seedFingerprint = account.seedFingerprint
self.zip32AccountIndex = account.hdAccountIndex
self.account = account
}
}