Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions BDKSwiftExampleWallet.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
objects = {

/* Begin PBXBuildFile section */
77F0FDC92DA9A93D00B30E4F /* Connection+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77F0FDC82DA9A93700B30E4F /* Connection+Extensions.swift */; };
A733D6D02A81113000F333B4 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = A733D6CF2A81113000F333B4 /* Localizable.xcstrings */; };
A73F7A362A3B778E00B87FC6 /* Int+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A73F7A352A3B778E00B87FC6 /* Int+Extensions.swift */; };
AE0C30F72A804A2D008F1EAE /* TransactionListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE0C30F62A804A2D008F1EAE /* TransactionListView.swift */; };
Expand Down Expand Up @@ -107,6 +108,7 @@
/* End PBXContainerItemProxy section */

/* Begin PBXFileReference section */
77F0FDC82DA9A93700B30E4F /* Connection+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Connection+Extensions.swift"; sourceTree = "<group>"; };
A733D6CF2A81113000F333B4 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; };
A73F7A352A3B778E00B87FC6 /* Int+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Int+Extensions.swift"; sourceTree = "<group>"; };
AE0C30F62A804A2D008F1EAE /* TransactionListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionListView.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -524,6 +526,7 @@
AEE6C74D2ABCB48600442ADD /* BDK+Extensions */ = {
isa = PBXGroup;
children = (
77F0FDC82DA9A93700B30E4F /* Connection+Extensions.swift */,
AEE6C74B2ABCB3E200442ADD /* Transaction+Extensions.swift */,
AE83EFDA2C9D07B200B41244 /* ChainPosition+Extensions.swift */,
AE2381B02C60690900F6B00C /* LocalOutput+Extensions.swift */,
Expand Down Expand Up @@ -708,6 +711,7 @@
AE783A012AB4E5E1005F0CBA /* BuildTransactionView.swift in Sources */,
AE6F34DA2AA6C1E00087E700 /* Balance+Extensions.swift in Sources */,
AED4CC0C2A1D3A9400CE1831 /* OnboardingView.swift in Sources */,
77F0FDC92DA9A93D00B30E4F /* Connection+Extensions.swift in Sources */,
AE6716012A9AC089005C193F /* KeyServiceError.swift in Sources */,
AE0C30FB2A804B95008F1EAE /* WalletViewModel.swift in Sources */,
AE49847C2A1BBBD6009951E2 /* BDKSwiftExampleWalletApp.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import BitcoinDevKit
import Foundation

extension Connection {
static func createConnection() throws -> Connection {
let documentsDirectoryURL = URL.documentsDirectory
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")

if FileManager.default.fileExists(atPath: walletDataDirectoryURL.path) {
try FileManager.default.removeItem(at: walletDataDirectoryURL)
}

try FileManager.default.ensureDirectoryExists(at: walletDataDirectoryURL)
try FileManager.default.removeOldFlatFileIfNeeded(at: documentsDirectoryURL)
let persistenceBackendPath = walletDataDirectoryURL.appendingPathComponent("wallet.sqlite")
.path
let connection = try Connection(path: persistenceBackendPath)
return connection
}
}
157 changes: 23 additions & 134 deletions BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,27 +25,7 @@ private class BDKService {
let storedNetworkString = try? keyClient.getNetwork() ?? Network.signet.description
self.network = Network(stringValue: storedNetworkString ?? "") ?? .signet

if let savedURL = try? keyClient.getEsploraURL() {
self.esploraURL = savedURL
} else {
switch self.network {
case .bitcoin:
self.esploraURL =
Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
case .testnet:
self.esploraURL =
Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
case .regtest:
self.esploraURL =
Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
case .signet:
self.esploraURL =
Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
case .testnet4:
self.esploraURL =
Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
}
}
self.esploraURL = (try? keyClient.getEsploraURL()) ?? self.network.url

self.esploraClient = EsploraClient(url: self.esploraURL)
}
Expand All @@ -59,21 +39,8 @@ private class BDKService {
self.network = newNetwork
try? keyClient.saveNetwork(newNetwork.description)

let newURL: String
switch newNetwork {
case .bitcoin:
newURL = Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
case .testnet:
newURL = Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
case .regtest:
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 ?? ""
}
let newURL = newNetwork.url
updateEsploraURL(newURL)

}
}

Expand Down Expand Up @@ -125,35 +92,15 @@ private class BDKService {
let localOutputs = wallet.listUnspent()
return localOutputs
}

func createWallet(words: String?) throws {
let savedURL = try? keyClient.getEsploraURL()

let documentsDirectoryURL = URL.documentsDirectory
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")

if FileManager.default.fileExists(atPath: walletDataDirectoryURL.path) {
try FileManager.default.removeItem(at: walletDataDirectoryURL)
self.connection = try Connection.createConnection()
guard let connection = connection else {
throw WalletError.dbNotFound
}

let baseUrl =
savedURL
?? {
let defaultURL =
switch self.network {
case .bitcoin:
Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
case .testnet:
Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
case .regtest:
Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
case .signet:
Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
case .testnet4:
Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
}
return defaultURL
}()

let savedURL = try? keyClient.getEsploraURL()
let baseUrl = savedURL ?? network.url

var words12: String
if let words = words, !words.isEmpty {
Expand Down Expand Up @@ -191,13 +138,7 @@ private class BDKService {
try keyClient.saveEsploraURL(baseUrl)
self.esploraURL = baseUrl
updateEsploraClient()

try FileManager.default.ensureDirectoryExists(at: walletDataDirectoryURL)
try FileManager.default.removeOldFlatFileIfNeeded(at: documentsDirectoryURL)
let persistenceBackendPath = walletDataDirectoryURL.appendingPathComponent("wallet.sqlite")
.path
let connection = try Connection(path: persistenceBackendPath)
self.connection = connection

let wallet = try Wallet(
descriptor: descriptor,
changeDescriptor: changeDescriptor,
Expand All @@ -208,33 +149,13 @@ private class BDKService {
}

func createWallet(descriptor: String?) throws {
let savedURL = try? keyClient.getEsploraURL()

let documentsDirectoryURL = URL.documentsDirectory
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")

if FileManager.default.fileExists(atPath: walletDataDirectoryURL.path) {
try FileManager.default.removeItem(at: walletDataDirectoryURL)
self.connection = try Connection.createConnection()
guard let connection = connection else {
throw WalletError.dbNotFound
}

let baseUrl =
savedURL
?? {
let defaultURL =
switch self.network {
case .bitcoin:
Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
case .testnet:
Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
case .regtest:
Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
case .signet:
Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
case .testnet4:
Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
}
return defaultURL
}()

let savedURL = try? keyClient.getEsploraURL()
let baseUrl = savedURL ?? network.url

guard let descriptorString = descriptor, !descriptorString.isEmpty else {
throw WalletError.walletNotFound
Expand Down Expand Up @@ -273,12 +194,6 @@ private class BDKService {
try keyClient.saveNetwork(self.network.description)
try keyClient.saveEsploraURL(baseUrl)

try FileManager.default.ensureDirectoryExists(at: walletDataDirectoryURL)
try FileManager.default.removeOldFlatFileIfNeeded(at: documentsDirectoryURL)
let persistenceBackendPath = walletDataDirectoryURL.appendingPathComponent("wallet.sqlite")
.path
let connection = try Connection(path: persistenceBackendPath)
self.connection = connection
let wallet = try Wallet(
descriptor: descriptor,
changeDescriptor: changeDescriptor,
Expand All @@ -289,33 +204,14 @@ private class BDKService {
}

func createWallet(xpub: String?) throws {
let savedURL = try? keyClient.getEsploraURL()

let documentsDirectoryURL = URL.documentsDirectory
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")

if FileManager.default.fileExists(atPath: walletDataDirectoryURL.path) {
try FileManager.default.removeItem(at: walletDataDirectoryURL)
self.connection = try Connection.createConnection()
guard let connection = connection else {
throw WalletError.dbNotFound
}

let savedURL = try? keyClient.getEsploraURL()

let baseUrl =
savedURL
?? {
let defaultURL =
switch self.network {
case .bitcoin:
Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
case .testnet:
Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
case .regtest:
Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
case .signet:
Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
case .testnet4:
Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
}
return defaultURL
}()
let baseUrl = savedURL ?? network.url

guard let xpubString = xpub, !xpubString.isEmpty else {
throw WalletError.walletNotFound
Expand Down Expand Up @@ -347,13 +243,7 @@ private class BDKService {
try keyClient.saveEsploraURL(baseUrl)
self.esploraURL = baseUrl
updateEsploraClient()

try FileManager.default.ensureDirectoryExists(at: walletDataDirectoryURL)
try FileManager.default.removeOldFlatFileIfNeeded(at: documentsDirectoryURL)
let persistenceBackendPath = walletDataDirectoryURL.appendingPathComponent("wallet.sqlite")
.path
let connection = try Connection(path: persistenceBackendPath)
self.connection = connection

let wallet = try Wallet(
descriptor: descriptor,
changeDescriptor: changeDescriptor,
Expand Down Expand Up @@ -522,7 +412,6 @@ private class BDKService {
let values = wallet.sentAndReceived(tx: tx)
return values
}

}

extension BDKService {
Expand Down
18 changes: 18 additions & 0 deletions BDKSwiftExampleWallet/Utilities/Constants.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import Foundation
import SwiftUI
import BitcoinDevKit

struct Constants {
struct Config {
Expand Down Expand Up @@ -76,3 +77,20 @@ struct Constants {
}
}
}

extension Network {
var url: String {
switch self {
case .bitcoin:
Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
case .testnet:
Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
case .signet:
Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
case .regtest:
Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
case .testnet4:
Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
}
}
}