From 5c63c80c853ac795153af1071fec48031f7f4fad Mon Sep 17 00:00:00 2001 From: Matthew Date: Wed, 28 Aug 2024 15:39:03 -0500 Subject: [PATCH 1/4] successfully builds --- .../BDK+Extensions/BDKError+Extensions.swift | 34 ++++++----- .../CanonicalTx+Extensions.swift | 10 +++- .../Resources/Localizable.xcstrings | 4 +- .../Service/BDK Service/BDKService.swift | 60 ++++++++++--------- .../Activity/ActivityListViewModel.swift | 2 +- .../View Model/OnboardingViewModel.swift | 6 +- .../View Model/TabHomeViewModel.swift | 2 +- .../View Model/WalletViewModel.swift | 2 +- .../View/Activity/TransactionDetailView.swift | 36 +++++------ .../View/Activity/TransactionItemView.swift | 10 ++-- 10 files changed, 92 insertions(+), 74 deletions(-) diff --git a/BDKSwiftExampleWallet/Extensions/BDK+Extensions/BDKError+Extensions.swift b/BDKSwiftExampleWallet/Extensions/BDK+Extensions/BDKError+Extensions.swift index 658c9693..5d3a34ee 100644 --- a/BDKSwiftExampleWallet/Extensions/BDK+Extensions/BDKError+Extensions.swift +++ b/BDKSwiftExampleWallet/Extensions/BDK+Extensions/BDKError+Extensions.swift @@ -138,21 +138,27 @@ extension SignerError { return errorMessage case .TxInputsIndexError(let errorMessage): return errorMessage + case .Psbt(errorMessage: let errorMessage): + return errorMessage } } } -extension WalletCreationError { - var description: String { - switch self { - case .Descriptor: - return "descriptor" - case .LoadedGenesisDoesNotMatch: - return "loaded genesis does not match" - case .LoadedNetworkDoesNotMatch(let expected, let got): - return "got: \(String(describing: got)), expected \(expected)" - case .LoadedDescriptorDoesNotMatch(let got, let keychain): - return "got: \(String(describing: got)), keychain \(keychain)" - } - } -} +// use +// - CreateWithPersistError +// - LoadWithPersistError + +//extension WalletCreationError { +// var description: String { +// switch self { +// case .Descriptor: +// return "descriptor" +// case .LoadedGenesisDoesNotMatch: +// return "loaded genesis does not match" +// case .LoadedNetworkDoesNotMatch(let expected, let got): +// return "got: \(String(describing: got)), expected \(expected)" +// case .LoadedDescriptorDoesNotMatch(let got, let keychain): +// return "got: \(String(describing: got)), keychain \(keychain)" +// } +// } +//} diff --git a/BDKSwiftExampleWallet/Extensions/BDK+Extensions/CanonicalTx+Extensions.swift b/BDKSwiftExampleWallet/Extensions/BDK+Extensions/CanonicalTx+Extensions.swift index e6410687..05dbd672 100644 --- a/BDKSwiftExampleWallet/Extensions/BDK+Extensions/CanonicalTx+Extensions.swift +++ b/BDKSwiftExampleWallet/Extensions/BDK+Extensions/CanonicalTx+Extensions.swift @@ -12,7 +12,15 @@ import Foundation extension CanonicalTx { static var mock = Self( transaction: .mock!, - chainPosition: .confirmed(height: UInt32(1_127_972), timestamp: UInt64(1_716_927_886)) + chainPosition: .confirmed( + confirmationBlockTime: .init( + blockId: .init( + height: UInt32(12), + hash: "hash" + ), + confirmationTime: UInt64(21) + ) + ) ) } //#endif diff --git a/BDKSwiftExampleWallet/Resources/Localizable.xcstrings b/BDKSwiftExampleWallet/Resources/Localizable.xcstrings index 2b26bf04..231e90a8 100644 --- a/BDKSwiftExampleWallet/Resources/Localizable.xcstrings +++ b/BDKSwiftExampleWallet/Resources/Localizable.xcstrings @@ -50,9 +50,6 @@ } } } - }, - "?" : { - }, "..." : { "localizations" : { @@ -473,6 +470,7 @@ }, "Receive" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { diff --git a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift index a12950ac..009cc59d 100644 --- a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift +++ b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift @@ -16,7 +16,7 @@ private class BDKService { private let keyService: KeyClient private let esploraClient: EsploraClient private var needsFullScan: Bool = false - private var dbService: SqliteStore? + private var dbService: Connection?//SqliteStore? init( keyService: KeyClient = .live @@ -36,10 +36,12 @@ private class BDKService { throw WalletError.walletNotFound } let addressInfo = wallet.revealNextAddress(keychain: .external) - guard let db = self.dbService else { throw WalletError.dbNotFound } - if let changeSet = wallet.takeStaged() { - try db.write(changeSet: changeSet) - } + +// guard let db = self.dbService else { throw WalletError.dbNotFound } +// if let changeSet = wallet.takeStaged() { +// try db.write(changeSet: changeSet) +// } + return addressInfo.address.description } @@ -112,14 +114,15 @@ private class BDKService { try FileManager.default.removeOldFlatFileIfNeeded(at: documentsDirectoryURL) let persistenceBackendPath = walletDataDirectoryURL.appendingPathComponent("wallet.sqlite") .path - let sqliteStore = try SqliteStore(path: persistenceBackendPath) - self.dbService = sqliteStore - let changeSet = try sqliteStore.read() - let wallet = try Wallet.newOrLoad( + let connection = try Connection(path: persistenceBackendPath)//let sqliteStore = try SqliteStore(path: persistenceBackendPath) + self.dbService = connection//sqliteStore +// let changeSet = try sqliteStore.read() + let wallet = try Wallet.load(//.newOrLoad( descriptor: descriptor, - changeDescriptor: changeDescriptor, - changeSet: changeSet, - network: network + changeDescriptor: changeDescriptor, + connection: connection//, +// changeSet: changeSet, +// network: network ) self.wallet = wallet } @@ -131,14 +134,15 @@ private class BDKService { try FileManager.default.removeOldFlatFileIfNeeded(at: documentsDirectoryURL) let persistenceBackendPath = walletDataDirectoryURL.appendingPathComponent("wallet.sqlite") .path - let sqliteStore = try SqliteStore(path: persistenceBackendPath) - self.dbService = sqliteStore - let changeSet = try sqliteStore.read() - let wallet = try Wallet.newOrLoad( + let connection = try Connection(path: persistenceBackendPath)//let sqliteStore = try SqliteStore(path: persistenceBackendPath) + self.dbService = connection//sqliteStore + //let changeSet = try sqliteStore.read() + let wallet = try Wallet.load(//.newOrLoad( descriptor: descriptor, - changeDescriptor: changeDescriptor, - changeSet: changeSet, - network: network + changeDescriptor: changeDescriptor, + connection: connection//, +// changeSet: changeSet, +// network: network ) self.wallet = wallet } @@ -214,15 +218,16 @@ private class BDKService { let esploraClient = self.esploraClient let syncRequest = try wallet.startSyncWithRevealedSpks() .inspectSpks(inspector: inspector) + .build() let update = try esploraClient.sync( syncRequest: syncRequest, parallelRequests: UInt64(5) ) let _ = try wallet.applyUpdate(update: update) - guard let db = self.dbService else { throw WalletError.dbNotFound } - if let changeSet = wallet.takeStaged() { - try db.write(changeSet: changeSet) - } +// guard let db = self.dbService else { throw WalletError.dbNotFound } +// if let changeSet = wallet.takeStaged() { +// try db.write(changeSet: changeSet) +// } } func fullScanWithInspector(inspector: FullScanScriptInspector) async throws { @@ -230,16 +235,17 @@ private class BDKService { let esploraClient = esploraClient let fullScanRequest = try wallet.startFullScan() .inspectSpksForAllKeychains(inspector: inspector) + .build() let update = try esploraClient.fullScan( fullScanRequest: fullScanRequest, stopGap: UInt64(150), // should we default value this for folks? parallelRequests: UInt64(5) // should we default value this for folks? ) let _ = try wallet.applyUpdate(update: update) - guard let db = self.dbService else { throw WalletError.dbNotFound } - if let changeSet = wallet.takeStaged() { - try db.write(changeSet: changeSet) - } +// guard let db = self.dbService else { throw WalletError.dbNotFound } +// if let changeSet = wallet.takeStaged() { +// try db.write(changeSet: changeSet) +// } } func calculateFee(tx: Transaction) throws -> Amount { diff --git a/BDKSwiftExampleWallet/View Model/Activity/ActivityListViewModel.swift b/BDKSwiftExampleWallet/View Model/Activity/ActivityListViewModel.swift index 528edcbe..4ae1ccff 100644 --- a/BDKSwiftExampleWallet/View Model/Activity/ActivityListViewModel.swift +++ b/BDKSwiftExampleWallet/View Model/Activity/ActivityListViewModel.swift @@ -74,7 +74,7 @@ class ActivityListViewModel { } catch let error as EsploraError { self.walletViewError = .generic(message: error.localizedDescription) self.showingWalletViewErrorAlert = true - } catch let error as InspectError { + } catch let error as RequestBuilderError {//InspectError { self.walletViewError = .generic(message: error.localizedDescription) self.showingWalletViewErrorAlert = true } catch let error as PersistenceError { diff --git a/BDKSwiftExampleWallet/View Model/OnboardingViewModel.swift b/BDKSwiftExampleWallet/View Model/OnboardingViewModel.swift index 21adc5a3..2a7530b7 100644 --- a/BDKSwiftExampleWallet/View Model/OnboardingViewModel.swift +++ b/BDKSwiftExampleWallet/View Model/OnboardingViewModel.swift @@ -19,7 +19,7 @@ class OnboardingViewModel: ObservableObject { @Published var networkColor = Color.gray @Published var onboardingViewError: AppError? - @Published var walletCreationError: WalletCreationError? + @Published var createWithPersistError: CreateWithPersistError? //@Published var walletCreationError: WalletCreationError? @Published var words: String = "" { didSet { updateWordArray() @@ -102,9 +102,9 @@ class OnboardingViewModel: ObservableObject { do { try bdkClient.createWallet(words) isOnboarding = false - } catch let error as WalletCreationError { + } catch let error as CreateWithPersistError {//WalletCreationError { DispatchQueue.main.async { - self.walletCreationError = error + self.createWithPersistError = error } } catch { DispatchQueue.main.async { diff --git a/BDKSwiftExampleWallet/View Model/TabHomeViewModel.swift b/BDKSwiftExampleWallet/View Model/TabHomeViewModel.swift index 6dc7a048..e09126b2 100644 --- a/BDKSwiftExampleWallet/View Model/TabHomeViewModel.swift +++ b/BDKSwiftExampleWallet/View Model/TabHomeViewModel.swift @@ -26,7 +26,7 @@ class TabHomeViewModel: ObservableObject { } catch let error as DescriptorError { self.tabViewError = .generic(message: error.localizedDescription) self.showingTabViewErrorAlert = true - } catch let error as WalletCreationError { + } catch let error as CreateWithPersistError {//WalletCreationError { self.tabViewError = .generic(message: error.localizedDescription) self.showingTabViewErrorAlert = true } catch { diff --git a/BDKSwiftExampleWallet/View Model/WalletViewModel.swift b/BDKSwiftExampleWallet/View Model/WalletViewModel.swift index 3ee250d2..bd1cf502 100644 --- a/BDKSwiftExampleWallet/View Model/WalletViewModel.swift +++ b/BDKSwiftExampleWallet/View Model/WalletViewModel.swift @@ -96,7 +96,7 @@ class WalletViewModel { } catch let error as EsploraError { self.walletViewError = .generic(message: error.localizedDescription) self.showingWalletViewErrorAlert = true - } catch let error as InspectError { + } catch let error as RequestBuilderError {//InspectError { self.walletViewError = .generic(message: error.localizedDescription) self.showingWalletViewErrorAlert = true } catch let error as PersistenceError { diff --git a/BDKSwiftExampleWallet/View/Activity/TransactionDetailView.swift b/BDKSwiftExampleWallet/View/Activity/TransactionDetailView.swift index b33f093e..a047c99a 100644 --- a/BDKSwiftExampleWallet/View/Activity/TransactionDetailView.swift +++ b/BDKSwiftExampleWallet/View/Activity/TransactionDetailView.swift @@ -28,26 +28,26 @@ struct TransactionDetailView: View { .fontWeight(.bold) .frame(width: 50, height: 50, alignment: .center) HStack(spacing: 3) { - let sentAndReceivedValues = viewModel.getSentAndReceived( - tx: canonicalTx.transaction - ) - if let value = sentAndReceivedValues { - let sent = value.sent - let received = value.received - if sent.toSat() == 0 && received.toSat() > 0 { - Text("Receive") - } else if sent.toSat() > 0 && received.toSat() >= 0 { - Text("Send") - } else { - Text("?") - } - } +// let sentAndReceivedValues = viewModel.getSentAndReceived( +// tx: canonicalTx.transaction +// ) +// if let value = sentAndReceivedValues { +// let sent = value.sent +// let received = value.received +// if sent.toSat() == 0 && received.toSat() > 0 { +// Text("Receive") +// } else if sent.toSat() > 0 && received.toSat() >= 0 { +// Text("Send") +// } else { +// Text("?") +// } +// } } .fontWeight(.semibold) switch canonicalTx.chainPosition { - case .confirmed(let height, _): - Text("Block \(height.delimiter)") + case .confirmed(let confirmationBlockTime)://.confirmed(let height, _): + Text("Block \(confirmationBlockTime.blockId.height.delimiter)")//Text("Block \(height.delimiter)") .foregroundColor(.secondary) case .unconfirmed(_): Text("Unconfirmed") @@ -72,9 +72,9 @@ struct TransactionDetailView: View { .fontDesign(.rounded) VStack(spacing: 4) { switch canonicalTx.chainPosition { - case .confirmed(_, let timestamp): + case .confirmed(let confirmationBlockTime)://.confirmed(_, let timestamp): Text( - timestamp.toDate().formatted( + confirmationBlockTime.confirmationTime.toDate().formatted(//timestamp.toDate().formatted( date: .abbreviated, time: Date.FormatStyle.TimeStyle.shortened ) diff --git a/BDKSwiftExampleWallet/View/Activity/TransactionItemView.swift b/BDKSwiftExampleWallet/View/Activity/TransactionItemView.swift index 1900a7fa..96a40d23 100644 --- a/BDKSwiftExampleWallet/View/Activity/TransactionItemView.swift +++ b/BDKSwiftExampleWallet/View/Activity/TransactionItemView.swift @@ -16,9 +16,9 @@ struct TransactionItemView: View { @Environment(\.dynamicTypeSize) var dynamicTypeSize var body: some View { - + HStack(spacing: 15) { - +// if isRedacted { Image( systemName: @@ -44,7 +44,7 @@ struct TransactionItemView: View { .foregroundStyle( { switch canonicalTx.chainPosition { - case .confirmed(_, _): + case .confirmed(_): Color.bitcoinOrange case .unconfirmed(_): Color.gray.opacity(0.5) @@ -63,9 +63,9 @@ struct TransactionItemView: View { .font(.title) .foregroundColor(.primary) switch canonicalTx.chainPosition { - case .confirmed(_, let timestamp): + case .confirmed(let confirmationBlockTime)://case .confirmed(let timestamp): Text( - timestamp.toDate().formatted( + confirmationBlockTime.confirmationTime.toDate().formatted(//timestamp.toDate().formatted( date: .abbreviated, time: .shortened ) From 74d134406c8921f7c8931383c7473cb9324e3e6f Mon Sep 17 00:00:00 2001 From: Matthew Date: Wed, 28 Aug 2024 15:50:34 -0500 Subject: [PATCH 2/4] successfully runs --- .../Service/BDK Service/BDKService.swift | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift index 009cc59d..a7d855ec 100644 --- a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift +++ b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift @@ -117,13 +117,22 @@ private class BDKService { let connection = try Connection(path: persistenceBackendPath)//let sqliteStore = try SqliteStore(path: persistenceBackendPath) self.dbService = connection//sqliteStore // let changeSet = try sqliteStore.read() - let wallet = try Wallet.load(//.newOrLoad( + +// let wallet = try Wallet.load(//.newOrLoad( +// descriptor: descriptor, +// changeDescriptor: changeDescriptor, +// connection: connection//, +//// changeSet: changeSet, +//// network: network +// ) + + let wallet = try Wallet(//.newOrLoad( descriptor: descriptor, - changeDescriptor: changeDescriptor, - connection: connection//, -// changeSet: changeSet, -// network: network + changeDescriptor: changeDescriptor, + network: network, + connection: connection ) + self.wallet = wallet } From 725a3e555180120093af0ced19fb5776a305ef77 Mon Sep 17 00:00:00 2001 From: Matthew Date: Wed, 28 Aug 2024 19:15:26 -0500 Subject: [PATCH 3/4] format --- .../BDK+Extensions/BDKError+Extensions.swift | 21 +-------- .../Resources/Localizable.xcstrings | 4 +- .../Service/BDK Service/BDKService.swift | 46 ++++--------------- .../Activity/ActivityListViewModel.swift | 2 +- .../View Model/OnboardingViewModel.swift | 4 +- .../View Model/TabHomeViewModel.swift | 2 +- .../View Model/WalletViewModel.swift | 2 +- .../View/Activity/TransactionDetailView.swift | 36 +++++++-------- .../View/Activity/TransactionItemView.swift | 8 ++-- 9 files changed, 40 insertions(+), 85 deletions(-) diff --git a/BDKSwiftExampleWallet/Extensions/BDK+Extensions/BDKError+Extensions.swift b/BDKSwiftExampleWallet/Extensions/BDK+Extensions/BDKError+Extensions.swift index 5d3a34ee..d7d95bcf 100644 --- a/BDKSwiftExampleWallet/Extensions/BDK+Extensions/BDKError+Extensions.swift +++ b/BDKSwiftExampleWallet/Extensions/BDK+Extensions/BDKError+Extensions.swift @@ -138,27 +138,8 @@ extension SignerError { return errorMessage case .TxInputsIndexError(let errorMessage): return errorMessage - case .Psbt(errorMessage: let errorMessage): + case .Psbt(let errorMessage): return errorMessage } } } - -// use -// - CreateWithPersistError -// - LoadWithPersistError - -//extension WalletCreationError { -// var description: String { -// switch self { -// case .Descriptor: -// return "descriptor" -// case .LoadedGenesisDoesNotMatch: -// return "loaded genesis does not match" -// case .LoadedNetworkDoesNotMatch(let expected, let got): -// return "got: \(String(describing: got)), expected \(expected)" -// case .LoadedDescriptorDoesNotMatch(let got, let keychain): -// return "got: \(String(describing: got)), keychain \(keychain)" -// } -// } -//} diff --git a/BDKSwiftExampleWallet/Resources/Localizable.xcstrings b/BDKSwiftExampleWallet/Resources/Localizable.xcstrings index 231e90a8..2b26bf04 100644 --- a/BDKSwiftExampleWallet/Resources/Localizable.xcstrings +++ b/BDKSwiftExampleWallet/Resources/Localizable.xcstrings @@ -50,6 +50,9 @@ } } } + }, + "?" : { + }, "..." : { "localizations" : { @@ -470,7 +473,6 @@ }, "Receive" : { - "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { diff --git a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift index a7d855ec..d8e8b7fa 100644 --- a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift +++ b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift @@ -16,7 +16,7 @@ private class BDKService { private let keyService: KeyClient private let esploraClient: EsploraClient private var needsFullScan: Bool = false - private var dbService: Connection?//SqliteStore? + private var connection: Connection? init( keyService: KeyClient = .live @@ -36,12 +36,6 @@ private class BDKService { throw WalletError.walletNotFound } let addressInfo = wallet.revealNextAddress(keychain: .external) - -// guard let db = self.dbService else { throw WalletError.dbNotFound } -// if let changeSet = wallet.takeStaged() { -// try db.write(changeSet: changeSet) -// } - return addressInfo.address.description } @@ -114,25 +108,14 @@ private class BDKService { try FileManager.default.removeOldFlatFileIfNeeded(at: documentsDirectoryURL) let persistenceBackendPath = walletDataDirectoryURL.appendingPathComponent("wallet.sqlite") .path - let connection = try Connection(path: persistenceBackendPath)//let sqliteStore = try SqliteStore(path: persistenceBackendPath) - self.dbService = connection//sqliteStore -// let changeSet = try sqliteStore.read() - -// let wallet = try Wallet.load(//.newOrLoad( -// descriptor: descriptor, -// changeDescriptor: changeDescriptor, -// connection: connection//, -//// changeSet: changeSet, -//// network: network -// ) - - let wallet = try Wallet(//.newOrLoad( + let connection = try Connection(path: persistenceBackendPath) + self.connection = connection + let wallet = try Wallet( descriptor: descriptor, changeDescriptor: changeDescriptor, network: network, connection: connection ) - self.wallet = wallet } @@ -143,15 +126,12 @@ private class BDKService { try FileManager.default.removeOldFlatFileIfNeeded(at: documentsDirectoryURL) let persistenceBackendPath = walletDataDirectoryURL.appendingPathComponent("wallet.sqlite") .path - let connection = try Connection(path: persistenceBackendPath)//let sqliteStore = try SqliteStore(path: persistenceBackendPath) - self.dbService = connection//sqliteStore - //let changeSet = try sqliteStore.read() - let wallet = try Wallet.load(//.newOrLoad( + let connection = try Connection(path: persistenceBackendPath) + self.connection = connection + let wallet = try Wallet.load( descriptor: descriptor, - changeDescriptor: changeDescriptor, - connection: connection//, -// changeSet: changeSet, -// network: network + changeDescriptor: changeDescriptor, + connection: connection ) self.wallet = wallet } @@ -233,10 +213,6 @@ private class BDKService { parallelRequests: UInt64(5) ) let _ = try wallet.applyUpdate(update: update) -// guard let db = self.dbService else { throw WalletError.dbNotFound } -// if let changeSet = wallet.takeStaged() { -// try db.write(changeSet: changeSet) -// } } func fullScanWithInspector(inspector: FullScanScriptInspector) async throws { @@ -251,10 +227,6 @@ private class BDKService { parallelRequests: UInt64(5) // should we default value this for folks? ) let _ = try wallet.applyUpdate(update: update) -// guard let db = self.dbService else { throw WalletError.dbNotFound } -// if let changeSet = wallet.takeStaged() { -// try db.write(changeSet: changeSet) -// } } func calculateFee(tx: Transaction) throws -> Amount { diff --git a/BDKSwiftExampleWallet/View Model/Activity/ActivityListViewModel.swift b/BDKSwiftExampleWallet/View Model/Activity/ActivityListViewModel.swift index 4ae1ccff..7e00fa85 100644 --- a/BDKSwiftExampleWallet/View Model/Activity/ActivityListViewModel.swift +++ b/BDKSwiftExampleWallet/View Model/Activity/ActivityListViewModel.swift @@ -74,7 +74,7 @@ class ActivityListViewModel { } catch let error as EsploraError { self.walletViewError = .generic(message: error.localizedDescription) self.showingWalletViewErrorAlert = true - } catch let error as RequestBuilderError {//InspectError { + } catch let error as RequestBuilderError { self.walletViewError = .generic(message: error.localizedDescription) self.showingWalletViewErrorAlert = true } catch let error as PersistenceError { diff --git a/BDKSwiftExampleWallet/View Model/OnboardingViewModel.swift b/BDKSwiftExampleWallet/View Model/OnboardingViewModel.swift index 2a7530b7..c101853d 100644 --- a/BDKSwiftExampleWallet/View Model/OnboardingViewModel.swift +++ b/BDKSwiftExampleWallet/View Model/OnboardingViewModel.swift @@ -19,7 +19,7 @@ class OnboardingViewModel: ObservableObject { @Published var networkColor = Color.gray @Published var onboardingViewError: AppError? - @Published var createWithPersistError: CreateWithPersistError? //@Published var walletCreationError: WalletCreationError? + @Published var createWithPersistError: CreateWithPersistError? @Published var words: String = "" { didSet { updateWordArray() @@ -102,7 +102,7 @@ class OnboardingViewModel: ObservableObject { do { try bdkClient.createWallet(words) isOnboarding = false - } catch let error as CreateWithPersistError {//WalletCreationError { + } catch let error as CreateWithPersistError { DispatchQueue.main.async { self.createWithPersistError = error } diff --git a/BDKSwiftExampleWallet/View Model/TabHomeViewModel.swift b/BDKSwiftExampleWallet/View Model/TabHomeViewModel.swift index e09126b2..67d46f9e 100644 --- a/BDKSwiftExampleWallet/View Model/TabHomeViewModel.swift +++ b/BDKSwiftExampleWallet/View Model/TabHomeViewModel.swift @@ -26,7 +26,7 @@ class TabHomeViewModel: ObservableObject { } catch let error as DescriptorError { self.tabViewError = .generic(message: error.localizedDescription) self.showingTabViewErrorAlert = true - } catch let error as CreateWithPersistError {//WalletCreationError { + } catch let error as LoadWithPersistError { self.tabViewError = .generic(message: error.localizedDescription) self.showingTabViewErrorAlert = true } catch { diff --git a/BDKSwiftExampleWallet/View Model/WalletViewModel.swift b/BDKSwiftExampleWallet/View Model/WalletViewModel.swift index bd1cf502..6916d0db 100644 --- a/BDKSwiftExampleWallet/View Model/WalletViewModel.swift +++ b/BDKSwiftExampleWallet/View Model/WalletViewModel.swift @@ -96,7 +96,7 @@ class WalletViewModel { } catch let error as EsploraError { self.walletViewError = .generic(message: error.localizedDescription) self.showingWalletViewErrorAlert = true - } catch let error as RequestBuilderError {//InspectError { + } catch let error as RequestBuilderError { self.walletViewError = .generic(message: error.localizedDescription) self.showingWalletViewErrorAlert = true } catch let error as PersistenceError { diff --git a/BDKSwiftExampleWallet/View/Activity/TransactionDetailView.swift b/BDKSwiftExampleWallet/View/Activity/TransactionDetailView.swift index a047c99a..d90e982b 100644 --- a/BDKSwiftExampleWallet/View/Activity/TransactionDetailView.swift +++ b/BDKSwiftExampleWallet/View/Activity/TransactionDetailView.swift @@ -28,26 +28,26 @@ struct TransactionDetailView: View { .fontWeight(.bold) .frame(width: 50, height: 50, alignment: .center) HStack(spacing: 3) { -// let sentAndReceivedValues = viewModel.getSentAndReceived( -// tx: canonicalTx.transaction -// ) -// if let value = sentAndReceivedValues { -// let sent = value.sent -// let received = value.received -// if sent.toSat() == 0 && received.toSat() > 0 { -// Text("Receive") -// } else if sent.toSat() > 0 && received.toSat() >= 0 { -// Text("Send") -// } else { -// Text("?") -// } -// } + let sentAndReceivedValues = viewModel.getSentAndReceived( + tx: canonicalTx.transaction + ) + if let value = sentAndReceivedValues { + let sent = value.sent + let received = value.received + if sent.toSat() == 0 && received.toSat() > 0 { + Text("Receive") + } else if sent.toSat() > 0 && received.toSat() >= 0 { + Text("Send") + } else { + Text("?") + } + } } .fontWeight(.semibold) switch canonicalTx.chainPosition { - case .confirmed(let confirmationBlockTime)://.confirmed(let height, _): - Text("Block \(confirmationBlockTime.blockId.height.delimiter)")//Text("Block \(height.delimiter)") + case .confirmed(let confirmationBlockTime): + Text("Block \(confirmationBlockTime.blockId.height.delimiter)") .foregroundColor(.secondary) case .unconfirmed(_): Text("Unconfirmed") @@ -72,9 +72,9 @@ struct TransactionDetailView: View { .fontDesign(.rounded) VStack(spacing: 4) { switch canonicalTx.chainPosition { - case .confirmed(let confirmationBlockTime)://.confirmed(_, let timestamp): + case .confirmed(let confirmationBlockTime): Text( - confirmationBlockTime.confirmationTime.toDate().formatted(//timestamp.toDate().formatted( + confirmationBlockTime.confirmationTime.toDate().formatted( date: .abbreviated, time: Date.FormatStyle.TimeStyle.shortened ) diff --git a/BDKSwiftExampleWallet/View/Activity/TransactionItemView.swift b/BDKSwiftExampleWallet/View/Activity/TransactionItemView.swift index 96a40d23..15de72ea 100644 --- a/BDKSwiftExampleWallet/View/Activity/TransactionItemView.swift +++ b/BDKSwiftExampleWallet/View/Activity/TransactionItemView.swift @@ -16,9 +16,9 @@ struct TransactionItemView: View { @Environment(\.dynamicTypeSize) var dynamicTypeSize var body: some View { - + HStack(spacing: 15) { -// + if isRedacted { Image( systemName: @@ -63,9 +63,9 @@ struct TransactionItemView: View { .font(.title) .foregroundColor(.primary) switch canonicalTx.chainPosition { - case .confirmed(let confirmationBlockTime)://case .confirmed(let timestamp): + case .confirmed(let confirmationBlockTime): Text( - confirmationBlockTime.confirmationTime.toDate().formatted(//timestamp.toDate().formatted( + confirmationBlockTime.confirmationTime.toDate().formatted( date: .abbreviated, time: .shortened ) From 1c2fd541baedd80227fd61efba9ed598cab68196 Mon Sep 17 00:00:00 2001 From: Matthew Date: Wed, 28 Aug 2024 19:39:18 -0500 Subject: [PATCH 4/4] fix: add persist to replace takestaged+write --- .../Service/BDK Service/BDKService.swift | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift index d8e8b7fa..653f79e7 100644 --- a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift +++ b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift @@ -35,7 +35,11 @@ private class BDKService { guard let wallet = self.wallet else { throw WalletError.walletNotFound } + guard let connection = self.connection else { + throw WalletError.dbNotFound + } let addressInfo = wallet.revealNextAddress(keychain: .external) + let _ = try wallet.persist(connection: connection) return addressInfo.address.description } @@ -213,6 +217,10 @@ private class BDKService { parallelRequests: UInt64(5) ) let _ = try wallet.applyUpdate(update: update) + guard let connection = self.connection else { + throw WalletError.dbNotFound + } + let _ = try wallet.persist(connection: connection) } func fullScanWithInspector(inspector: FullScanScriptInspector) async throws { @@ -227,6 +235,10 @@ private class BDKService { parallelRequests: UInt64(5) // should we default value this for folks? ) let _ = try wallet.applyUpdate(update: update) + guard let connection = self.connection else { + throw WalletError.dbNotFound + } + let _ = try wallet.persist(connection: connection) } func calculateFee(tx: Transaction) throws -> Amount {