Skip to content

Commit 11eefd1

Browse files
refactor: create wallet
1 parent e056dc9 commit 11eefd1

File tree

4 files changed

+65
-134
lines changed

4 files changed

+65
-134
lines changed

BDKSwiftExampleWallet.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
77F0FDC92DA9A93D00B30E4F /* Connection+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77F0FDC82DA9A93700B30E4F /* Connection+Extensions.swift */; };
1011
A733D6D02A81113000F333B4 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = A733D6CF2A81113000F333B4 /* Localizable.xcstrings */; };
1112
A73F7A362A3B778E00B87FC6 /* Int+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A73F7A352A3B778E00B87FC6 /* Int+Extensions.swift */; };
1213
AE0C30F72A804A2D008F1EAE /* TransactionListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE0C30F62A804A2D008F1EAE /* TransactionListView.swift */; };
@@ -107,6 +108,7 @@
107108
/* End PBXContainerItemProxy section */
108109

109110
/* Begin PBXFileReference section */
111+
77F0FDC82DA9A93700B30E4F /* Connection+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Connection+Extensions.swift"; sourceTree = "<group>"; };
110112
A733D6CF2A81113000F333B4 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; };
111113
A73F7A352A3B778E00B87FC6 /* Int+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Int+Extensions.swift"; sourceTree = "<group>"; };
112114
AE0C30F62A804A2D008F1EAE /* TransactionListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionListView.swift; sourceTree = "<group>"; };
@@ -524,6 +526,7 @@
524526
AEE6C74D2ABCB48600442ADD /* BDK+Extensions */ = {
525527
isa = PBXGroup;
526528
children = (
529+
77F0FDC82DA9A93700B30E4F /* Connection+Extensions.swift */,
527530
AEE6C74B2ABCB3E200442ADD /* Transaction+Extensions.swift */,
528531
AE83EFDA2C9D07B200B41244 /* ChainPosition+Extensions.swift */,
529532
AE2381B02C60690900F6B00C /* LocalOutput+Extensions.swift */,
@@ -708,6 +711,7 @@
708711
AE783A012AB4E5E1005F0CBA /* BuildTransactionView.swift in Sources */,
709712
AE6F34DA2AA6C1E00087E700 /* Balance+Extensions.swift in Sources */,
710713
AED4CC0C2A1D3A9400CE1831 /* OnboardingView.swift in Sources */,
714+
77F0FDC92DA9A93D00B30E4F /* Connection+Extensions.swift in Sources */,
711715
AE6716012A9AC089005C193F /* KeyServiceError.swift in Sources */,
712716
AE0C30FB2A804B95008F1EAE /* WalletViewModel.swift in Sources */,
713717
AE49847C2A1BBBD6009951E2 /* BDKSwiftExampleWalletApp.swift in Sources */,
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import BitcoinDevKit
2+
import Foundation
3+
4+
extension Connection {
5+
static func createConnection() throws -> Connection {
6+
let documentsDirectoryURL = URL.documentsDirectory
7+
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")
8+
9+
if FileManager.default.fileExists(atPath: walletDataDirectoryURL.path) {
10+
try FileManager.default.removeItem(at: walletDataDirectoryURL)
11+
}
12+
13+
try FileManager.default.ensureDirectoryExists(at: walletDataDirectoryURL)
14+
try FileManager.default.removeOldFlatFileIfNeeded(at: documentsDirectoryURL)
15+
let persistenceBackendPath = walletDataDirectoryURL.appendingPathComponent("wallet.sqlite")
16+
.path
17+
let connection = try Connection(path: persistenceBackendPath)
18+
return connection
19+
}
20+
}

BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift

Lines changed: 23 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -25,27 +25,7 @@ private class BDKService {
2525
let storedNetworkString = try? keyClient.getNetwork() ?? Network.signet.description
2626
self.network = Network(stringValue: storedNetworkString ?? "") ?? .signet
2727

28-
if let savedURL = try? keyClient.getEsploraURL() {
29-
self.esploraURL = savedURL
30-
} else {
31-
switch self.network {
32-
case .bitcoin:
33-
self.esploraURL =
34-
Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
35-
case .testnet:
36-
self.esploraURL =
37-
Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
38-
case .regtest:
39-
self.esploraURL =
40-
Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
41-
case .signet:
42-
self.esploraURL =
43-
Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
44-
case .testnet4:
45-
self.esploraURL =
46-
Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
47-
}
48-
}
28+
self.esploraURL = (try? keyClient.getEsploraURL()) ?? self.network.url
4929

5030
self.esploraClient = EsploraClient(url: self.esploraURL)
5131
}
@@ -59,21 +39,8 @@ private class BDKService {
5939
self.network = newNetwork
6040
try? keyClient.saveNetwork(newNetwork.description)
6141

62-
let newURL: String
63-
switch newNetwork {
64-
case .bitcoin:
65-
newURL = Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
66-
case .testnet:
67-
newURL = Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
68-
case .regtest:
69-
newURL = Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
70-
case .signet:
71-
newURL = Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
72-
case .testnet4:
73-
newURL = Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
74-
}
42+
let newURL = newNetwork.url
7543
updateEsploraURL(newURL)
76-
7744
}
7845
}
7946

@@ -125,35 +92,15 @@ private class BDKService {
12592
let localOutputs = wallet.listUnspent()
12693
return localOutputs
12794
}
128-
95+
12996
func createWallet(words: String?) throws {
130-
let savedURL = try? keyClient.getEsploraURL()
131-
132-
let documentsDirectoryURL = URL.documentsDirectory
133-
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")
134-
135-
if FileManager.default.fileExists(atPath: walletDataDirectoryURL.path) {
136-
try FileManager.default.removeItem(at: walletDataDirectoryURL)
97+
self.connection = try Connection.createConnection()
98+
guard let connection = connection else {
99+
throw WalletError.dbNotFound
137100
}
138-
139-
let baseUrl =
140-
savedURL
141-
?? {
142-
let defaultURL =
143-
switch self.network {
144-
case .bitcoin:
145-
Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
146-
case .testnet:
147-
Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
148-
case .regtest:
149-
Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
150-
case .signet:
151-
Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
152-
case .testnet4:
153-
Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
154-
}
155-
return defaultURL
156-
}()
101+
102+
let savedURL = try? keyClient.getEsploraURL()
103+
let baseUrl = savedURL ?? network.url
157104

158105
var words12: String
159106
if let words = words, !words.isEmpty {
@@ -191,13 +138,7 @@ private class BDKService {
191138
try keyClient.saveEsploraURL(baseUrl)
192139
self.esploraURL = baseUrl
193140
updateEsploraClient()
194-
195-
try FileManager.default.ensureDirectoryExists(at: walletDataDirectoryURL)
196-
try FileManager.default.removeOldFlatFileIfNeeded(at: documentsDirectoryURL)
197-
let persistenceBackendPath = walletDataDirectoryURL.appendingPathComponent("wallet.sqlite")
198-
.path
199-
let connection = try Connection(path: persistenceBackendPath)
200-
self.connection = connection
141+
201142
let wallet = try Wallet(
202143
descriptor: descriptor,
203144
changeDescriptor: changeDescriptor,
@@ -208,33 +149,13 @@ private class BDKService {
208149
}
209150

210151
func createWallet(descriptor: String?) throws {
211-
let savedURL = try? keyClient.getEsploraURL()
212-
213-
let documentsDirectoryURL = URL.documentsDirectory
214-
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")
215-
216-
if FileManager.default.fileExists(atPath: walletDataDirectoryURL.path) {
217-
try FileManager.default.removeItem(at: walletDataDirectoryURL)
152+
self.connection = try Connection.createConnection()
153+
guard let connection = connection else {
154+
throw WalletError.dbNotFound
218155
}
219-
220-
let baseUrl =
221-
savedURL
222-
?? {
223-
let defaultURL =
224-
switch self.network {
225-
case .bitcoin:
226-
Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
227-
case .testnet:
228-
Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
229-
case .regtest:
230-
Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
231-
case .signet:
232-
Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
233-
case .testnet4:
234-
Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
235-
}
236-
return defaultURL
237-
}()
156+
157+
let savedURL = try? keyClient.getEsploraURL()
158+
let baseUrl = savedURL ?? network.url
238159

239160
guard let descriptorString = descriptor, !descriptorString.isEmpty else {
240161
throw WalletError.walletNotFound
@@ -273,12 +194,6 @@ private class BDKService {
273194
try keyClient.saveNetwork(self.network.description)
274195
try keyClient.saveEsploraURL(baseUrl)
275196

276-
try FileManager.default.ensureDirectoryExists(at: walletDataDirectoryURL)
277-
try FileManager.default.removeOldFlatFileIfNeeded(at: documentsDirectoryURL)
278-
let persistenceBackendPath = walletDataDirectoryURL.appendingPathComponent("wallet.sqlite")
279-
.path
280-
let connection = try Connection(path: persistenceBackendPath)
281-
self.connection = connection
282197
let wallet = try Wallet(
283198
descriptor: descriptor,
284199
changeDescriptor: changeDescriptor,
@@ -289,33 +204,14 @@ private class BDKService {
289204
}
290205

291206
func createWallet(xpub: String?) throws {
292-
let savedURL = try? keyClient.getEsploraURL()
293-
294-
let documentsDirectoryURL = URL.documentsDirectory
295-
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")
296-
297-
if FileManager.default.fileExists(atPath: walletDataDirectoryURL.path) {
298-
try FileManager.default.removeItem(at: walletDataDirectoryURL)
207+
self.connection = try Connection.createConnection()
208+
guard let connection = connection else {
209+
throw WalletError.dbNotFound
299210
}
211+
212+
let savedURL = try? keyClient.getEsploraURL()
300213

301-
let baseUrl =
302-
savedURL
303-
?? {
304-
let defaultURL =
305-
switch self.network {
306-
case .bitcoin:
307-
Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
308-
case .testnet:
309-
Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
310-
case .regtest:
311-
Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
312-
case .signet:
313-
Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
314-
case .testnet4:
315-
Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
316-
}
317-
return defaultURL
318-
}()
214+
let baseUrl = savedURL ?? network.url
319215

320216
guard let xpubString = xpub, !xpubString.isEmpty else {
321217
throw WalletError.walletNotFound
@@ -347,13 +243,7 @@ private class BDKService {
347243
try keyClient.saveEsploraURL(baseUrl)
348244
self.esploraURL = baseUrl
349245
updateEsploraClient()
350-
351-
try FileManager.default.ensureDirectoryExists(at: walletDataDirectoryURL)
352-
try FileManager.default.removeOldFlatFileIfNeeded(at: documentsDirectoryURL)
353-
let persistenceBackendPath = walletDataDirectoryURL.appendingPathComponent("wallet.sqlite")
354-
.path
355-
let connection = try Connection(path: persistenceBackendPath)
356-
self.connection = connection
246+
357247
let wallet = try Wallet(
358248
descriptor: descriptor,
359249
changeDescriptor: changeDescriptor,
@@ -522,7 +412,6 @@ private class BDKService {
522412
let values = wallet.sentAndReceived(tx: tx)
523413
return values
524414
}
525-
526415
}
527416

528417
extension BDKService {

BDKSwiftExampleWallet/Utilities/Constants.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import Foundation
99
import SwiftUI
10+
import BitcoinDevKit
1011

1112
struct Constants {
1213
struct Config {
@@ -76,3 +77,20 @@ struct Constants {
7677
}
7778
}
7879
}
80+
81+
extension Network {
82+
var url: String {
83+
switch self {
84+
case .bitcoin:
85+
Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
86+
case .testnet:
87+
Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
88+
case .signet:
89+
Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
90+
case .regtest:
91+
Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
92+
case .testnet4:
93+
Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
94+
}
95+
}
96+
}

0 commit comments

Comments
 (0)