Skip to content

Commit ac7bc1b

Browse files
authored
chore: add testnet back
1 parent 0dd7747 commit ac7bc1b

File tree

10 files changed

+115
-111
lines changed

10 files changed

+115
-111
lines changed

BDKSwiftExampleWallet/Resources/Localizable.xcstrings

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -674,7 +674,6 @@
674674
}
675675
},
676676
"Testnet" : {
677-
"extractionState" : "stale",
678677
"localizations" : {
679678
"fr" : {
680679
"stringUnit" : {

BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift

Lines changed: 51 additions & 14 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
16+
private var esploraClient: EsploraClient
1717
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-
keyClient: KeyClient = .live
24-
) {
25-
let storedNetworkString = try! keyClient.getNetwork() ?? Network.signet.description
26-
let storedEsploraURL =
27-
try! keyClient.getEsploraURL()
28-
?? Constants.Config.EsploraServerURLNetwork.Signet.mutiny
29-
30-
self.network = Network(stringValue: storedNetworkString) ?? .signet
23+
init(keyClient: KeyClient = .live) {
3124
self.keyClient = keyClient
32-
self.esploraClient = EsploraClient(url: storedEsploraURL)
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 {
@@ -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/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: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,14 @@ import Foundation
1212
@Observable
1313
class TransactionListViewModel {
1414
let bdkClient: BDKClient
15-
let keyClient: KeyClient
1615

1716
var showingWalletTransactionsViewErrorAlert = false
1817
var walletTransactionsViewError: AppError?
1918

2019
init(
21-
bdkClient: BDKClient = .live,
22-
keyClient: KeyClient = .live
20+
bdkClient: BDKClient = .live
2321
) {
2422
self.bdkClient = bdkClient
25-
self.keyClient = keyClient
2623
}
2724

2825
func getSentAndReceived(tx: BitcoinDevKit.Transaction) -> SentAndReceivedValues? {
@@ -38,9 +35,14 @@ class TransactionListViewModel {
3835
}
3936
}
4037

41-
func getEsploraURL() -> String? {
42-
let savedEsploraURL = try? keyClient.getEsploraURL()
38+
func getEsploraURL() -> String {
39+
let savedEsploraURL = bdkClient.getEsploraURL()
4340
return savedEsploraURL
4441
}
4542

43+
func getNetwork() -> String {
44+
let savedNetwork = bdkClient.getNetwork().description
45+
return savedNetwork
46+
}
47+
4648
}

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() {

BDKSwiftExampleWallet/View Model/Settings/SettingsViewModel.swift

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import SwiftUI
1111

1212
class SettingsViewModel: ObservableObject {
1313
let bdkClient: BDKClient
14-
let keyClient: KeyClient
1514

1615
@AppStorage("isOnboarding") var isOnboarding: Bool = true
1716
@Published var esploraURL: String?
@@ -22,24 +21,20 @@ class SettingsViewModel: ObservableObject {
2221
@Published var walletSyncState: WalletSyncState = .notStarted
2322

2423
init(
25-
bdkClient: BDKClient = .live,
26-
keyClient: KeyClient = .live
24+
bdkClient: BDKClient = .live
2725
) {
2826
self.bdkClient = bdkClient
29-
self.keyClient = keyClient
27+
self.network = bdkClient.getNetwork().description
28+
self.esploraURL = bdkClient.getEsploraURL()
3029
}
3130

3231
func delete() {
3332
do {
3433
try bdkClient.deleteWallet()
35-
DispatchQueue.main.async {
36-
self.isOnboarding = true
37-
}
34+
isOnboarding = true
3835
} catch {
39-
DispatchQueue.main.async {
40-
self.settingsError = .generic(message: error.localizedDescription)
41-
self.showingSettingsViewErrorAlert = true
42-
}
36+
self.settingsError = .generic(message: error.localizedDescription)
37+
self.showingSettingsViewErrorAlert = true
4338
}
4439
}
4540

@@ -81,24 +76,11 @@ class SettingsViewModel: ObservableObject {
8176
}
8277

8378
func getNetwork() {
84-
do {
85-
self.network = try keyClient.getNetwork()
86-
} catch {
87-
DispatchQueue.main.async {
88-
self.settingsError = .generic(message: error.localizedDescription)
89-
self.showingSettingsViewErrorAlert = true
90-
}
91-
}
79+
self.network = bdkClient.getNetwork().description
9280
}
9381

9482
func getEsploraUrl() {
95-
do {
96-
self.esploraURL = try keyClient.getEsploraURL()
97-
} catch {
98-
DispatchQueue.main.async {
99-
self.settingsError = .generic(message: error.localizedDescription)
100-
}
101-
}
83+
self.esploraURL = bdkClient.getEsploraURL()
10284
}
10385

10486
private func updateProgressFullScan(inspected: UInt64) {

BDKSwiftExampleWallet/View/Activity/TransactionDetailView.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,9 @@ struct TransactionDetailView: View {
172172
#if DEBUG
173173
#Preview {
174174
TransactionDetailView(
175-
viewModel: .init(bdkClient: .mock, keyClient: .mock),
175+
viewModel: .init(
176+
bdkClient: .mock
177+
),
176178
amount: UInt64(1_000_000),
177179
canonicalTx: .mock
178180
)

BDKSwiftExampleWallet/View/Activity/TransactionListView.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ struct TransactionListView: View {
3838
let mutinyFaucetURL = URL(string: "https://faucet.mutinynet.com")
3939
let signetFaucetURL = URL(string: "https://signetfaucet.com")
4040

41-
if let mutinyFaucetURL, let signetFaucetURL {
41+
if let mutinyFaucetURL,
42+
let signetFaucetURL,
43+
viewModel.getNetwork() != Network.testnet.description
44+
{
4245

4346
Button {
4447
UIApplication.shared.open(
@@ -75,7 +78,9 @@ struct TransactionListView: View {
7578

7679
NavigationLink(
7780
destination: TransactionDetailView(
78-
viewModel: .init(bdkClient: .live, keyClient: .live),
81+
viewModel: .init(
82+
bdkClient: .live
83+
),
7984
amount: sentAndReceivedValues.sent.toSat() == 0
8085
? sentAndReceivedValues.received.toSat()
8186
: sentAndReceivedValues.sent.toSat()

BDKSwiftExampleWallet/View/OnboardingView.swift

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,16 @@ struct OnboardingView: View {
7777
}
7878
.padding()
7979

80-
Text("Signet")
81-
.foregroundStyle(.primary)
82-
.fontWeight(.light)
83-
.accessibilityLabel("Select Bitcoin Network")
80+
Picker(
81+
"Network",
82+
selection: $viewModel.selectedNetwork
83+
) {
84+
Text("Signet").tag(Network.signet)
85+
Text("Testnet").tag(Network.testnet)
86+
}
87+
.pickerStyle(.automatic)
88+
.tint(.primary)
89+
.accessibilityLabel("Select Bitcoin Network")
8490

8591
Picker(
8692
"Esplora Server",

0 commit comments

Comments
 (0)