@@ -164,11 +164,35 @@ private class BDKService {
164
164
throw WalletError . walletNotFound
165
165
}
166
166
167
- let cleanDescriptor =
168
- descriptorString. split ( separator: " # " ) . first. map ( String . init) ?? descriptorString
169
- let descriptor = try Descriptor ( descriptor: cleanDescriptor, network: network)
170
- let changeDescriptorString = cleanDescriptor. replacingOccurrences ( of: " /0/* " , with: " /1/* " )
171
- let changeDescriptor = try Descriptor ( descriptor: changeDescriptorString, network: network)
167
+ let descriptor : Descriptor
168
+ let changeDescriptor : Descriptor
169
+
170
+ let cleanDescriptorString = descriptorString. components ( separatedBy: " \n " )
171
+ . map { $0. split ( separator: " # " ) . first? . trimmingCharacters ( in: . whitespaces) ?? " " }
172
+ . filter { !$0. isEmpty }
173
+ . joined ( separator: " \n " )
174
+
175
+ if let firstDescriptor = try ? Descriptor (
176
+ descriptor: cleanDescriptorString. components ( separatedBy: " \n " ) [ 0 ] ,
177
+ network: network
178
+ ) ,
179
+ firstDescriptor. isMultipath ( )
180
+ {
181
+ let baseDescriptor = cleanDescriptorString. components ( separatedBy: " \n " ) [ 0 ]
182
+ descriptor = try Descriptor (
183
+ descriptor: baseDescriptor. replacingOccurrences ( of: " <0;1> " , with: " 0 " ) ,
184
+ network: network
185
+ )
186
+ changeDescriptor = try Descriptor (
187
+ descriptor: baseDescriptor. replacingOccurrences ( of: " <0;1> " , with: " 1 " ) ,
188
+ network: network
189
+ )
190
+ } else {
191
+ let descriptors = cleanDescriptorString. components ( separatedBy: " \n " )
192
+ guard descriptors. count == 2 else { throw WalletError . walletNotFound }
193
+ descriptor = try Descriptor ( descriptor: descriptors [ 0 ] , network: network)
194
+ changeDescriptor = try Descriptor ( descriptor: descriptors [ 1 ] , network: network)
195
+ }
172
196
173
197
let backupInfo = BackupInfo (
174
198
mnemonic: " " ,
@@ -211,10 +235,20 @@ private class BDKService {
211
235
throw WalletError . walletNotFound
212
236
}
213
237
214
- let descriptorString = " tr( \( xpubString) /0/*) "
215
- let changeDescriptorString = " tr( \( xpubString) /1/*) "
216
- let descriptor = try Descriptor ( descriptor: descriptorString, network: network)
217
- let changeDescriptor = try Descriptor ( descriptor: changeDescriptorString, network: network)
238
+ let descriptorPublicKey = try DescriptorPublicKey . fromString ( publicKey: xpubString)
239
+ let fingerprint = descriptorPublicKey. masterFingerprint ( )
240
+ let descriptor = Descriptor . newBip86Public (
241
+ publicKey: descriptorPublicKey,
242
+ fingerprint: fingerprint,
243
+ keychain: . external,
244
+ network: network
245
+ )
246
+ let changeDescriptor = Descriptor . newBip86Public (
247
+ publicKey: descriptorPublicKey,
248
+ fingerprint: fingerprint,
249
+ keychain: . internal,
250
+ network: network
251
+ )
218
252
219
253
let backupInfo = BackupInfo (
220
254
mnemonic: " " ,
0 commit comments