Skip to content

Commit 3c92c49

Browse files
authored
spm: local build alpha-13
1 parent 5982e54 commit 3c92c49

File tree

9 files changed

+47
-32
lines changed

9 files changed

+47
-32
lines changed

BDKSwiftExampleWallet/Extensions/BDK+Extensions/BDKError+Extensions.swift

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ extension DescriptorError {
5555
return errorMessage
5656
case .Hex(let errorMessage):
5757
return errorMessage
58+
case .ExternalAndInternalAreTheSame:
59+
return "ExternalAndInternalAreTheSame"
5860
}
5961
}
6062
}
@@ -126,37 +128,31 @@ extension SignerError {
126128
return "NonStandardSighash"
127129
case .InvalidSighash:
128130
return "InvalidSighash"
129-
case .SighashError(let errorMessage):
130-
return errorMessage
131131
case .MiniscriptPsbt(let errorMessage):
132132
return errorMessage
133133
case .External(let errorMessage):
134134
return errorMessage
135+
case .SighashP2wpkh(let errorMessage):
136+
return errorMessage
137+
case .SighashTaproot(let errorMessage):
138+
return errorMessage
139+
case .TxInputsIndexError(let errorMessage):
140+
return errorMessage
135141
}
136142
}
137143
}
138144

139145
extension WalletCreationError {
140146
var description: String {
141147
switch self {
142-
case .Io(let e):
143-
return e.description
144-
case .InvalidMagicBytes(let got, let expected):
145-
return "got: \(got), expected \(expected)"
146148
case .Descriptor:
147149
return "descriptor"
148-
case .NotInitialized:
149-
return "not initialized"
150150
case .LoadedGenesisDoesNotMatch:
151151
return "loaded genesis does not match"
152152
case .LoadedNetworkDoesNotMatch(let expected, let got):
153153
return "got: \(String(describing: got)), expected \(expected)"
154-
case .Persist(let errorMessage):
155-
return errorMessage
156154
case .LoadedDescriptorDoesNotMatch(let got, let keychain):
157155
return "got: \(String(describing: got)), keychain \(keychain)"
158-
case .Sqlite(let errorMessage):
159-
return errorMessage
160156
}
161157
}
162158
}

BDKSwiftExampleWallet/Extensions/BDK+Extensions/Transaction+Extensions.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import BitcoinDevKit
99

1010
extension Transaction {
1111
var transactionID: String {
12-
return self.txid()
12+
return self.computeTxid()
1313
}
1414
}
1515

BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ private class BDKService {
1616
private let keyService: KeyClient
1717
private let esploraClient: EsploraClient
1818
private var needsFullScan: Bool = false
19+
private var dbService: SqliteStore?
1920

2021
init(
2122
keyService: KeyClient = .live
@@ -34,13 +35,17 @@ private class BDKService {
3435
guard let wallet = self.wallet else {
3536
throw WalletError.walletNotFound
3637
}
37-
let addressInfo = try wallet.revealNextAddress(keychain: .external)
38+
let addressInfo = wallet.revealNextAddress(keychain: .external)
39+
guard let db = self.dbService else { throw WalletError.dbNotFound }
40+
if let changeSet = wallet.takeStaged() {
41+
try db.write(changeSet: changeSet)
42+
}
3843
return addressInfo.address.description
3944
}
4045

4146
func getBalance() throws -> Balance {
4247
guard let wallet = self.wallet else { throw WalletError.walletNotFound }
43-
let balance = wallet.getBalance()
48+
let balance = wallet.balance()
4449
return balance
4550
}
4651

@@ -97,10 +102,13 @@ private class BDKService {
97102
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")
98103
let persistenceBackendPath = walletDataDirectoryURL.appendingPathComponent("wallet.sqlite")
99104
.path
100-
let wallet = try Wallet(
105+
let sqliteStore = try SqliteStore(path: persistenceBackendPath)
106+
self.dbService = sqliteStore
107+
let changeSet = try sqliteStore.read()
108+
let wallet = try Wallet.newOrLoad(
101109
descriptor: descriptor,
102110
changeDescriptor: changeDescriptor,
103-
persistenceBackendPath: persistenceBackendPath,
111+
changeSet: changeSet,
104112
network: network
105113
)
106114
self.wallet = wallet
@@ -111,10 +119,13 @@ private class BDKService {
111119
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")
112120
let persistenceBackendPath = walletDataDirectoryURL.appendingPathComponent("wallet.sqlite")
113121
.path
114-
let wallet = try Wallet(
122+
let sqliteStore = try SqliteStore(path: persistenceBackendPath)
123+
self.dbService = sqliteStore
124+
let changeSet = try sqliteStore.read()
125+
let wallet = try Wallet.newOrLoad(
115126
descriptor: descriptor,
116127
changeDescriptor: changeDescriptor,
117-
persistenceBackendPath: persistenceBackendPath,
128+
changeSet: changeSet,
118129
network: network
119130
)
120131
self.wallet = wallet
@@ -192,7 +203,10 @@ private class BDKService {
192203
parallelRequests: UInt64(5)
193204
)
194205
let _ = try wallet.applyUpdate(update: update)
195-
let _ = try wallet.commit()
206+
guard let db = self.dbService else { throw WalletError.dbNotFound }
207+
if let changeSet = wallet.takeStaged() {
208+
try db.write(changeSet: changeSet)
209+
}
196210
}
197211

198212
func fullScanWithInspector(inspector: FullScanScriptInspector) async throws {
@@ -206,10 +220,13 @@ private class BDKService {
206220
parallelRequests: UInt64(5) // should we default value this for folks?
207221
)
208222
let _ = try wallet.applyUpdate(update: update)
209-
let _ = try wallet.commit()
223+
guard let db = self.dbService else { throw WalletError.dbNotFound }
224+
if let changeSet = wallet.takeStaged() {
225+
try db.write(changeSet: changeSet)
226+
}
210227
}
211228

212-
func calculateFee(tx: Transaction) throws -> UInt64 {
229+
func calculateFee(tx: Transaction) throws -> Amount {
213230
guard let wallet = self.wallet else {
214231
throw WalletError.walletNotFound
215232
}
@@ -255,7 +272,7 @@ struct BDKClient {
255272
let fullScanWithInspector: (FullScanScriptInspector) async throws -> Void
256273
let getAddress: () throws -> String
257274
let send: (String, UInt64, UInt64) throws -> Void
258-
let calculateFee: (Transaction) throws -> UInt64
275+
let calculateFee: (Transaction) throws -> Amount
259276
let calculateFeeRate: (Transaction) throws -> UInt64
260277
let sentAndReceived: (Transaction) throws -> SentAndReceivedValues
261278
let buildTransaction: (String, UInt64, UInt64) throws -> Psbt
@@ -315,7 +332,7 @@ extension BDKClient {
315332
fullScanWithInspector: { _ in },
316333
getAddress: { "tb1pd8jmenqpe7rz2mavfdx7uc8pj7vskxv4rl6avxlqsw2u8u7d4gfs97durt" },
317334
send: { _, _, _ in },
318-
calculateFee: { _ in return UInt64(615) },
335+
calculateFee: { _ in Amount.fromSat(fromSat: UInt64(615)) },
319336
calculateFeeRate: { _ in return UInt64(6.15) },
320337
sentAndReceived: { _ in
321338
return SentAndReceivedValues(

BDKSwiftExampleWallet/Service/BDK Service/BDKSwiftExampleWalletError.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ import Foundation
1010
enum WalletError: Error {
1111
case walletNotFound
1212
case blockchainConfigNotFound
13+
case dbNotFound
1314
}

BDKSwiftExampleWallet/View Model/BuildTransactionViewModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class BuildTransactionViewModel {
6262
func getCalulateFee(tx: BitcoinDevKit.Transaction) {
6363
do {
6464
let calculateFee = try bdkClient.calculateFee(tx)
65-
let feeString = String(calculateFee)
65+
let feeString = String(calculateFee.toSat())
6666
self.calculateFee = feeString
6767
} catch let error as CalculateFeeError {
6868
self.buildTransactionViewError = .generic(message: error.localizedDescription)

BDKSwiftExampleWallet/View Model/TransactionDetailsViewModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class TransactionDetailsViewModel: ObservableObject {
7070
func getCalulateFee(tx: BitcoinDevKit.Transaction) {
7171
do {
7272
let calculateFee = try bdkClient.calculateFee(tx)
73-
let feeString = String(calculateFee)
73+
let feeString = String(calculateFee.toSat())
7474
self.calculateFee = feeString
7575
} catch let error as CalculateFeeError {
7676
DispatchQueue.main.async {

BDKSwiftExampleWallet/View/BuildTransactionView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,12 +116,12 @@ struct BuildTransactionView: View {
116116
.foregroundColor(.green)
117117
if let transaction = viewModel.extractTransaction() {
118118
HStack {
119-
Text(transaction.txid())
119+
Text(transaction.computeTxid())
120120
.lineLimit(1)
121121
.truncationMode(.middle)
122122
Spacer()
123123
Button {
124-
UIPasteboard.general.string = transaction.txid()
124+
UIPasteboard.general.string = transaction.computeTxid()
125125
isCopied = true
126126
showCheckmark = true
127127
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {

BDKSwiftExampleWallet/View/TransactionDetailsView.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ struct TransactionDetailsView: View {
101101
if viewModel.network != Network.regtest.description {
102102
Button {
103103
if let esploraURL = viewModel.esploraURL {
104-
let urlString = "\(esploraURL)/tx/\(canonicalTx.transaction.txid())"
104+
let urlString =
105+
"\(esploraURL)/tx/\(canonicalTx.transaction.computeTxid())"
105106
.replacingOccurrences(of: "/api", with: "")
106107
if let url = URL(string: urlString) {
107108
UIApplication.shared.open(url)
@@ -114,12 +115,12 @@ struct TransactionDetailsView: View {
114115
}
115116
Spacer()
116117
}
117-
Text(canonicalTx.transaction.txid())
118+
Text(canonicalTx.transaction.computeTxid())
118119
.lineLimit(1)
119120
.truncationMode(.middle)
120121
Spacer()
121122
Button {
122-
UIPasteboard.general.string = canonicalTx.transaction.txid()
123+
UIPasteboard.general.string = canonicalTx.transaction.computeTxid()
123124
isCopied = true
124125
showCheckmark = true
125126
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {

BDKSwiftExampleWallet/View/WalletTransactionsListItemView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ struct WalletTransactionsListItemView: View {
5555
}
5656

5757
VStack(alignment: .leading, spacing: 5) {
58-
Text(canonicalTx.transaction.txid())
58+
Text(canonicalTx.transaction.computeTxid())
5959
.truncationMode(.middle)
6060
.lineLimit(1)
6161
.fontDesign(.monospaced)

0 commit comments

Comments
 (0)