diff --git a/BDKSwiftExampleWallet.xcodeproj/project.pbxproj b/BDKSwiftExampleWallet.xcodeproj/project.pbxproj index 8698edde..a6eb6c5e 100644 --- a/BDKSwiftExampleWallet.xcodeproj/project.pbxproj +++ b/BDKSwiftExampleWallet.xcodeproj/project.pbxproj @@ -1072,10 +1072,10 @@ /* Begin XCRemoteSwiftPackageReference section */ AF77B2212F4B2C9E00000001 /* XCRemoteSwiftPackageReference "bdk-swift" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/bitcoindevkit/bdk-swift"; + repositoryURL = "https://github.com/bitcoindevkit/bdk-swift.git"; requirement = { kind = exactVersion; - version = 2.3.1; + version = 3.0.0; }; }; AF77B2222F4B2C9E00000002 /* XCRemoteSwiftPackageReference "CodeScanner" */ = { diff --git a/BDKSwiftExampleWallet/Extensions/BDK+Extensions/Network+Extensions.swift b/BDKSwiftExampleWallet/Extensions/BDK+Extensions/Network+Extensions.swift index 37b6febc..09d55b95 100644 --- a/BDKSwiftExampleWallet/Extensions/BDK+Extensions/Network+Extensions.swift +++ b/BDKSwiftExampleWallet/Extensions/BDK+Extensions/Network+Extensions.swift @@ -9,6 +9,13 @@ import BitcoinDevKit import Foundation extension Network { + var kind: NetworkKind { + switch self { + case .bitcoin: return .main + case .testnet, .testnet4, .signet, .regtest: return .test + } + } + var description: String { switch self { case .bitcoin: return "bitcoin" diff --git a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift index 8f0519b2..9a364394 100644 --- a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift +++ b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift @@ -199,29 +199,30 @@ final class BDKService { secretKey: DescriptorSecretKey, network: Network ) -> (descriptor: Descriptor, changeDescriptor: Descriptor) { + let networkKind = network.kind switch addressType { case .bip86: let descriptor = Descriptor.newBip86( secretKey: secretKey, keychainKind: .external, - network: network + networkKind: networkKind ) let changeDescriptor = Descriptor.newBip86( secretKey: secretKey, keychainKind: .internal, - network: network + networkKind: networkKind ) return (descriptor, changeDescriptor) case .bip84: let descriptor = Descriptor.newBip84( secretKey: secretKey, keychainKind: .external, - network: network + networkKind: networkKind ) let changeDescriptor = Descriptor.newBip84( secretKey: secretKey, keychainKind: .internal, - network: network + networkKind: networkKind ) return (descriptor, changeDescriptor) } @@ -233,19 +234,20 @@ final class BDKService { fingerprint: String, network: Network ) throws -> (descriptor: Descriptor, changeDescriptor: Descriptor) { + let networkKind = network.kind switch addressType { case .bip86: let descriptor = try Descriptor.newBip86Public( publicKey: publicKey, fingerprint: fingerprint, keychainKind: .external, - network: network + networkKind: networkKind ) let changeDescriptor = try Descriptor.newBip86Public( publicKey: publicKey, fingerprint: fingerprint, keychainKind: .internal, - network: network + networkKind: networkKind ) return (descriptor, changeDescriptor) case .bip84: @@ -253,13 +255,13 @@ final class BDKService { publicKey: publicKey, fingerprint: fingerprint, keychainKind: .external, - network: network + networkKind: networkKind ) let changeDescriptor = try Descriptor.newBip84Public( publicKey: publicKey, fingerprint: fingerprint, keychainKind: .internal, - network: network + networkKind: networkKind ) return (descriptor, changeDescriptor) } @@ -327,7 +329,7 @@ final class BDKService { } let mnemonic = try Mnemonic.fromString(mnemonic: words12) let secretKey = DescriptorSecretKey( - network: network, + networkKind: network.kind, mnemonic: mnemonic, password: nil ) @@ -381,7 +383,7 @@ final class BDKService { if descriptorStrings.count == 1 { let parsedDescriptor = try Descriptor( descriptor: descriptorStrings[0], - network: network + networkKind: network.kind ) let singleDescriptors = try parsedDescriptor.toSingleDescriptors() guard singleDescriptors.count >= 2 else { @@ -390,8 +392,11 @@ final class BDKService { descriptor = singleDescriptors[0] changeDescriptor = singleDescriptors[1] } else if descriptorStrings.count == 2 { - descriptor = try Descriptor(descriptor: descriptorStrings[0], network: network) - changeDescriptor = try Descriptor(descriptor: descriptorStrings[1], network: network) + descriptor = try Descriptor(descriptor: descriptorStrings[0], networkKind: network.kind) + changeDescriptor = try Descriptor( + descriptor: descriptorStrings[1], + networkKind: network.kind + ) } else { throw WalletError.walletNotFound } @@ -515,10 +520,13 @@ final class BDKService { func loadWalletFromBackup() throws { let backupInfo = try keyClient.getBackupInfo() - let descriptor = try Descriptor(descriptor: backupInfo.descriptor, network: self.network) + let descriptor = try Descriptor( + descriptor: backupInfo.descriptor, + networkKind: self.network.kind + ) let changeDescriptor = try Descriptor( descriptor: backupInfo.changeDescriptor, - network: self.network + networkKind: self.network.kind ) try self.loadWallet(descriptor: descriptor, changeDescriptor: changeDescriptor) } @@ -578,7 +586,7 @@ final class BDKService { guard let descriptor = try? Descriptor( descriptor: descriptorString, - network: self.network + networkKind: self.network.kind ) else { continue diff --git a/BDKSwiftExampleWallet/Service/Key Service/KeyService.swift b/BDKSwiftExampleWallet/Service/Key Service/KeyService.swift index 4ba5b546..7b7c3036 100644 --- a/BDKSwiftExampleWallet/Service/Key Service/KeyService.swift +++ b/BDKSwiftExampleWallet/Service/Key Service/KeyService.swift @@ -161,19 +161,19 @@ extension KeyClient { "space echo position wrist orient erupt relief museum myself grain wisdom tumble" let mnemonic = try Mnemonic.fromString(mnemonic: words12) let secretKey = DescriptorSecretKey( - network: mockKeyClientNetwork, + networkKind: mockKeyClientNetwork.kind, mnemonic: mnemonic, password: nil ) let descriptor = Descriptor.newBip86( secretKey: secretKey, keychainKind: .external, - network: mockKeyClientNetwork + networkKind: mockKeyClientNetwork.kind ) let changeDescriptor = Descriptor.newBip86( secretKey: secretKey, keychainKind: .internal, - network: mockKeyClientNetwork + networkKind: mockKeyClientNetwork.kind ) let backupInfo = BackupInfo( mnemonic: mnemonic.description, diff --git a/BDKSwiftExampleWallet/View Model/Settings/WalletRecoveryViewModel.swift b/BDKSwiftExampleWallet/View Model/Settings/WalletRecoveryViewModel.swift index 6a799a0f..3a40dcb5 100644 --- a/BDKSwiftExampleWallet/View Model/Settings/WalletRecoveryViewModel.swift +++ b/BDKSwiftExampleWallet/View Model/Settings/WalletRecoveryViewModel.swift @@ -44,13 +44,13 @@ class WalletRecoveryViewModel { let externalPublicDescriptor = try Descriptor.init( descriptor: backupInfo.descriptor, - network: network + networkKind: network.kind ) self.publicDescriptor = externalPublicDescriptor let internalPublicDescriptor = try Descriptor.init( descriptor: backupInfo.changeDescriptor, - network: network + networkKind: network.kind ) self.publicChangeDescriptor = internalPublicDescriptor diff --git a/BDKSwiftExampleWalletTests/Service/BDKSwiftExampleWalletKeyServiceTests.swift b/BDKSwiftExampleWalletTests/Service/BDKSwiftExampleWalletKeyServiceTests.swift index e390595c..d5a12547 100644 --- a/BDKSwiftExampleWalletTests/Service/BDKSwiftExampleWalletKeyServiceTests.swift +++ b/BDKSwiftExampleWalletTests/Service/BDKSwiftExampleWalletKeyServiceTests.swift @@ -19,19 +19,19 @@ final class BDKSwiftExampleWalletKeyServiceTests: XCTestCase { "space echo position wrist orient erupt relief museum myself grain wisdom tumble" let mnemonic = try Mnemonic.fromString(mnemonic: words12) let secretKey = DescriptorSecretKey( - network: mockKeyClientNetwork, + networkKind: mockKeyClientNetwork.kind, mnemonic: mnemonic, password: nil ) let descriptor = Descriptor.newBip86( secretKey: secretKey, keychainKind: .external, - network: mockKeyClientNetwork + networkKind: mockKeyClientNetwork.kind ) let changeDescriptor = Descriptor.newBip86( secretKey: secretKey, keychainKind: .internal, - network: mockKeyClientNetwork + networkKind: mockKeyClientNetwork.kind ) let backupInfoMock = BackupInfo( mnemonic: mnemonic.description, diff --git a/README.md b/README.md index 57fa58f3..54c81412 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Download the app on [TestFlight](https://testflight.apple.com/join/A3nAuYvZ). *Note: Xcode 26 preferred because `BDK Swift Example Wallet` App Icon built with the new [Icon Composer](https://developer.apple.com/icon-composer/). -The `main` branch of BDK Swift Example Wallet uses [bdk-swift](https://github.com/bitcoindevkit/bdk-swift) 2.0+. +The `main` branch of BDK Swift Example Wallet uses [bdk-swift](https://github.com/bitcoindevkit/bdk-swift) 3.0.0. Watch how to build a simple bitcoin iOS wallet with BDK on [YouTube](https://www.youtube.com/watch?v=M9AYugUF5uQ).