diff --git a/BDKSwiftExampleWallet.xcodeproj/project.pbxproj b/BDKSwiftExampleWallet.xcodeproj/project.pbxproj index f471f847..8297df3d 100644 --- a/BDKSwiftExampleWallet.xcodeproj/project.pbxproj +++ b/BDKSwiftExampleWallet.xcodeproj/project.pbxproj @@ -33,6 +33,9 @@ AE2ADD782B61EFFF00C2A823 /* SettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE2ADD772B61EFFE00C2A823 /* SettingsViewModel.swift */; }; AE2B8C1D2A9678C900815B2F /* FeeService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE2B8C1C2A9678C900815B2F /* FeeService.swift */; }; AE2B8C1F2A96797300815B2F /* RecommendedFees.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE2B8C1E2A96797300815B2F /* RecommendedFees.swift */; }; + AE2DD8392D6FE9B000E5F212 /* BitcoinDevKit in Frameworks */ = {isa = PBXBuildFile; productRef = AE2DD8382D6FE9B000E5F212 /* BitcoinDevKit */; }; + AE2DD83C2D6FEC3100E5F212 /* BitcoinDevKit in Frameworks */ = {isa = PBXBuildFile; productRef = AE2DD83B2D6FEC3100E5F212 /* BitcoinDevKit */; }; + AE2DD83F2D6FEF3600E5F212 /* BitcoinDevKit in Frameworks */ = {isa = PBXBuildFile; productRef = AE2DD83E2D6FEF3600E5F212 /* BitcoinDevKit */; }; AE2F255D2BED0BFB002A9AC6 /* AppError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE2F255C2BED0BFB002A9AC6 /* AppError.swift */; }; AE32D7622D0C9146006A8788 /* BitcoinDevKit in Frameworks */ = {isa = PBXBuildFile; productRef = AE32D7612D0C9146006A8788 /* BitcoinDevKit */; }; AE34DDAC2B6B31ED00F04AD4 /* WalletRecoveryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE34DDAB2B6B31ED00F04AD4 /* WalletRecoveryView.swift */; }; @@ -45,7 +48,6 @@ AE4984832A1BBBD7009951E2 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE4984822A1BBBD7009951E2 /* Preview Assets.xcassets */; }; AE49848D2A1BBBD8009951E2 /* BDKSwiftExampleWalletTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE49848C2A1BBBD8009951E2 /* BDKSwiftExampleWalletTests.swift */; }; AE4984A62A1BBCB8009951E2 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = AE4984A52A1BBCB8009951E2 /* README.md */; }; - AE52D68F2D1367C80042119D /* BitcoinDevKit in Frameworks */ = {isa = PBXBuildFile; productRef = AE52D68E2D1367C80042119D /* BitcoinDevKit */; }; AE6715FA2A9A9220005C193F /* BDKSwiftExampleWalletPriceServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE6715F92A9A9220005C193F /* BDKSwiftExampleWalletPriceServiceTests.swift */; }; AE6715FD2A9AC056005C193F /* PriceServiceError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE6715FC2A9AC056005C193F /* PriceServiceError.swift */; }; AE6715FF2A9AC066005C193F /* FeeServiceError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE6715FE2A9AC066005C193F /* FeeServiceError.swift */; }; @@ -192,14 +194,16 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + AE2DD83F2D6FEF3600E5F212 /* BitcoinDevKit in Frameworks */, AE187D782C9BB3B50081D0C3 /* BitcoinDevKit in Frameworks */, AE29ED0F2BBE2E7100EB9C4F /* BitcoinDevKit in Frameworks */, AEAF83B62B7BD4D10019B23B /* CodeScanner in Frameworks */, - AE52D68F2D1367C80042119D /* BitcoinDevKit in Frameworks */, + AE2DD8392D6FE9B000E5F212 /* BitcoinDevKit in Frameworks */, AE32D7622D0C9146006A8788 /* BitcoinDevKit in Frameworks */, AE4135652D0CC1AD00605103 /* BitcoinDevKit in Frameworks */, AEB735D32B2CC4B900F99DBB /* BitcoinUI in Frameworks */, AEE83A492C07F54B00834468 /* BitcoinDevKit in Frameworks */, + AE2DD83C2D6FEC3100E5F212 /* BitcoinDevKit in Frameworks */, AE7D5A0E2A7EE62200EAC8CE /* KeychainAccess in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -557,7 +561,9 @@ AE187D772C9BB3B50081D0C3 /* BitcoinDevKit */, AE32D7612D0C9146006A8788 /* BitcoinDevKit */, AE4135642D0CC1AD00605103 /* BitcoinDevKit */, - AE52D68E2D1367C80042119D /* BitcoinDevKit */, + AE2DD8382D6FE9B000E5F212 /* BitcoinDevKit */, + AE2DD83B2D6FEC3100E5F212 /* BitcoinDevKit */, + AE2DD83E2D6FEF3600E5F212 /* BitcoinDevKit */, ); productName = BDKSwiftExampleWallet; productReference = AE4984782A1BBBD6009951E2 /* BDKSwiftExampleWallet.app */; @@ -614,7 +620,7 @@ AE7D5A0C2A7EE62200EAC8CE /* XCRemoteSwiftPackageReference "KeychainAccess" */, AEB735D12B2CC4B900F99DBB /* XCRemoteSwiftPackageReference "BitcoinUI" */, AEAF83B42B7BD4D10019B23B /* XCRemoteSwiftPackageReference "CodeScanner" */, - AE52D68D2D1367C80042119D /* XCRemoteSwiftPackageReference "bdk-swift" */, + AEA2DEF12D70F8840067C0EB /* XCRemoteSwiftPackageReference "bdk-swift" */, ); productRefGroup = AE4984792A1BBBD6009951E2 /* Products */; projectDirPath = ""; @@ -1012,20 +1018,20 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ - AE52D68D2D1367C80042119D /* XCRemoteSwiftPackageReference "bdk-swift" */ = { + AE7D5A0C2A7EE62200EAC8CE /* XCRemoteSwiftPackageReference "KeychainAccess" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/bitcoindevkit/bdk-swift.git"; + repositoryURL = "https://github.com/kishikawakatsumi/KeychainAccess.git"; requirement = { kind = exactVersion; - version = "1.0.0-beta.7"; + version = 4.2.2; }; }; - AE7D5A0C2A7EE62200EAC8CE /* XCRemoteSwiftPackageReference "KeychainAccess" */ = { + AEA2DEF12D70F8840067C0EB /* XCRemoteSwiftPackageReference "bdk-swift" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/kishikawakatsumi/KeychainAccess.git"; + repositoryURL = "https://github.com/bitcoindevkit/bdk-swift"; requirement = { - kind = exactVersion; - version = 4.2.2; + kind = revision; + revision = 4e3783cfaee98e14ed12aee3cf1d63b2fc99705b; }; }; AEAF83B42B7BD4D10019B23B /* XCRemoteSwiftPackageReference "CodeScanner" */ = { @@ -1055,17 +1061,24 @@ isa = XCSwiftPackageProductDependency; productName = BitcoinDevKit; }; - AE32D7612D0C9146006A8788 /* BitcoinDevKit */ = { + AE2DD8382D6FE9B000E5F212 /* BitcoinDevKit */ = { isa = XCSwiftPackageProductDependency; productName = BitcoinDevKit; }; - AE4135642D0CC1AD00605103 /* BitcoinDevKit */ = { + AE2DD83B2D6FEC3100E5F212 /* BitcoinDevKit */ = { isa = XCSwiftPackageProductDependency; productName = BitcoinDevKit; }; - AE52D68E2D1367C80042119D /* BitcoinDevKit */ = { + AE2DD83E2D6FEF3600E5F212 /* BitcoinDevKit */ = { + isa = XCSwiftPackageProductDependency; + productName = BitcoinDevKit; + }; + AE32D7612D0C9146006A8788 /* BitcoinDevKit */ = { + isa = XCSwiftPackageProductDependency; + productName = BitcoinDevKit; + }; + AE4135642D0CC1AD00605103 /* BitcoinDevKit */ = { isa = XCSwiftPackageProductDependency; - package = AE52D68D2D1367C80042119D /* XCRemoteSwiftPackageReference "bdk-swift" */; productName = BitcoinDevKit; }; AE7D5A0D2A7EE62200EAC8CE /* KeychainAccess */ = { diff --git a/BDKSwiftExampleWallet/Extensions/BDK+Extensions/LocalOutput+Extensions.swift b/BDKSwiftExampleWallet/Extensions/BDK+Extensions/LocalOutput+Extensions.swift index 648ff65d..03e2f132 100644 --- a/BDKSwiftExampleWallet/Extensions/BDK+Extensions/LocalOutput+Extensions.swift +++ b/BDKSwiftExampleWallet/Extensions/BDK+Extensions/LocalOutput+Extensions.swift @@ -19,7 +19,9 @@ extension LocalOutput { scriptPubkey: Script(rawOutputScript: [UInt8(1)]) ), keychain: .external, - isSpent: false + isSpent: false, + derivationIndex: UInt32(32), + chainPosition: .unconfirmed(timestamp: nil) ) } //#endif diff --git a/BDKSwiftExampleWallet/Extensions/BDK+Extensions/Network+Extensions.swift b/BDKSwiftExampleWallet/Extensions/BDK+Extensions/Network+Extensions.swift index d41880b7..37b6febc 100644 --- a/BDKSwiftExampleWallet/Extensions/BDK+Extensions/Network+Extensions.swift +++ b/BDKSwiftExampleWallet/Extensions/BDK+Extensions/Network+Extensions.swift @@ -13,6 +13,7 @@ extension Network { switch self { case .bitcoin: return "bitcoin" case .testnet: return "testnet" + case .testnet4: return "testnet4" case .signet: return "signet" case .regtest: return "regtest" } @@ -22,6 +23,7 @@ extension Network { switch stringValue { case "bitcoin": self = .bitcoin case "testnet": self = .testnet + case "testnet4": self = .testnet4 case "signet": self = .signet case "regtest": self = .regtest default: return nil diff --git a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift index e81a748a..005675f7 100644 --- a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift +++ b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift @@ -48,6 +48,8 @@ private class BDKService { newURL = Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? "" case .signet: newURL = Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? "" + case .testnet4: + newURL = Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? "" } updateEsploraURL(newURL) @@ -121,6 +123,8 @@ private class BDKService { baseUrl = Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? "" case .signet: baseUrl = Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? "" + case .testnet4: + baseUrl = Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? "" } var words12: String @@ -257,6 +261,8 @@ private class BDKService { baseUrl = Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? "" case .signet: baseUrl = Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? "" + case .testnet4: + baseUrl = Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? "" } guard let xpubString = xpub, !xpubString.isEmpty else { diff --git a/BDKSwiftExampleWallet/Utilities/Constants.swift b/BDKSwiftExampleWallet/Utilities/Constants.swift index 1576240c..aa9799b2 100644 --- a/BDKSwiftExampleWallet/Utilities/Constants.swift +++ b/BDKSwiftExampleWallet/Utilities/Constants.swift @@ -35,12 +35,16 @@ struct Constants { } struct Testnet { static let blockstream = "https://blockstream.info/testnet/api/" - //static let kuutamo = "https://esplora.testnet.kuutamo.cloud" static let mempoolspace = "https://mempool.space/testnet/api/" static let allValues = [ mempoolspace, blockstream, - //kuutamo, + ] + } + struct Testnet4 { + static let mempoolspace = "https://mempool.space/testnet4/api/" + static let allValues = [ + mempoolspace ] } } @@ -50,6 +54,7 @@ struct Constants { case regtest case signet case testnet + case testnet4 var color: Color { switch self { @@ -65,6 +70,8 @@ struct Constants { return Color.orange case .testnet: return Color.red + case .testnet4: + return Color.cyan } } } diff --git a/BDKSwiftExampleWallet/View Model/OnboardingViewModel.swift b/BDKSwiftExampleWallet/View Model/OnboardingViewModel.swift index 7298614d..e503c8ea 100644 --- a/BDKSwiftExampleWallet/View Model/OnboardingViewModel.swift +++ b/BDKSwiftExampleWallet/View Model/OnboardingViewModel.swift @@ -56,6 +56,8 @@ class OnboardingViewModel: ObservableObject { return Constants.Config.EsploraServerURLNetwork.Regtest.allValues case .signet: return Constants.Config.EsploraServerURLNetwork.Signet.allValues + case .testnet4: + return Constants.Config.EsploraServerURLNetwork.Testnet4.allValues } } var buttonColor: Color { @@ -68,6 +70,8 @@ class OnboardingViewModel: ObservableObject { return Constants.BitcoinNetworkColor.signet.color case .regtest: return Constants.BitcoinNetworkColor.regtest.color + case .testnet4: + return Constants.BitcoinNetworkColor.testnet4.color } }