98 lines
3.7 KiB
Swift
98 lines
3.7 KiB
Swift
//
|
|
// ZcashSDKEnvironmentLiveKey.swift
|
|
// Zashi
|
|
//
|
|
// Created by Lukáš Korba on 13.11.2022.
|
|
//
|
|
|
|
import ComposableArchitecture
|
|
import ZcashLightClientKit
|
|
|
|
import UserPreferencesStorage
|
|
import UserDefaults
|
|
|
|
extension ZcashSDKEnvironment {
|
|
public static func live(network: ZcashNetwork) -> Self {
|
|
Self(
|
|
latestCheckpoint: BlockHeight.ofLatestCheckpoint(network: network),
|
|
endpoint: {
|
|
ZcashSDKEnvironment.serverConfig(
|
|
for: network.networkType
|
|
).endpoint(streamingCallTimeoutInMillis: ZcashSDKConstants.streamingCallTimeoutInMillis)
|
|
},
|
|
exchangeRateIPRateLimit: 120,
|
|
exchangeRateStaleLimit: 15 * 60,
|
|
memoCharLimit: MemoBytes.capacity,
|
|
mnemonicWordsMaxCount: ZcashSDKConstants.mnemonicWordsMaxCount,
|
|
network: network,
|
|
requiredTransactionConfirmations: ZcashSDKConstants.requiredTransactionConfirmations,
|
|
sdkVersion: "0.18.1-beta",
|
|
serverConfig: { ZcashSDKEnvironment.serverConfig(for: network.networkType) },
|
|
servers: ZcashSDKEnvironment.servers(for: network.networkType),
|
|
shieldingThreshold: Zatoshi(100_000),
|
|
tokenName: network.networkType == .testnet ? "TAZ" : "ZEC"
|
|
)
|
|
}
|
|
}
|
|
|
|
extension ZcashSDKEnvironment {
|
|
public static func serverConfig(for network: NetworkType) -> UserPreferencesStorage.ServerConfig {
|
|
migrateVersion1IfNeeded()
|
|
|
|
guard let serverConfig = storedServerConfig() else {
|
|
return defaultEndpoint(for: network).serverConfig()
|
|
}
|
|
|
|
return serverConfig
|
|
}
|
|
|
|
static func migrateVersion1IfNeeded() {
|
|
@Dependency(\.userStoredPreferences) var userStoredPreferences
|
|
@Dependency(\.userDefaults) var userDefaults
|
|
|
|
let streamingCallTimeoutInMillis = ZcashSDKConstants.streamingCallTimeoutInMillis
|
|
let udServerKey = "zashi_udServerKey"
|
|
let udCustomServerKey = "zashi_udCustomServerKey"
|
|
|
|
// only if there's no ServerConfig stored
|
|
guard userStoredPreferences.server() == nil else {
|
|
userDefaults.remove(udServerKey)
|
|
userDefaults.remove(udCustomServerKey)
|
|
return
|
|
}
|
|
|
|
// get server key
|
|
guard let storedKey = userDefaults.objectForKey(udServerKey) as? String else {
|
|
userDefaults.remove(udServerKey)
|
|
userDefaults.remove(udCustomServerKey)
|
|
return
|
|
}
|
|
|
|
// ensure custom server is preserved
|
|
if storedKey == "custom" {
|
|
if let customValue = userDefaults.objectForKey(udCustomServerKey) as? String {
|
|
if let serverConfig = UserPreferencesStorage.ServerConfig.endpoint(
|
|
for: customValue,
|
|
streamingCallTimeoutInMillis: streamingCallTimeoutInMillis)?.serverConfig(
|
|
isCustom: true
|
|
)
|
|
{
|
|
try? userStoredPreferences.setServer(serverConfig)
|
|
}
|
|
}
|
|
} else if storedKey == "mainnet" {
|
|
let serverConfig = UserPreferencesStorage.ServerConfig(host: "mainnet.lightwalletd.com", port: 9067, isCustom: true)
|
|
try? userStoredPreferences.setServer(serverConfig)
|
|
} else {
|
|
// some of the lwd servers
|
|
let serverConfig = UserPreferencesStorage.ServerConfig(host: "\(storedKey.dropLast(2)).lightwalletd.com", port: 443, isCustom: true)
|
|
try? userStoredPreferences.setServer(serverConfig)
|
|
}
|
|
}
|
|
|
|
static func storedServerConfig() -> UserPreferencesStorage.ServerConfig? {
|
|
@Dependency(\.userStoredPreferences) var userStoredPreferences
|
|
return userStoredPreferences.server()
|
|
}
|
|
}
|