Skip to content

Commit 1dd127d

Browse files
committed
Merge branch 'main' into descript
2 parents 7429faa + e49bf53 commit 1dd127d

File tree

15 files changed

+209
-152
lines changed

15 files changed

+209
-152
lines changed

BDKSwiftExampleWallet.xcodeproj/project.pbxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1017,7 +1017,7 @@
10171017
repositoryURL = "https://github.com/bitcoindevkit/bdk-swift.git";
10181018
requirement = {
10191019
kind = exactVersion;
1020-
version = "1.0.0-beta.2";
1020+
version = "1.0.0-beta.5";
10211021
};
10221022
};
10231023
/* End XCRemoteSwiftPackageReference section */

BDKSwiftExampleWallet/Resources/Localizable.xcstrings

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@
329329
}
330330
}
331331
},
332-
"Descriptor" : {
332+
"Descriptors" : {
333333

334334
},
335335
"Destructive Zone" : {
@@ -401,6 +401,9 @@
401401
}
402402
}
403403
}
404+
},
405+
"Get sats from faucet" : {
406+
404407
},
405408
"HomeView Error" : {
406409
"localizations" : {

BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift

Lines changed: 62 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,40 @@ private class BDKService {
1313

1414
private var balance: Balance?
1515
private var connection: Connection?
16-
private let esploraClient: EsploraClient
17-
private let keyService: KeyClient
16+
private var esploraClient: EsploraClient
17+
private let keyClient: KeyClient
1818
private var needsFullScan: Bool = false
19-
var network: Network
19+
private(set) var network: Network
20+
private(set) var esploraURL: String
2021
private var wallet: Wallet?
2122

22-
init(
23-
keyService: KeyClient = .live
24-
) {
25-
let storedNetworkString = try! keyService.getNetwork() ?? Network.signet.description
26-
let storedEsploraURL =
27-
try! keyService.getEsploraURL()
28-
?? Constants.Config.EsploraServerURLNetwork.Signet.mutiny
29-
30-
self.network = Network(stringValue: storedNetworkString) ?? .signet
31-
self.keyService = keyService
32-
self.esploraClient = EsploraClient(url: storedEsploraURL)
23+
init(keyClient: KeyClient = .live) {
24+
self.keyClient = keyClient
25+
let storedNetworkString = try? keyClient.getNetwork() ?? Network.signet.description
26+
self.network = Network(stringValue: storedNetworkString ?? "") ?? .signet
27+
self.esploraURL =
28+
try! keyClient.getEsploraURL() ?? Constants.Config.EsploraServerURLNetwork.Signet.mutiny
29+
self.esploraClient = EsploraClient(url: self.esploraURL)
30+
}
31+
32+
func updateNetwork(_ newNetwork: Network) {
33+
if newNetwork != self.network {
34+
self.network = newNetwork
35+
try? keyClient.saveNetwork(newNetwork.description)
36+
updateEsploraClient()
37+
}
38+
}
39+
40+
func updateEsploraURL(_ newURL: String) {
41+
if newURL != self.esploraURL {
42+
self.esploraURL = newURL
43+
try? keyClient.saveEsploraURL(newURL)
44+
updateEsploraClient()
45+
}
46+
}
47+
48+
private func updateEsploraClient() {
49+
self.esploraClient = EsploraClient(url: self.esploraURL)
3350
}
3451

3552
func getAddress() throws -> String {
@@ -79,7 +96,7 @@ private class BDKService {
7996
}
8097

8198
let baseUrl =
82-
try keyService.getEsploraURL() ?? Constants.Config.EsploraServerURLNetwork.Signet.mutiny
99+
try keyClient.getEsploraURL() ?? Constants.Config.EsploraServerURLNetwork.Signet.mutiny
83100

84101
var words12: String
85102
if let words = words, !words.isEmpty {
@@ -112,9 +129,9 @@ private class BDKService {
112129
changeDescriptor: changeDescriptor.toStringWithSecret()
113130
)
114131

115-
try keyService.saveBackupInfo(backupInfo)
116-
try keyService.saveNetwork(self.network.description)
117-
try keyService.saveEsploraURL(baseUrl)
132+
try keyClient.saveBackupInfo(backupInfo)
133+
try keyClient.saveNetwork(self.network.description)
134+
try keyClient.saveEsploraURL(baseUrl)
118135

119136
try FileManager.default.ensureDirectoryExists(at: walletDataDirectoryURL)
120137
try FileManager.default.removeOldFlatFileIfNeeded(at: documentsDirectoryURL)
@@ -149,7 +166,7 @@ private class BDKService {
149166
}
150167

151168
func loadWalletFromBackup() throws {
152-
let backupInfo = try keyService.getBackupInfo()
169+
let backupInfo = try keyClient.getBackupInfo()
153170
let descriptor = try Descriptor(descriptor: backupInfo.descriptor, network: self.network)
154171
let changeDescriptor = try Descriptor(
155172
descriptor: backupInfo.changeDescriptor,
@@ -162,9 +179,9 @@ private class BDKService {
162179
if let bundleID = Bundle.main.bundleIdentifier {
163180
UserDefaults.standard.removePersistentDomain(forName: bundleID)
164181
}
165-
try self.keyService.deleteBackupInfo()
166-
try self.keyService.deleteEsplora()
167-
try self.keyService.deleteNetwork()
182+
try self.keyClient.deleteBackupInfo()
183+
try self.keyClient.deleteEsplora()
184+
try self.keyClient.deleteNetwork()
168185

169186
let documentsDirectoryURL = URL.documentsDirectory
170187
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")
@@ -177,7 +194,7 @@ private class BDKService {
177194
}
178195

179196
func getBackupInfo() throws -> BackupInfo {
180-
let backupInfo = try keyService.getBackupInfo()
197+
let backupInfo = try keyClient.getBackupInfo()
181198
return backupInfo
182199
}
183200

@@ -311,6 +328,10 @@ struct BDKClient {
311328
let getBackupInfo: () throws -> BackupInfo
312329
let needsFullScan: () -> Bool
313330
let setNeedsFullScan: (Bool) -> Void
331+
let getNetwork: () -> Network
332+
let getEsploraURL: () -> String
333+
let updateNetwork: (Network) -> Void
334+
let updateEsploraURL: (String) -> Void
314335
}
315336

316337
extension BDKClient {
@@ -345,7 +366,19 @@ extension BDKClient {
345366
},
346367
getBackupInfo: { try BDKService.shared.getBackupInfo() },
347368
needsFullScan: { BDKService.shared.needsFullScanOfWallet() },
348-
setNeedsFullScan: { value in BDKService.shared.setNeedsFullScan(value) }
369+
setNeedsFullScan: { value in BDKService.shared.setNeedsFullScan(value) },
370+
getNetwork: {
371+
BDKService.shared.network
372+
},
373+
getEsploraURL: {
374+
BDKService.shared.esploraURL
375+
},
376+
updateNetwork: { newNetwork in
377+
BDKService.shared.updateNetwork(newNetwork)
378+
},
379+
updateEsploraURL: { newURL in
380+
BDKService.shared.updateEsploraURL(newURL)
381+
}
349382
)
350383
}
351384

@@ -395,7 +428,11 @@ extension BDKClient {
395428
)
396429
},
397430
needsFullScan: { true },
398-
setNeedsFullScan: { _ in }
431+
setNeedsFullScan: { _ in },
432+
getNetwork: { .signet },
433+
getEsploraURL: { Constants.Config.EsploraServerURLNetwork.Signet.mutiny },
434+
updateNetwork: { _ in },
435+
updateEsploraURL: { _ in }
399436
)
400437
}
401438
#endif

BDKSwiftExampleWallet/Utilities/Constants.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ struct Constants {
3434
]
3535
}
3636
struct Testnet {
37-
static let blockstream = "http://blockstream.info/testnet/api/"
37+
static let blockstream = "https://blockstream.info/testnet/api/"
3838
//static let kuutamo = "https://esplora.testnet.kuutamo.cloud"
3939
static let mempoolspace = "https://mempool.space/testnet/api/"
4040
static let allValues = [

BDKSwiftExampleWallet/View Model/Activity/TransactionDetailViewModel.swift

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import Observation
1313
@Observable
1414
class TransactionDetailViewModel {
1515
let bdkClient: BDKClient
16-
let keyClient: KeyClient
1716

1817
var calculateFee: String?
1918
var calculateFeeError: CalculateFeeError?
@@ -24,11 +23,9 @@ class TransactionDetailViewModel {
2423
var transactionDetailsError: AppError?
2524

2625
init(
27-
bdkClient: BDKClient = .live,
28-
keyClient: KeyClient = .live
26+
bdkClient: BDKClient = .live
2927
) {
3028
self.bdkClient = bdkClient
31-
self.keyClient = keyClient
3229
}
3330

3431
func getCalulateFee(tx: BitcoinDevKit.Transaction) {
@@ -44,28 +41,28 @@ class TransactionDetailViewModel {
4441
}
4542

4643
func getEsploraUrl() {
47-
do {
48-
let savedEsploraURL = try keyClient.getEsploraURL()
49-
if network == "Signet" {
44+
let savedEsploraURL = bdkClient.getEsploraURL()
45+
46+
switch network {
47+
case "signet":
48+
if savedEsploraURL == Constants.Config.EsploraServerURLNetwork.Signet.bdk {
5049
self.esploraURL = "https://mempool.space/signet"
5150
} else {
52-
self.esploraURL = savedEsploraURL
51+
self.esploraURL = "https://mutinynet.com"
5352
}
54-
} catch let error as EsploraError {
55-
DispatchQueue.main.async {
56-
self.esploraError = error
53+
case "testnet":
54+
if savedEsploraURL == Constants.Config.EsploraServerURLNetwork.Testnet.blockstream {
55+
self.esploraURL = "https://blockstream.info/testnet"
56+
} else {
57+
self.esploraURL = "https://mempool.space/testnet"
5758
}
58-
} catch {}
59+
default:
60+
self.esploraURL = savedEsploraURL
61+
}
5962
}
6063

6164
func getNetwork() {
62-
do {
63-
self.network = try keyClient.getNetwork()
64-
} catch {
65-
DispatchQueue.main.async {
66-
self.transactionDetailsError = .generic(message: error.localizedDescription)
67-
}
68-
}
65+
self.network = bdkClient.getNetwork().description
6966
}
7067

7168
func getSentAndReceived(tx: BitcoinDevKit.Transaction) -> SentAndReceivedValues? {

BDKSwiftExampleWallet/View Model/Activity/TransactionListViewModel.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,14 @@ class TransactionListViewModel {
3535
}
3636
}
3737

38+
func getEsploraURL() -> String {
39+
let savedEsploraURL = bdkClient.getEsploraURL()
40+
return savedEsploraURL
41+
}
42+
43+
func getNetwork() -> String {
44+
let savedNetwork = bdkClient.getNetwork().description
45+
return savedNetwork
46+
}
47+
3848
}

BDKSwiftExampleWallet/View Model/OnboardingViewModel.swift

Lines changed: 7 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -14,35 +14,21 @@ import SwiftUI
1414
// Feature or Bug?
1515
class OnboardingViewModel: ObservableObject {
1616
let bdkClient: BDKClient
17-
let keyClient: KeyClient
1817

1918
@AppStorage("isOnboarding") var isOnboarding: Bool?
2019
@Published var createWithPersistError: CreateWithPersistError?
2120
@Published var networkColor = Color.gray
2221
@Published var onboardingViewError: AppError?
2322
@Published var selectedNetwork: Network = .signet {
2423
didSet {
25-
do {
26-
let networkString = selectedNetwork.description
27-
try keyClient.saveNetwork(networkString)
28-
selectedURL = availableURLs.first ?? ""
29-
try keyClient.saveEsploraURL(selectedURL)
30-
} catch {
31-
DispatchQueue.main.async {
32-
self.onboardingViewError = .generic(message: error.localizedDescription)
33-
}
34-
}
24+
bdkClient.updateNetwork(selectedNetwork)
25+
selectedURL = availableURLs.first ?? ""
26+
bdkClient.updateEsploraURL(selectedURL)
3527
}
3628
}
3729
@Published var selectedURL: String = "" {
3830
didSet {
39-
do {
40-
try keyClient.saveEsploraURL(selectedURL)
41-
} catch {
42-
DispatchQueue.main.async {
43-
self.onboardingViewError = .generic(message: error.localizedDescription)
44-
}
45-
}
31+
bdkClient.updateEsploraURL(selectedURL)
4632
}
4733
}
4834
@Published var words: String = "" {
@@ -77,27 +63,11 @@ class OnboardingViewModel: ObservableObject {
7763
}
7864

7965
init(
80-
bdkClient: BDKClient = .live,
81-
keyClient: KeyClient = .live
66+
bdkClient: BDKClient = .live
8267
) {
8368
self.bdkClient = bdkClient
84-
self.keyClient = keyClient
85-
do {
86-
if let networkString = try keyClient.getNetwork() {
87-
self.selectedNetwork = Network(stringValue: networkString) ?? .signet
88-
} else {
89-
self.selectedNetwork = .signet
90-
}
91-
if let esploraURL = try keyClient.getEsploraURL() {
92-
self.selectedURL = esploraURL
93-
} else {
94-
self.selectedURL = availableURLs.first ?? ""
95-
}
96-
} catch {
97-
DispatchQueue.main.async {
98-
self.onboardingViewError = .generic(message: error.localizedDescription)
99-
}
100-
}
69+
self.selectedNetwork = bdkClient.getNetwork()
70+
self.selectedURL = bdkClient.getEsploraURL()
10171
}
10272

10373
func createWallet() {

0 commit comments

Comments
 (0)