From da7866d666599d3b704e90fea9592fa10500ba94 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Sun, 11 Jan 2026 15:34:09 -0300 Subject: [PATCH 1/4] fix: VSS race condition causing memory corruption during concurrent setup.Add VssSetupCoordinator actor to ensure thread-safe VSS client setup. The race condition occurred when multiple concurrent tasks called awaitSetup() simultaneously, causing double initialization of the Rust FFI and memory corruption --- Bitkit/Services/VssBackupClient.swift | 56 +++++++++++++++++---------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/Bitkit/Services/VssBackupClient.swift b/Bitkit/Services/VssBackupClient.swift index cfb4d247..c02226d0 100644 --- a/Bitkit/Services/VssBackupClient.swift +++ b/Bitkit/Services/VssBackupClient.swift @@ -1,15 +1,48 @@ import Foundation import VssRustClientFfi +/// Actor to coordinate VSS client setup (ensures only one setup runs at a time) +private actor VssSetupCoordinator { + private var setupTask: Task? + + func awaitSetup(setupAction: @escaping () async throws -> Void) async throws { + // If setup is already in progress or completed, wait for it + if let existingTask = setupTask { + try await existingTask.value + return + } + + // Create and store the setup task + let task = Task { + try await setupAction() + } + setupTask = task + + do { + try await task.value + } catch is CancellationError { + setupTask = nil + throw CancellationError() + } + } + + func reset() { + setupTask?.cancel() + setupTask = nil + } +} + class VssBackupClient { static let shared = VssBackupClient() - private var isSetup: Task? + private let setupCoordinator = VssSetupCoordinator() private init() {} func reset() { - isSetup = nil + Task { + await setupCoordinator.reset() + } } func setup(walletIndex: Int = 0) async throws { @@ -87,26 +120,9 @@ class VssBackupClient { } private func awaitSetup() async throws { - if let existingSetup = isSetup { - do { - try await existingSetup.value - } catch let error as CancellationError { - isSetup = nil - throw error - } - } - - let setupTask = Task { + try await setupCoordinator.awaitSetup { [self] in try await setup() } - isSetup = setupTask - - do { - try await setupTask.value - } catch let error as CancellationError { - isSetup = nil - throw error - } } private func withTimeout(seconds: TimeInterval, operation: @escaping () async throws -> T) async throws -> T { From a028928778ff78ea8cdcb7e4187e7bcc2f8f4a73 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Sun, 11 Jan 2026 16:02:55 -0300 Subject: [PATCH 2/4] fix: reset race condition --- Bitkit/Services/BackupService.swift | 2 +- Bitkit/Services/VssBackupClient.swift | 11 +++++------ Bitkit/Utilities/AppReset.swift | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Bitkit/Services/BackupService.swift b/Bitkit/Services/BackupService.swift index 6c058763..c3cd348f 100644 --- a/Bitkit/Services/BackupService.swift +++ b/Bitkit/Services/BackupService.swift @@ -180,7 +180,7 @@ class BackupService { } VssStoreIdProvider.shared.clearCache() - VssBackupClient.shared.reset() + await VssBackupClient.shared.reset() Logger.debug("Full restore starting", context: "BackupService") diff --git a/Bitkit/Services/VssBackupClient.swift b/Bitkit/Services/VssBackupClient.swift index c02226d0..b340e4b5 100644 --- a/Bitkit/Services/VssBackupClient.swift +++ b/Bitkit/Services/VssBackupClient.swift @@ -20,9 +20,10 @@ private actor VssSetupCoordinator { do { try await task.value - } catch is CancellationError { + } catch { + // Reset on any error to allow retry attempts setupTask = nil - throw CancellationError() + throw error } } @@ -39,10 +40,8 @@ class VssBackupClient { private init() {} - func reset() { - Task { - await setupCoordinator.reset() - } + func reset() async { + await setupCoordinator.reset() } func setup(walletIndex: Int = 0) async throws { diff --git a/Bitkit/Utilities/AppReset.swift b/Bitkit/Utilities/AppReset.swift index d76fe6ed..a47a3e9b 100644 --- a/Bitkit/Utilities/AppReset.swift +++ b/Bitkit/Utilities/AppReset.swift @@ -17,7 +17,7 @@ enum AppReset { // Stop backup observers and reset VSS client await BackupService.shared.stopObservingBackups() - VssBackupClient.shared.reset() + await VssBackupClient.shared.reset() // Stop node and wipe LDK persistence via the wallet API. try await wallet.wipe() From 0bc98a4ac5b011def647ca85dbfea69c91bee800 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Sun, 11 Jan 2026 16:30:52 -0300 Subject: [PATCH 3/4] fix: make setup private to prevent bypass and return early when setup is completed --- Bitkit/Services/BackupService.swift | 2 - Bitkit/Services/VssBackupClient.swift | 57 ++++--- Bitkit/logs.txt | 227 ++++++++++++++++++++++++++ 3 files changed, 265 insertions(+), 21 deletions(-) create mode 100644 Bitkit/logs.txt diff --git a/Bitkit/Services/BackupService.swift b/Bitkit/Services/BackupService.swift index c3cd348f..ab2b8199 100644 --- a/Bitkit/Services/BackupService.swift +++ b/Bitkit/Services/BackupService.swift @@ -504,8 +504,6 @@ class BackupService { func getLatestBackupTime() async -> UInt64? { do { - try await vssBackupClient.setup() - let timestamps = await withTaskGroup(of: UInt64?.self) { group in for category in BackupCategory.allCases where category != .lightningConnections { group.addTask { diff --git a/Bitkit/Services/VssBackupClient.swift b/Bitkit/Services/VssBackupClient.swift index b340e4b5..ee83c2ee 100644 --- a/Bitkit/Services/VssBackupClient.swift +++ b/Bitkit/Services/VssBackupClient.swift @@ -3,33 +3,52 @@ import VssRustClientFfi /// Actor to coordinate VSS client setup (ensures only one setup runs at a time) private actor VssSetupCoordinator { - private var setupTask: Task? + private enum SetupState { + case idle + case inProgress(Task) + case completed + } + + private var state: SetupState = .idle func awaitSetup(setupAction: @escaping () async throws -> Void) async throws { - // If setup is already in progress or completed, wait for it - if let existingTask = setupTask { - try await existingTask.value + switch state { + case .completed: + Logger.debug("VssSetupCoordinator: already completed, returning", context: "VssBackupClient") return - } - // Create and store the setup task - let task = Task { - try await setupAction() - } - setupTask = task + case let .inProgress(existingTask): + Logger.debug("VssSetupCoordinator: setup in progress, waiting for existing task", context: "VssBackupClient") + try await existingTask.value + Logger.debug("VssSetupCoordinator: existing task completed", context: "VssBackupClient") + return - do { - try await task.value - } catch { - // Reset on any error to allow retry attempts - setupTask = nil - throw error + case .idle: + Logger.debug("VssSetupCoordinator: idle, starting new setup", context: "VssBackupClient") + let task = Task { + try await setupAction() + } + state = .inProgress(task) + + do { + try await task.value + state = .completed + Logger.debug("VssSetupCoordinator: setup completed successfully", context: "VssBackupClient") + } catch { + // Reset on any error to allow retry attempts + state = .idle + Logger.debug("VssSetupCoordinator: setup failed, resetting to idle", context: "VssBackupClient") + throw error + } } } func reset() { - setupTask?.cancel() - setupTask = nil + Logger.debug("VssSetupCoordinator: reset called", context: "VssBackupClient") + if case let .inProgress(task) = state { + task.cancel() + } + state = .idle } } @@ -44,7 +63,7 @@ class VssBackupClient { await setupCoordinator.reset() } - func setup(walletIndex: Int = 0) async throws { + private func setup(walletIndex: Int = 0) async throws { do { try await withTimeout(seconds: 30) { Logger.debug("VSS client setting up…", context: "VssBackupClient") diff --git a/Bitkit/logs.txt b/Bitkit/logs.txt new file mode 100644 index 00000000..c78cbae4 --- /dev/null +++ b/Bitkit/logs.txt @@ -0,0 +1,227 @@ +DEBUG: Saving bip39_mnemonic_0 - Keychain [Keychain.swift: save(key:data:) line: 26] +DEBUG: bip39_mnemonic_0 not found in keychain [Keychain.swift: load(key:) line: 116] +DEBUG: bip39_mnemonic_0 loaded from keychain [Keychain.swift: load(key:) line: 125] +INFOℹ️: Saved bip39_mnemonic_0 - Keychain [Keychain.swift: save(key:data:) line: 64] +DEBUG: Saving bip39_passphrase_0 - Keychain [Keychain.swift: save(key:data:) line: 26] +DEBUG: bip39_passphrase_0 not found in keychain [Keychain.swift: load(key:) line: 116] +DEBUG: bip39_passphrase_0 loaded from keychain [Keychain.swift: load(key:) line: 125] +INFOℹ️: Saved bip39_passphrase_0 - Keychain [Keychain.swift: save(key:data:) line: 64] +DEBUG: bip39_mnemonic_0 loaded from keychain [Keychain.swift: load(key:) line: 125] +INFOℹ️: Wallet exists state changed: true [AppScene.swift: handleWalletExistsChange(_:) line: 234] +DEBUG: bip39_mnemonic_0 loaded from keychain [Keychain.swift: load(key:) line: 125] +DEBUG: bip39_passphrase_0 loaded from keychain [Keychain.swift: load(key:) line: 125] +DEBUG: VssSetupCoordinator: idle, starting new setup - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 30] +DEBUG: VssSetupCoordinator: setup in progress, waiting for existing task - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 23] +DEBUG: VssSetupCoordinator: setup in progress, waiting for existing task - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 23] +DEBUG: VssSetupCoordinator: setup in progress, waiting for existing task - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 23] +DEBUG: VssSetupCoordinator: setup in progress, waiting for existing task - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 23] +DEBUG: VssSetupCoordinator: setup in progress, waiting for existing task - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 23] +DEBUG: VSS client setting up… - VssBackupClient [VssBackupClient.swift: setup(walletIndex:) line: 72] +DEBUG: Building VSS client with vssUrl: 'https://bitkit.stag0.blocktank.to/vss_rs_auth' - VssBackupClient [VssBackupClient.swift: setup(walletIndex:) line: 76] +DEBUG: Building VSS client with lnurlAuthServerUrl: 'https://bitkit.stag0.blocktank.to/lnurl_auth/auth' - VssBackupClient [VssBackupClient.swift: setup(walletIndex:) line: 77] +DEBUG: bip39_mnemonic_0 loaded from keychain [Keychain.swift: load(key:) line: 125] +DEBUG: bip39_passphrase_0 loaded from keychain [Keychain.swift: load(key:) line: 125] +INFOℹ️: VSS store id: 'bitkit_v1_regtest_ceb00295b44d90cea3f47fde662da23b9ea2' - VssStoreIdProvider [VssStoreIdProvider.swift: getVssStoreId(walletIndex:) line: 50] +DEBUG: bip39_mnemonic_0 loaded from keychain [Keychain.swift: load(key:) line: 125] +DEBUG: bip39_passphrase_0 loaded from keychain [Keychain.swift: load(key:) line: 125] +INFOℹ️: VSS client setup with server: 'https://bitkit.stag0.blocktank.to/vss_rs_auth' - VssBackupClient [VssBackupClient.swift: setup(walletIndex:) line: 101] +DEBUG: VssSetupCoordinator: existing task completed - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 25] +DEBUG: VSS 'getObject' call for 'BLOCKTANK' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] +DEBUG: VssSetupCoordinator: existing task completed - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 25] +DEBUG: VSS 'getObject' call for 'WIDGETS' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] +DEBUG: VssSetupCoordinator: existing task completed - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 25] +DEBUG: VSS 'getObject' call for 'SETTINGS' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] +DEBUG: VssSetupCoordinator: existing task completed - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 25] +DEBUG: VSS 'getObject' call for 'METADATA' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] +DEBUG: VssSetupCoordinator: existing task completed - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 25] +DEBUG: VSS 'getObject' call for 'WALLET' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] +DEBUG: VssSetupCoordinator: setup completed successfully - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 39] +DEBUG: VSS 'getObject' call for 'ACTIVITY' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] +DEBUG: VSS 'getObject' success for 'WIDGETS' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] +DEBUG: VSS 'getObject' success for 'BLOCKTANK' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] +DEBUG: VSS 'getObject' success for 'METADATA' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] +DEBUG: VSS 'getObject' success for 'ACTIVITY' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] +DEBUG: VSS 'getObject' success for 'WALLET' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] +DEBUG: VSS 'getObject' success for 'SETTINGS' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] +DEBUG: VssSetupCoordinator: reset called - VssBackupClient [VssBackupClient.swift: reset() line: 50] +DEBUG: Full restore starting - BackupService [BackupService.swift: performFullRestoreFromLatestBackup() line: 185] +DEBUG: VssSetupCoordinator: idle, starting new setup - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 30] +DEBUG: VSS client setting up… - VssBackupClient [VssBackupClient.swift: setup(walletIndex:) line: 72] +DEBUG: Building VSS client with vssUrl: 'https://bitkit.stag0.blocktank.to/vss_rs_auth' - VssBackupClient [VssBackupClient.swift: setup(walletIndex:) line: 76] +DEBUG: Building VSS client with lnurlAuthServerUrl: 'https://bitkit.stag0.blocktank.to/lnurl_auth/auth' - VssBackupClient [VssBackupClient.swift: setup(walletIndex:) line: 77] +DEBUG: bip39_mnemonic_0 loaded from keychain [Keychain.swift: load(key:) line: 125] +DEBUG: bip39_passphrase_0 loaded from keychain [Keychain.swift: load(key:) line: 125] +INFOℹ️: VSS store id: 'bitkit_v1_regtest_ceb00295b44d90cea3f47fde662da23b9ea2' - VssStoreIdProvider [VssStoreIdProvider.swift: getVssStoreId(walletIndex:) line: 50] +DEBUG: bip39_mnemonic_0 loaded from keychain [Keychain.swift: load(key:) line: 125] +DEBUG: bip39_passphrase_0 loaded from keychain [Keychain.swift: load(key:) line: 125] +INFOℹ️: VSS client setup with server: 'https://bitkit.stag0.blocktank.to/vss_rs_auth' - VssBackupClient [VssBackupClient.swift: setup(walletIndex:) line: 101] +DEBUG: VssSetupCoordinator: setup completed successfully - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 39] +DEBUG: VSS 'getObject' call for 'SETTINGS' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] +DEBUG: VSS 'getObject' success for 'SETTINGS' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] +INFOℹ️: Saved Electrum server config: ssl://fulcrum.bitkit.stag0.blocktank.to:18484 [ElectrumConfigService.swift: saveServerConfig(_:) line: 54] +INFOℹ️: Saved RGS server URL: https://bitkit.stag0.blocktank.to/rgs/snapshot [RgsConfigService.swift: saveServerUrl(_:) line: 23] +INFOℹ️: Restore success for: 'SETTINGS' - BackupService [BackupService.swift: performRestore(category:restoreAction:) line: 710] +DEBUG: VssSetupCoordinator: already completed, returning - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 18] +DEBUG: VSS 'getObject' call for 'WIDGETS' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] +DEBUG: VSS 'getObject' success for 'WIDGETS' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] +INFOℹ️: Restore success for: 'WIDGETS' - BackupService [BackupService.swift: performRestore(category:restoreAction:) line: 710] +DEBUG: VssSetupCoordinator: already completed, returning - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 18] +DEBUG: VSS 'getObject' call for 'WALLET' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] +DEBUG: VSS 'getObject' success for 'WALLET' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] +DEBUG: Restored 0 transfers - BackupService [BackupService.swift: performFullRestoreFromLatestBackup() line: 204] +INFOℹ️: Restore success for: 'WALLET' - BackupService [BackupService.swift: performRestore(category:restoreAction:) line: 710] +DEBUG: VssSetupCoordinator: already completed, returning - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 18] +DEBUG: VSS 'getObject' call for 'ACTIVITY' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] +DEBUG: VSS 'getObject' success for 'ACTIVITY' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: upsertList(_:) took 0.01 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 87] +PERF: upsertTags(_:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: upsertClosedChannelList(_:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +DEBUG: Restored 1 activities, 0 activity tags, 0 closed channels - BackupService [BackupService.swift: performFullRestoreFromLatestBackup() line: 214] +INFOℹ️: Restore success for: 'ACTIVITY' - BackupService [BackupService.swift: performRestore(category:restoreAction:) line: 710] +DEBUG: VssSetupCoordinator: already completed, returning - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 18] +DEBUG: VSS 'getObject' call for 'METADATA' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] +DEBUG: VSS 'getObject' success for 'METADATA' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] +PERF: upsertPreActivityMetadata(_:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +DEBUG: Restored caches, 6 pre-activity metadata - BackupService [BackupService.swift: performFullRestoreFromLatestBackup() line: 230] +INFOℹ️: Restore success for: 'METADATA' - BackupService [BackupService.swift: performRestore(category:restoreAction:) line: 710] +DEBUG: VssSetupCoordinator: already completed, returning - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 18] +DEBUG: VSS 'getObject' call for 'BLOCKTANK' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] +DEBUG: VSS 'getObject' success for 'BLOCKTANK' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] +PERF: upsertOrdersList(_:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 87] +PERF: upsertCjitEntriesList(_:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 87] +DEBUG: Restored 0 orders, 0 CJITs - BackupService [BackupService.swift: performFullRestoreFromLatestBackup() line: 243] +PERF: setInfo(_:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 87] +INFOℹ️: Restore success for: 'BLOCKTANK' - BackupService [BackupService.swift: performRestore(category:restoreAction:) line: 710] +INFOℹ️: Full restore success - BackupService [BackupService.swift: performFullRestoreFromLatestBackup() line: 246] +DEBUG: PIN settings reset after app wipe - SettingsViewModel [SettingsViewModel+PIN.swift: resetPinSettings() line: 70] +DEBUG: Checking lightning process lock... [LightningService.swift: setup(walletIndex:electrumServerUrl:rgsServerUrl:channelMigration:) line: 31] +DEBUG: 🔒 Attempting to lock process: lightning with wait time: 30.0s [StateLocker.swift: lock(_:wait:) line: 136] +DEBUG: 🔒 Successfully locked process: lightning [StateLocker.swift: lock(_:wait:) line: 164] +DEBUG: bip39_mnemonic_0 loaded from keychain [Keychain.swift: load(key:) line: 125] +DEBUG: bip39_passphrase_0 loaded from keychain [Keychain.swift: load(key:) line: 125] +ERROR❌: Failed to update balance state: AppError(message: "Balance details unavailable", debugMessage: Optional("LightningService.balances is nil")) - WalletViewModel [WalletViewModel.swift: updateBalanceState() line: 546] +DEBUG: Using LDK storage path: /Users/jvsena/Library/Developer/CoreSimulator/Devices/2CD5A746-FEAC-4ED8-A46F-36569B867743/data/Containers/Shared/AppGroup/C71F2069-6713-4C98-B830-4C3BBE873751/regtest/wallet0/ldk [LightningService.swift: setup(walletIndex:electrumServerUrl:rgsServerUrl:channelMigration:) line: 47] +INFOℹ️: LDK-node log path: /Users/jvsena/Library/Developer/CoreSimulator/Devices/2CD5A746-FEAC-4ED8-A46F-36569B867743/data/Containers/Shared/AppGroup/C71F2069-6713-4C98-B830-4C3BBE873751/regtest/wallet0/ldk [LightningService.swift: setup(walletIndex:electrumServerUrl:rgsServerUrl:channelMigration:) line: 60] +DEBUG: Generated LDK log file path: /Users/jvsena/Library/Developer/CoreSimulator/Devices/2CD5A746-FEAC-4ED8-A46F-36569B867743/data/Containers/Shared/AppGroup/C71F2069-6713-4C98-B830-4C3BBE873751/logs/ldk_foreground_2026-01-11_19-27-19.log [LightningService.swift: generateLogFilePath() line: 625] +INFOℹ️: Using gossip source rgs url: https://bitkit.stag0.blocktank.to/rgs/snapshot [LightningService.swift: configureGossipSource(builder:rgsServerUrl:) line: 634] +DEBUG: Building node... [LightningService.swift: setup(walletIndex:electrumServerUrl:rgsServerUrl:channelMigration:) line: 80] +DEBUG: Building ldk-node with vssUrl: 'https://bitkit.stag0.blocktank.to/vss_rs_auth' [LightningService.swift: setup(walletIndex:electrumServerUrl:rgsServerUrl:channelMigration:) line: 85] +DEBUG: Building ldk-node with lnurlAuthServerUrl: 'https://bitkit.stag0.blocktank.to/lnurl_auth/auth' [LightningService.swift: setup(walletIndex:electrumServerUrl:rgsServerUrl:channelMigration:) line: 86] +PERF: setup(walletIndex:electrumServerUrl:rgsServerUrl:channelMigration:) took 5.96 seconds on ldk queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +INFOℹ️: LDK node setup [LightningService.swift: setup(walletIndex:electrumServerUrl:rgsServerUrl:channelMigration:) line: 112] +DEBUG: Starting node... [LightningService.swift: start(onEvent:) line: 192] +PERF: start(onEvent:) took 1.44 seconds on ldk queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: refreshChannelCache() took 0.0 seconds on ldk queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +INFOℹ️: Node started [LightningService.swift: start(onEvent:) line: 199] +PERF: startObservingBackups() took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +DEBUG: Start observing backup statuses and data store changes - BackupService [BackupService.swift: startObservingBackups() line: 88] +DEBUG: Checking 0 pending transfers to spending [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 106] +DEBUG: Available channels: 0, Lightning balances: 0 [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 107] +DEBUG: Started 7 backup status observers - BackupService [BackupService.swift: startBackupStatusObservers() line: 282] +DEBUG: Active transfers: 0 [BalanceManager.swift: deriveBalanceState() line: 66] +DEBUG: Balances in ldk-node: onchain=100000 lightning=0 [BalanceManager.swift: deriveBalanceState() line: 69] +DEBUG: Balances in state: onchain=100000 lightning=0 toSavings=0 toSpending=0 [BalanceManager.swift: deriveBalanceState() line: 72] +DEBUG: Started 7 data store listeners - BackupService [BackupService.swift: startDataStoreListeners() line: 364] +PERF: startPeriodicBackupFailureCheck() took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +DEBUG: Wallet finished initializing but node state is running [AppScene.swift: initializingContent line: 203] +INFOℹ️: Connected to trusted peer: 028a8910b0048630d4eb17af25668cdd7ea6f2d8ae20956e7a06e2ae46ebcb69fc [LightningService.swift: connectToTrustedPeers() line: 266] +PERF: connectToTrustedPeers() took 0.72 seconds on ldk queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +INFOℹ️: Synced LDK payments - Added: 0 - Updated: 1 - CoreService [CoreService.swift: syncLdkNodePayments(_:) line: 728] +PERF: syncLdkNodePayments(_:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 87] +PERF: newAddress() took 0.23 seconds on ldk queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +DEBUG: Syncing LDK... [LightningService.swift: sync() line: 314] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +DEBUG: Checking 0 pending transfers to spending [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 106] +DEBUG: Available channels: 0, Lightning balances: 0 [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 107] +DEBUG: Active transfers: 0 [BalanceManager.swift: deriveBalanceState() line: 66] +DEBUG: Balances in ldk-node: onchain=100000 lightning=0 [BalanceManager.swift: deriveBalanceState() line: 69] +DEBUG: Balances in state: onchain=100000 lightning=0 toSavings=0 toSpending=0 [BalanceManager.swift: deriveBalanceState() line: 72] +DEBUG: Checking 0 pending transfers to spending [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 106] +DEBUG: Available channels: 0, Lightning balances: 0 [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 107] +DEBUG: Active transfers: 0 [BalanceManager.swift: deriveBalanceState() line: 66] +DEBUG: Balances in ldk-node: onchain=100000 lightning=0 [BalanceManager.swift: deriveBalanceState() line: 69] +DEBUG: Balances in state: onchain=100000 lightning=0 toSavings=0 toSpending=0 [BalanceManager.swift: deriveBalanceState() line: 72] +PERF: addPreActivityMetadata(_:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: allPossibleTags() took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: allPossibleTags() took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: info(refresh:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 87] +PERF: info(refresh:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 87] +DEBUG: Transfer states synced after LDK payments sync - ActivityListViewModel [ActivityListViewModel.swift: syncLdkNodePayments() line: 236] +PERF: scheduleBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: scheduleBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: scheduleBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: scheduleBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: scheduleBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: scheduleBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +DEBUG: User entered home screen, starting timer [TimedSheetManager.swift: onHomeScreenEntered() line: 103] +DEBUG: Loading block data [BlocksViewModel.swift: loadBlockData() line: 46] +DEBUG: Loading article [NewsViewModel.swift: loadArticle() line: 46] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +INFOℹ️: ✅ Sync completed: type=onchainWallet height=44784 [LightningService.swift: listenForEvents(onEvent:) line: 842] +INFOℹ️: Sync completed: onchainWallet at height 44784 [AppViewModel.swift: handleLdkNodeEvent(_:) line: 555] +INFOℹ️: Sync completed: onchainWallet at height 44784 [WalletViewModel.swift: start(walletIndex:) line: 152] +DEBUG: Checking 0 pending transfers to spending [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 106] +DEBUG: Checking 0 pending transfers to spending [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 106] +DEBUG: Available channels: 0, Lightning balances: 0 [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 107] +DEBUG: Available channels: 0, Lightning balances: 0 [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 107] +DEBUG: Active transfers: 0 [BalanceManager.swift: deriveBalanceState() line: 66] +DEBUG: Active transfers: 0 [BalanceManager.swift: deriveBalanceState() line: 66] +DEBUG: Balances in ldk-node: onchain=100000 lightning=0 [BalanceManager.swift: deriveBalanceState() line: 69] +DEBUG: Balances in ldk-node: onchain=100000 lightning=0 [BalanceManager.swift: deriveBalanceState() line: 69] +DEBUG: Balances in state: onchain=100000 lightning=0 toSavings=0 toSpending=0 [BalanceManager.swift: deriveBalanceState() line: 72] +DEBUG: Balances in state: onchain=100000 lightning=0 toSavings=0 toSpending=0 [BalanceManager.swift: deriveBalanceState() line: 72] +INFOℹ️: Sync completed: onchainWallet at height 44784 [AppViewModel.swift: handleLdkNodeEvent(_:) line: 555] +INFOℹ️: ✅ Sync completed: type=onchainWallet height=44784 [LightningService.swift: listenForEvents(onEvent:) line: 842] +INFOℹ️: Sync completed: onchainWallet at height 44784 [WalletViewModel.swift: start(walletIndex:) line: 152] +PERF: sync() took 3.61 seconds on ldk queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +INFOℹ️: LDK synced [LightningService.swift: sync() line: 319] +PERF: refreshChannelCache() took 0.0 seconds on ldk queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +DEBUG: Checking 0 pending transfers to spending [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 106] +DEBUG: Available channels: 0, Lightning balances: 0 [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 107] +DEBUG: Active transfers: 0 [BalanceManager.swift: deriveBalanceState() line: 66] +DEBUG: Checking 0 pending transfers to spending [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 106] +DEBUG: Balances in ldk-node: onchain=100000 lightning=0 [BalanceManager.swift: deriveBalanceState() line: 69] +DEBUG: Balances in state: onchain=100000 lightning=0 toSavings=0 toSpending=0 [BalanceManager.swift: deriveBalanceState() line: 72] +DEBUG: Available channels: 0, Lightning balances: 0 [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 107] +DEBUG: Active transfers: 0 [BalanceManager.swift: deriveBalanceState() line: 66] +DEBUG: Balances in ldk-node: onchain=100000 lightning=0 [BalanceManager.swift: deriveBalanceState() line: 69] +DEBUG: Balances in state: onchain=100000 lightning=0 toSavings=0 toSpending=0 [BalanceManager.swift: deriveBalanceState() line: 72] +DEBUG: Checking 0 pending transfers to spending [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 106] +DEBUG: Available channels: 0, Lightning balances: 0 [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 107] +DEBUG: Active transfers: 0 [BalanceManager.swift: deriveBalanceState() line: 66] +DEBUG: Balances in ldk-node: onchain=100000 lightning=0 [BalanceManager.swift: deriveBalanceState() line: 69] +DEBUG: Balances in state: onchain=100000 lightning=0 toSavings=0 toSpending=0 [BalanceManager.swift: deriveBalanceState() line: 72] +DEBUG: No timed sheets need to be shown [TimedSheetManager.swift: checkAndShowNextSheet() line: 181] +PERF: scheduleBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: triggerBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: triggerBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +DEBUG: Backup starting for: 'ACTIVITY' - BackupService [BackupService.swift: triggerBackup(category:) line: 121] +DEBUG: Backup starting for: 'METADATA' - BackupService [BackupService.swift: triggerBackup(category:) line: 121] +PERF: triggerBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: triggerBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: closedChannels(sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: getAllActivitiesTags() took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: getAllPreActivityMetadata() took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +DEBUG: VssSetupCoordinator: already completed, returning - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 18] +DEBUG: VSS 'putObject' call for 'METADATA' - VssBackupClient [VssBackupClient.swift: putObject(key:data:) line: 112] +DEBUG: VssSetupCoordinator: already completed, returning - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 18] +DEBUG: VSS 'putObject' call for 'ACTIVITY' - VssBackupClient [VssBackupClient.swift: putObject(key:data:) line: 112] +DEBUG: VSS 'putObject' success for 'METADATA' at version: -1 - VssBackupClient [VssBackupClient.swift: putObject(key:data:) line: 116] +INFOℹ️: Backup succeeded for: 'METADATA' - BackupService [BackupService.swift: triggerBackup(category:) line: 143] +PERF: triggerBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] +PERF: scheduleBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] From daf854e9ff7a61904b82f255de0c4b18b56818b0 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Sun, 11 Jan 2026 16:37:25 -0300 Subject: [PATCH 4/4] chore: remove logs --- Bitkit/logs.txt | 227 ------------------------------------------------ 1 file changed, 227 deletions(-) delete mode 100644 Bitkit/logs.txt diff --git a/Bitkit/logs.txt b/Bitkit/logs.txt deleted file mode 100644 index c78cbae4..00000000 --- a/Bitkit/logs.txt +++ /dev/null @@ -1,227 +0,0 @@ -DEBUG: Saving bip39_mnemonic_0 - Keychain [Keychain.swift: save(key:data:) line: 26] -DEBUG: bip39_mnemonic_0 not found in keychain [Keychain.swift: load(key:) line: 116] -DEBUG: bip39_mnemonic_0 loaded from keychain [Keychain.swift: load(key:) line: 125] -INFOℹ️: Saved bip39_mnemonic_0 - Keychain [Keychain.swift: save(key:data:) line: 64] -DEBUG: Saving bip39_passphrase_0 - Keychain [Keychain.swift: save(key:data:) line: 26] -DEBUG: bip39_passphrase_0 not found in keychain [Keychain.swift: load(key:) line: 116] -DEBUG: bip39_passphrase_0 loaded from keychain [Keychain.swift: load(key:) line: 125] -INFOℹ️: Saved bip39_passphrase_0 - Keychain [Keychain.swift: save(key:data:) line: 64] -DEBUG: bip39_mnemonic_0 loaded from keychain [Keychain.swift: load(key:) line: 125] -INFOℹ️: Wallet exists state changed: true [AppScene.swift: handleWalletExistsChange(_:) line: 234] -DEBUG: bip39_mnemonic_0 loaded from keychain [Keychain.swift: load(key:) line: 125] -DEBUG: bip39_passphrase_0 loaded from keychain [Keychain.swift: load(key:) line: 125] -DEBUG: VssSetupCoordinator: idle, starting new setup - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 30] -DEBUG: VssSetupCoordinator: setup in progress, waiting for existing task - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 23] -DEBUG: VssSetupCoordinator: setup in progress, waiting for existing task - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 23] -DEBUG: VssSetupCoordinator: setup in progress, waiting for existing task - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 23] -DEBUG: VssSetupCoordinator: setup in progress, waiting for existing task - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 23] -DEBUG: VssSetupCoordinator: setup in progress, waiting for existing task - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 23] -DEBUG: VSS client setting up… - VssBackupClient [VssBackupClient.swift: setup(walletIndex:) line: 72] -DEBUG: Building VSS client with vssUrl: 'https://bitkit.stag0.blocktank.to/vss_rs_auth' - VssBackupClient [VssBackupClient.swift: setup(walletIndex:) line: 76] -DEBUG: Building VSS client with lnurlAuthServerUrl: 'https://bitkit.stag0.blocktank.to/lnurl_auth/auth' - VssBackupClient [VssBackupClient.swift: setup(walletIndex:) line: 77] -DEBUG: bip39_mnemonic_0 loaded from keychain [Keychain.swift: load(key:) line: 125] -DEBUG: bip39_passphrase_0 loaded from keychain [Keychain.swift: load(key:) line: 125] -INFOℹ️: VSS store id: 'bitkit_v1_regtest_ceb00295b44d90cea3f47fde662da23b9ea2' - VssStoreIdProvider [VssStoreIdProvider.swift: getVssStoreId(walletIndex:) line: 50] -DEBUG: bip39_mnemonic_0 loaded from keychain [Keychain.swift: load(key:) line: 125] -DEBUG: bip39_passphrase_0 loaded from keychain [Keychain.swift: load(key:) line: 125] -INFOℹ️: VSS client setup with server: 'https://bitkit.stag0.blocktank.to/vss_rs_auth' - VssBackupClient [VssBackupClient.swift: setup(walletIndex:) line: 101] -DEBUG: VssSetupCoordinator: existing task completed - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 25] -DEBUG: VSS 'getObject' call for 'BLOCKTANK' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] -DEBUG: VssSetupCoordinator: existing task completed - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 25] -DEBUG: VSS 'getObject' call for 'WIDGETS' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] -DEBUG: VssSetupCoordinator: existing task completed - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 25] -DEBUG: VSS 'getObject' call for 'SETTINGS' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] -DEBUG: VssSetupCoordinator: existing task completed - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 25] -DEBUG: VSS 'getObject' call for 'METADATA' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] -DEBUG: VssSetupCoordinator: existing task completed - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 25] -DEBUG: VSS 'getObject' call for 'WALLET' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] -DEBUG: VssSetupCoordinator: setup completed successfully - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 39] -DEBUG: VSS 'getObject' call for 'ACTIVITY' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] -DEBUG: VSS 'getObject' success for 'WIDGETS' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] -DEBUG: VSS 'getObject' success for 'BLOCKTANK' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] -DEBUG: VSS 'getObject' success for 'METADATA' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] -DEBUG: VSS 'getObject' success for 'ACTIVITY' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] -DEBUG: VSS 'getObject' success for 'WALLET' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] -DEBUG: VSS 'getObject' success for 'SETTINGS' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] -DEBUG: VssSetupCoordinator: reset called - VssBackupClient [VssBackupClient.swift: reset() line: 50] -DEBUG: Full restore starting - BackupService [BackupService.swift: performFullRestoreFromLatestBackup() line: 185] -DEBUG: VssSetupCoordinator: idle, starting new setup - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 30] -DEBUG: VSS client setting up… - VssBackupClient [VssBackupClient.swift: setup(walletIndex:) line: 72] -DEBUG: Building VSS client with vssUrl: 'https://bitkit.stag0.blocktank.to/vss_rs_auth' - VssBackupClient [VssBackupClient.swift: setup(walletIndex:) line: 76] -DEBUG: Building VSS client with lnurlAuthServerUrl: 'https://bitkit.stag0.blocktank.to/lnurl_auth/auth' - VssBackupClient [VssBackupClient.swift: setup(walletIndex:) line: 77] -DEBUG: bip39_mnemonic_0 loaded from keychain [Keychain.swift: load(key:) line: 125] -DEBUG: bip39_passphrase_0 loaded from keychain [Keychain.swift: load(key:) line: 125] -INFOℹ️: VSS store id: 'bitkit_v1_regtest_ceb00295b44d90cea3f47fde662da23b9ea2' - VssStoreIdProvider [VssStoreIdProvider.swift: getVssStoreId(walletIndex:) line: 50] -DEBUG: bip39_mnemonic_0 loaded from keychain [Keychain.swift: load(key:) line: 125] -DEBUG: bip39_passphrase_0 loaded from keychain [Keychain.swift: load(key:) line: 125] -INFOℹ️: VSS client setup with server: 'https://bitkit.stag0.blocktank.to/vss_rs_auth' - VssBackupClient [VssBackupClient.swift: setup(walletIndex:) line: 101] -DEBUG: VssSetupCoordinator: setup completed successfully - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 39] -DEBUG: VSS 'getObject' call for 'SETTINGS' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] -DEBUG: VSS 'getObject' success for 'SETTINGS' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] -INFOℹ️: Saved Electrum server config: ssl://fulcrum.bitkit.stag0.blocktank.to:18484 [ElectrumConfigService.swift: saveServerConfig(_:) line: 54] -INFOℹ️: Saved RGS server URL: https://bitkit.stag0.blocktank.to/rgs/snapshot [RgsConfigService.swift: saveServerUrl(_:) line: 23] -INFOℹ️: Restore success for: 'SETTINGS' - BackupService [BackupService.swift: performRestore(category:restoreAction:) line: 710] -DEBUG: VssSetupCoordinator: already completed, returning - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 18] -DEBUG: VSS 'getObject' call for 'WIDGETS' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] -DEBUG: VSS 'getObject' success for 'WIDGETS' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] -INFOℹ️: Restore success for: 'WIDGETS' - BackupService [BackupService.swift: performRestore(category:restoreAction:) line: 710] -DEBUG: VssSetupCoordinator: already completed, returning - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 18] -DEBUG: VSS 'getObject' call for 'WALLET' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] -DEBUG: VSS 'getObject' success for 'WALLET' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] -DEBUG: Restored 0 transfers - BackupService [BackupService.swift: performFullRestoreFromLatestBackup() line: 204] -INFOℹ️: Restore success for: 'WALLET' - BackupService [BackupService.swift: performRestore(category:restoreAction:) line: 710] -DEBUG: VssSetupCoordinator: already completed, returning - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 18] -DEBUG: VSS 'getObject' call for 'ACTIVITY' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] -DEBUG: VSS 'getObject' success for 'ACTIVITY' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: upsertList(_:) took 0.01 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 87] -PERF: upsertTags(_:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: upsertClosedChannelList(_:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -DEBUG: Restored 1 activities, 0 activity tags, 0 closed channels - BackupService [BackupService.swift: performFullRestoreFromLatestBackup() line: 214] -INFOℹ️: Restore success for: 'ACTIVITY' - BackupService [BackupService.swift: performRestore(category:restoreAction:) line: 710] -DEBUG: VssSetupCoordinator: already completed, returning - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 18] -DEBUG: VSS 'getObject' call for 'METADATA' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] -DEBUG: VSS 'getObject' success for 'METADATA' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] -PERF: upsertPreActivityMetadata(_:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -DEBUG: Restored caches, 6 pre-activity metadata - BackupService [BackupService.swift: performFullRestoreFromLatestBackup() line: 230] -INFOℹ️: Restore success for: 'METADATA' - BackupService [BackupService.swift: performRestore(category:restoreAction:) line: 710] -DEBUG: VssSetupCoordinator: already completed, returning - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 18] -DEBUG: VSS 'getObject' call for 'BLOCKTANK' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 127] -DEBUG: VSS 'getObject' success for 'BLOCKTANK' - VssBackupClient [VssBackupClient.swift: getObject(key:) line: 132] -PERF: upsertOrdersList(_:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 87] -PERF: upsertCjitEntriesList(_:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 87] -DEBUG: Restored 0 orders, 0 CJITs - BackupService [BackupService.swift: performFullRestoreFromLatestBackup() line: 243] -PERF: setInfo(_:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 87] -INFOℹ️: Restore success for: 'BLOCKTANK' - BackupService [BackupService.swift: performRestore(category:restoreAction:) line: 710] -INFOℹ️: Full restore success - BackupService [BackupService.swift: performFullRestoreFromLatestBackup() line: 246] -DEBUG: PIN settings reset after app wipe - SettingsViewModel [SettingsViewModel+PIN.swift: resetPinSettings() line: 70] -DEBUG: Checking lightning process lock... [LightningService.swift: setup(walletIndex:electrumServerUrl:rgsServerUrl:channelMigration:) line: 31] -DEBUG: 🔒 Attempting to lock process: lightning with wait time: 30.0s [StateLocker.swift: lock(_:wait:) line: 136] -DEBUG: 🔒 Successfully locked process: lightning [StateLocker.swift: lock(_:wait:) line: 164] -DEBUG: bip39_mnemonic_0 loaded from keychain [Keychain.swift: load(key:) line: 125] -DEBUG: bip39_passphrase_0 loaded from keychain [Keychain.swift: load(key:) line: 125] -ERROR❌: Failed to update balance state: AppError(message: "Balance details unavailable", debugMessage: Optional("LightningService.balances is nil")) - WalletViewModel [WalletViewModel.swift: updateBalanceState() line: 546] -DEBUG: Using LDK storage path: /Users/jvsena/Library/Developer/CoreSimulator/Devices/2CD5A746-FEAC-4ED8-A46F-36569B867743/data/Containers/Shared/AppGroup/C71F2069-6713-4C98-B830-4C3BBE873751/regtest/wallet0/ldk [LightningService.swift: setup(walletIndex:electrumServerUrl:rgsServerUrl:channelMigration:) line: 47] -INFOℹ️: LDK-node log path: /Users/jvsena/Library/Developer/CoreSimulator/Devices/2CD5A746-FEAC-4ED8-A46F-36569B867743/data/Containers/Shared/AppGroup/C71F2069-6713-4C98-B830-4C3BBE873751/regtest/wallet0/ldk [LightningService.swift: setup(walletIndex:electrumServerUrl:rgsServerUrl:channelMigration:) line: 60] -DEBUG: Generated LDK log file path: /Users/jvsena/Library/Developer/CoreSimulator/Devices/2CD5A746-FEAC-4ED8-A46F-36569B867743/data/Containers/Shared/AppGroup/C71F2069-6713-4C98-B830-4C3BBE873751/logs/ldk_foreground_2026-01-11_19-27-19.log [LightningService.swift: generateLogFilePath() line: 625] -INFOℹ️: Using gossip source rgs url: https://bitkit.stag0.blocktank.to/rgs/snapshot [LightningService.swift: configureGossipSource(builder:rgsServerUrl:) line: 634] -DEBUG: Building node... [LightningService.swift: setup(walletIndex:electrumServerUrl:rgsServerUrl:channelMigration:) line: 80] -DEBUG: Building ldk-node with vssUrl: 'https://bitkit.stag0.blocktank.to/vss_rs_auth' [LightningService.swift: setup(walletIndex:electrumServerUrl:rgsServerUrl:channelMigration:) line: 85] -DEBUG: Building ldk-node with lnurlAuthServerUrl: 'https://bitkit.stag0.blocktank.to/lnurl_auth/auth' [LightningService.swift: setup(walletIndex:electrumServerUrl:rgsServerUrl:channelMigration:) line: 86] -PERF: setup(walletIndex:electrumServerUrl:rgsServerUrl:channelMigration:) took 5.96 seconds on ldk queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -INFOℹ️: LDK node setup [LightningService.swift: setup(walletIndex:electrumServerUrl:rgsServerUrl:channelMigration:) line: 112] -DEBUG: Starting node... [LightningService.swift: start(onEvent:) line: 192] -PERF: start(onEvent:) took 1.44 seconds on ldk queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: refreshChannelCache() took 0.0 seconds on ldk queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -INFOℹ️: Node started [LightningService.swift: start(onEvent:) line: 199] -PERF: startObservingBackups() took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -DEBUG: Start observing backup statuses and data store changes - BackupService [BackupService.swift: startObservingBackups() line: 88] -DEBUG: Checking 0 pending transfers to spending [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 106] -DEBUG: Available channels: 0, Lightning balances: 0 [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 107] -DEBUG: Started 7 backup status observers - BackupService [BackupService.swift: startBackupStatusObservers() line: 282] -DEBUG: Active transfers: 0 [BalanceManager.swift: deriveBalanceState() line: 66] -DEBUG: Balances in ldk-node: onchain=100000 lightning=0 [BalanceManager.swift: deriveBalanceState() line: 69] -DEBUG: Balances in state: onchain=100000 lightning=0 toSavings=0 toSpending=0 [BalanceManager.swift: deriveBalanceState() line: 72] -DEBUG: Started 7 data store listeners - BackupService [BackupService.swift: startDataStoreListeners() line: 364] -PERF: startPeriodicBackupFailureCheck() took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -DEBUG: Wallet finished initializing but node state is running [AppScene.swift: initializingContent line: 203] -INFOℹ️: Connected to trusted peer: 028a8910b0048630d4eb17af25668cdd7ea6f2d8ae20956e7a06e2ae46ebcb69fc [LightningService.swift: connectToTrustedPeers() line: 266] -PERF: connectToTrustedPeers() took 0.72 seconds on ldk queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -INFOℹ️: Synced LDK payments - Added: 0 - Updated: 1 - CoreService [CoreService.swift: syncLdkNodePayments(_:) line: 728] -PERF: syncLdkNodePayments(_:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 87] -PERF: newAddress() took 0.23 seconds on ldk queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -DEBUG: Syncing LDK... [LightningService.swift: sync() line: 314] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -DEBUG: Checking 0 pending transfers to spending [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 106] -DEBUG: Available channels: 0, Lightning balances: 0 [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 107] -DEBUG: Active transfers: 0 [BalanceManager.swift: deriveBalanceState() line: 66] -DEBUG: Balances in ldk-node: onchain=100000 lightning=0 [BalanceManager.swift: deriveBalanceState() line: 69] -DEBUG: Balances in state: onchain=100000 lightning=0 toSavings=0 toSpending=0 [BalanceManager.swift: deriveBalanceState() line: 72] -DEBUG: Checking 0 pending transfers to spending [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 106] -DEBUG: Available channels: 0, Lightning balances: 0 [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 107] -DEBUG: Active transfers: 0 [BalanceManager.swift: deriveBalanceState() line: 66] -DEBUG: Balances in ldk-node: onchain=100000 lightning=0 [BalanceManager.swift: deriveBalanceState() line: 69] -DEBUG: Balances in state: onchain=100000 lightning=0 toSavings=0 toSpending=0 [BalanceManager.swift: deriveBalanceState() line: 72] -PERF: addPreActivityMetadata(_:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: allPossibleTags() took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: allPossibleTags() took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: info(refresh:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 87] -PERF: info(refresh:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 87] -DEBUG: Transfer states synced after LDK payments sync - ActivityListViewModel [ActivityListViewModel.swift: syncLdkNodePayments() line: 236] -PERF: scheduleBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: scheduleBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: scheduleBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: scheduleBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: scheduleBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: scheduleBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -DEBUG: User entered home screen, starting timer [TimedSheetManager.swift: onHomeScreenEntered() line: 103] -DEBUG: Loading block data [BlocksViewModel.swift: loadBlockData() line: 46] -DEBUG: Loading article [NewsViewModel.swift: loadArticle() line: 46] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -INFOℹ️: ✅ Sync completed: type=onchainWallet height=44784 [LightningService.swift: listenForEvents(onEvent:) line: 842] -INFOℹ️: Sync completed: onchainWallet at height 44784 [AppViewModel.swift: handleLdkNodeEvent(_:) line: 555] -INFOℹ️: Sync completed: onchainWallet at height 44784 [WalletViewModel.swift: start(walletIndex:) line: 152] -DEBUG: Checking 0 pending transfers to spending [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 106] -DEBUG: Checking 0 pending transfers to spending [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 106] -DEBUG: Available channels: 0, Lightning balances: 0 [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 107] -DEBUG: Available channels: 0, Lightning balances: 0 [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 107] -DEBUG: Active transfers: 0 [BalanceManager.swift: deriveBalanceState() line: 66] -DEBUG: Active transfers: 0 [BalanceManager.swift: deriveBalanceState() line: 66] -DEBUG: Balances in ldk-node: onchain=100000 lightning=0 [BalanceManager.swift: deriveBalanceState() line: 69] -DEBUG: Balances in ldk-node: onchain=100000 lightning=0 [BalanceManager.swift: deriveBalanceState() line: 69] -DEBUG: Balances in state: onchain=100000 lightning=0 toSavings=0 toSpending=0 [BalanceManager.swift: deriveBalanceState() line: 72] -DEBUG: Balances in state: onchain=100000 lightning=0 toSavings=0 toSpending=0 [BalanceManager.swift: deriveBalanceState() line: 72] -INFOℹ️: Sync completed: onchainWallet at height 44784 [AppViewModel.swift: handleLdkNodeEvent(_:) line: 555] -INFOℹ️: ✅ Sync completed: type=onchainWallet height=44784 [LightningService.swift: listenForEvents(onEvent:) line: 842] -INFOℹ️: Sync completed: onchainWallet at height 44784 [WalletViewModel.swift: start(walletIndex:) line: 152] -PERF: sync() took 3.61 seconds on ldk queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -INFOℹ️: LDK synced [LightningService.swift: sync() line: 319] -PERF: refreshChannelCache() took 0.0 seconds on ldk queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -DEBUG: Checking 0 pending transfers to spending [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 106] -DEBUG: Available channels: 0, Lightning balances: 0 [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 107] -DEBUG: Active transfers: 0 [BalanceManager.swift: deriveBalanceState() line: 66] -DEBUG: Checking 0 pending transfers to spending [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 106] -DEBUG: Balances in ldk-node: onchain=100000 lightning=0 [BalanceManager.swift: deriveBalanceState() line: 69] -DEBUG: Balances in state: onchain=100000 lightning=0 toSavings=0 toSpending=0 [BalanceManager.swift: deriveBalanceState() line: 72] -DEBUG: Available channels: 0, Lightning balances: 0 [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 107] -DEBUG: Active transfers: 0 [BalanceManager.swift: deriveBalanceState() line: 66] -DEBUG: Balances in ldk-node: onchain=100000 lightning=0 [BalanceManager.swift: deriveBalanceState() line: 69] -DEBUG: Balances in state: onchain=100000 lightning=0 toSavings=0 toSpending=0 [BalanceManager.swift: deriveBalanceState() line: 72] -DEBUG: Checking 0 pending transfers to spending [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 106] -DEBUG: Available channels: 0, Lightning balances: 0 [BalanceManager.swift: getPendingChannelsSats(transfers:channels:balances:) line: 107] -DEBUG: Active transfers: 0 [BalanceManager.swift: deriveBalanceState() line: 66] -DEBUG: Balances in ldk-node: onchain=100000 lightning=0 [BalanceManager.swift: deriveBalanceState() line: 69] -DEBUG: Balances in state: onchain=100000 lightning=0 toSavings=0 toSpending=0 [BalanceManager.swift: deriveBalanceState() line: 72] -DEBUG: No timed sheets need to be shown [TimedSheetManager.swift: checkAndShowNextSheet() line: 181] -PERF: scheduleBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: triggerBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: triggerBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -DEBUG: Backup starting for: 'ACTIVITY' - BackupService [BackupService.swift: triggerBackup(category:) line: 121] -DEBUG: Backup starting for: 'METADATA' - BackupService [BackupService.swift: triggerBackup(category:) line: 121] -PERF: triggerBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: triggerBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: get(filter:txType:tags:search:minDate:maxDate:limit:sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: closedChannels(sortDirection:) took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: getAllActivitiesTags() took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: getAllPreActivityMetadata() took 0.0 seconds on core queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -DEBUG: VssSetupCoordinator: already completed, returning - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 18] -DEBUG: VSS 'putObject' call for 'METADATA' - VssBackupClient [VssBackupClient.swift: putObject(key:data:) line: 112] -DEBUG: VssSetupCoordinator: already completed, returning - VssBackupClient [VssBackupClient.swift: awaitSetup(setupAction:) line: 18] -DEBUG: VSS 'putObject' call for 'ACTIVITY' - VssBackupClient [VssBackupClient.swift: putObject(key:data:) line: 112] -DEBUG: VSS 'putObject' success for 'METADATA' at version: -1 - VssBackupClient [VssBackupClient.swift: putObject(key:data:) line: 116] -INFOℹ️: Backup succeeded for: 'METADATA' - BackupService [BackupService.swift: triggerBackup(category:) line: 143] -PERF: triggerBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58] -PERF: scheduleBackup(category:) took 0.0 seconds on backup queue [ServiceQueue.swift: background(_:_:functionName:) line: 58]