Skip to content

Commit 5d58dd6

Browse files
authored
ui: export descriptor
1 parent e49bf53 commit 5d58dd6

File tree

4 files changed

+76
-12
lines changed

4 files changed

+76
-12
lines changed

BDKSwiftExampleWallet/Resources/Localizable.xcstrings

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@
289289
}
290290
},
291291
"Copy" : {
292+
"extractionState" : "stale",
292293
"localizations" : {
293294
"fr" : {
294295
"stringUnit" : {
@@ -327,6 +328,9 @@
327328
}
328329
}
329330
}
331+
},
332+
"Descriptors" : {
333+
330334
},
331335
"Destructive Zone" : {
332336
"localizations" : {
@@ -579,6 +583,9 @@
579583
}
580584
}
581585
}
586+
},
587+
"Seed" : {
588+
582589
},
583590
"Seed is not synced across devices." : {
584591

BDKSwiftExampleWallet/View Model/Activity/TransactionDetailViewModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class TransactionDetailViewModel {
4242

4343
func getEsploraUrl() {
4444
let savedEsploraURL = bdkClient.getEsploraURL()
45-
45+
4646
switch network {
4747
case "signet":
4848
if savedEsploraURL == Constants.Config.EsploraServerURLNetwork.Signet.bdk {

BDKSwiftExampleWallet/View Model/Settings/SeedViewModel.swift

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,46 @@ import SwiftUI
1414
class SeedViewModel {
1515
let bdkClient: BDKClient
1616

17-
var seed: BackupInfo?
17+
var backupInfo: BackupInfo?
18+
var publicDescriptor: Descriptor?
19+
var publicChangeDescriptor: Descriptor?
1820
var seedViewError: AppError?
1921
var showingSeedViewErrorAlert: Bool
2022

2123
init(
2224
bdkClient: BDKClient = .live,
23-
seed: BackupInfo? = nil,
25+
backupInfo: BackupInfo? = nil,
2426
seedViewError: AppError? = nil,
2527
showingSeedViewErrorAlert: Bool = false
2628
) {
2729
self.bdkClient = bdkClient
28-
self.seed = seed
30+
self.backupInfo = backupInfo
2931
self.seedViewError = seedViewError
3032
self.showingSeedViewErrorAlert = showingSeedViewErrorAlert
3133
}
3234

33-
func getSeed() {
35+
func getNetwork() -> Network {
36+
let savedNetwork = bdkClient.getNetwork()
37+
return savedNetwork
38+
}
39+
40+
func getBackupInfo(network: Network) {
3441
do {
35-
let seed = try bdkClient.getBackupInfo()
36-
self.seed = seed
42+
let backupInfo = try bdkClient.getBackupInfo()
43+
44+
let externalPublicDescriptor = try Descriptor.init(
45+
descriptor: backupInfo.descriptor,
46+
network: network
47+
)
48+
self.publicDescriptor = externalPublicDescriptor
49+
50+
let internalPublicDescriptor = try Descriptor.init(
51+
descriptor: backupInfo.changeDescriptor,
52+
network: network
53+
)
54+
self.publicChangeDescriptor = internalPublicDescriptor
55+
56+
self.backupInfo = backupInfo
3757
} catch {
3858
self.seedViewError = .generic(message: error.localizedDescription)
3959
self.showingSeedViewErrorAlert = true

BDKSwiftExampleWallet/View/Settings/SeedView.swift

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,13 @@ struct SeedView: View {
2020
.ignoresSafeArea()
2121

2222
VStack {
23-
if let seed = viewModel.seed {
23+
if let backupInfo = viewModel.backupInfo,
24+
let publicDescriptor = viewModel.publicDescriptor,
25+
let publicChangeDescriptor = viewModel.publicChangeDescriptor
26+
{
2427

2528
SeedPhraseView(
26-
words: seed.mnemonic.components(separatedBy: " "),
29+
words: backupInfo.mnemonic.components(separatedBy: " "),
2730
preferredWordsPerRow: 2,
2831
usePaging: true,
2932
wordsPerPage: 4
@@ -41,7 +44,7 @@ struct SeedView: View {
4144
HStack {
4245
Spacer()
4346
Button {
44-
UIPasteboard.general.string = seed.mnemonic
47+
UIPasteboard.general.string = backupInfo.mnemonic
4548
isCopied = true
4649
showCheckmark = true
4750
DispatchQueue.main.asyncAfter(deadline: .now() + 0.75) {
@@ -55,7 +58,7 @@ struct SeedView: View {
5558
? "document.on.document.fill" : "document.on.document"
5659
)
5760
.contentTransition(.symbolEffect(.replace))
58-
Text("Copy")
61+
Text("Seed")
5962
.bold()
6063
}
6164
}
@@ -70,6 +73,39 @@ struct SeedView: View {
7073
)
7174
Spacer()
7275
}
76+
77+
HStack {
78+
Spacer()
79+
80+
let formattedDescriptors = """
81+
External Private: \(backupInfo.descriptor)
82+
83+
External Public: \(publicDescriptor)
84+
85+
Internal Private: \(backupInfo.changeDescriptor)
86+
87+
Internal Public: \(publicChangeDescriptor)
88+
"""
89+
90+
ShareLink(item: formattedDescriptors) {
91+
HStack {
92+
Image(systemName: "square.and.arrow.up")
93+
Text("Descriptors")
94+
.bold()
95+
}
96+
}
97+
.buttonStyle(
98+
BitcoinFilled(
99+
width: 160,
100+
height: 40,
101+
tintColor: .primary,
102+
textColor: Color(uiColor: .systemBackground),
103+
isCapsule: true
104+
)
105+
)
106+
107+
Spacer()
108+
}
73109
.padding()
74110
} else {
75111
Text("No seed available")
@@ -79,7 +115,8 @@ struct SeedView: View {
79115
}
80116
.padding()
81117
.onAppear {
82-
viewModel.getSeed()
118+
let network = viewModel.getNetwork()
119+
viewModel.getBackupInfo(network: network)
83120
}
84121
}
85122
.alert(isPresented: $viewModel.showingSeedViewErrorAlert) {

0 commit comments

Comments
 (0)