Skip to content

Commit eb752ae

Browse files
committed
feat(wip): sub 1 sat fee
1 parent 3317d2b commit eb752ae

File tree

3 files changed

+63
-2
lines changed

3 files changed

+63
-2
lines changed

BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -462,17 +462,28 @@ private class BDKService {
462462
amount: UInt64,
463463
feeRate: UInt64
464464
) async throws {
465+
print("[BDKService.send] Starting send with address: \(address), amount: \(amount), feeRate: \(feeRate)")
465466
let psbt = try buildTransaction(
466467
address: address,
467468
amount: amount,
468469
feeRate: feeRate
469470
)
471+
print("[BDKService.send] PSBT built successfully")
470472
try signAndBroadcast(psbt: psbt)
473+
print("[BDKService.send] Transaction signed and broadcast successfully")
471474
}
472475

473476
func buildTransaction(address: String, amount: UInt64, feeRate: UInt64) throws
474477
-> Psbt
475478
{
479+
print("[BDKService.buildTransaction] Building transaction with:")
480+
print(" - Network: \(self.network)")
481+
print(" - Esplora URL: \(self.blockchainURL)")
482+
print(" - Address: \(address)")
483+
print(" - Amount: \(amount) sats")
484+
print(" - Original feeRate param: \(feeRate) sat/vB")
485+
print(" - Using hardcoded: 247 sat/kwu (0.99 sat/vB)")
486+
476487
guard let wallet = self.wallet else { throw WalletError.walletNotFound }
477488
let script = try Address(address: address, network: self.network)
478489
.scriptPubkey()
@@ -481,18 +492,36 @@ private class BDKService {
481492
script: script,
482493
amount: Amount.fromSat(satoshi: amount)
483494
)
484-
.feeRate(feeRate: FeeRate.fromSatPerVb(satVb: feeRate))
495+
.feeRate(feeRate: FeeRate.fromSatPerKwu(satKwu: 247)) // for 0.99 sat/vB //.feeRate(feeRate: FeeRate.fromSatPerVb(satVb: feeRate))
485496
.finish(wallet: wallet)
497+
498+
print("[BDKService.buildTransaction] Transaction built successfully")
486499
return txBuilder
487500
}
488501

489502
private func signAndBroadcast(psbt: Psbt) throws {
503+
print("[BDKService.signAndBroadcast] Starting sign and broadcast")
490504
guard let wallet = self.wallet else { throw WalletError.walletNotFound }
505+
491506
let isSigned = try wallet.sign(psbt: psbt)
507+
print("[BDKService.signAndBroadcast] Signing result: \(isSigned)")
508+
492509
if isSigned {
493510
let transaction = try psbt.extractTx()
494-
try self.blockchainClient.broadcast(transaction)
511+
let txid = transaction.computeTxid()
512+
print("[BDKService.signAndBroadcast] Transaction ID: \(txid)")
513+
514+
do {
515+
try self.blockchainClient.broadcast(transaction)
516+
print("[BDKService.signAndBroadcast] Broadcast successful!")
517+
} catch {
518+
print("[BDKService.signAndBroadcast] Broadcast failed with error: \(error)")
519+
print("[BDKService.signAndBroadcast] Error type: \(type(of: error))")
520+
print("[BDKService.signAndBroadcast] Error details: \(error.localizedDescription)")
521+
throw error
522+
}
495523
} else {
524+
print("[BDKService.signAndBroadcast] Failed to sign transaction")
496525
throw WalletError.notSigned
497526
}
498527
}

BDKSwiftExampleWallet/View Model/Send/BuildTransactionViewModel.swift

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,26 @@ class BuildTransactionViewModel {
2525
}
2626

2727
func buildTransaction(address: String, amount: UInt64, feeRate: UInt64) {
28+
print("[BuildTransactionViewModel.buildTransaction] Called with:")
29+
print(" - Address: \(address)")
30+
print(" - Amount: \(amount) sats")
31+
print(" - FeeRate: \(feeRate) sat/vB")
32+
2833
do {
2934
let txBuilderResult = try bdkClient.buildTransaction(address, amount, feeRate)
3035
self.psbt = txBuilderResult
36+
print("[BuildTransactionViewModel.buildTransaction] PSBT created successfully")
3137
} catch let error as WalletError {
38+
print("[BuildTransactionViewModel.buildTransaction] WalletError: \(error.localizedDescription)")
3239
self.buildTransactionViewError = .generic(message: error.localizedDescription)
3340
self.showingBuildTransactionViewErrorAlert = true
3441
} catch let error as AddressParseError {
42+
print("[BuildTransactionViewModel.buildTransaction] AddressParseError: \(error.localizedDescription)")
3543
self.buildTransactionViewError = .generic(message: error.localizedDescription)
3644
self.showingBuildTransactionViewErrorAlert = true
3745
} catch {
46+
print("[BuildTransactionViewModel.buildTransaction] Unknown error: \(error.localizedDescription)")
47+
print("[BuildTransactionViewModel.buildTransaction] Error type: \(type(of: error))")
3848
self.buildTransactionViewError = .generic(message: error.localizedDescription)
3949
self.showingBuildTransactionViewErrorAlert = true
4050
}
@@ -69,22 +79,33 @@ class BuildTransactionViewModel {
6979
}
7080

7181
func send(address: String, amount: UInt64, feeRate: UInt64) {
82+
print("[BuildTransactionViewModel.send] Called with:")
83+
print(" - Address: \(address)")
84+
print(" - Amount: \(amount) sats")
85+
print(" - FeeRate: \(feeRate) sat/vB")
86+
7287
do {
7388
try bdkClient.send(address, amount, feeRate)
89+
print("[BuildTransactionViewModel.send] Transaction sent successfully!")
7490
NotificationCenter.default.post(
7591
name: Notification.Name("TransactionSent"),
7692
object: nil
7793
)
7894
} catch let error as EsploraError {
95+
print("[BuildTransactionViewModel.send] EsploraError: \(error.localizedDescription)")
7996
self.buildTransactionViewError = .generic(message: error.localizedDescription)
8097
self.showingBuildTransactionViewErrorAlert = true
8198
} catch let error as SignerError {
99+
print("[BuildTransactionViewModel.send] SignerError: \(error.localizedDescription)")
82100
self.buildTransactionViewError = .generic(message: error.localizedDescription)
83101
self.showingBuildTransactionViewErrorAlert = true
84102
} catch let error as WalletError {
103+
print("[BuildTransactionViewModel.send] WalletError: \(error.localizedDescription)")
85104
self.buildTransactionViewError = .generic(message: error.localizedDescription)
86105
self.showingBuildTransactionViewErrorAlert = true
87106
} catch {
107+
print("[BuildTransactionViewModel.send] Unknown error: \(error.localizedDescription)")
108+
print("[BuildTransactionViewModel.send] Error type: \(type(of: error))")
88109
self.buildTransactionViewError = .generic(message: error.localizedDescription)
89110
self.showingBuildTransactionViewErrorAlert = true
90111
}

BDKSwiftExampleWallet/View/Send/BuildTransactionView.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ struct BuildTransactionView: View {
118118
if !isSent {
119119
Button {
120120
if let amt = UInt64(amount) {
121+
print("[BuildTransactionView] Send button pressed with:")
122+
print(" - Address: \(address)")
123+
print(" - Amount: \(amt) sats")
124+
print(" - Fee: \(fee) sat/vB")
121125
viewModel.buildTransactionViewError = nil
122126
isError = false
123127
viewModel.send(
@@ -208,13 +212,20 @@ struct BuildTransactionView: View {
208212
.padding()
209213
.navigationTitle("Transaction")
210214
.onAppear {
215+
print("[BuildTransactionView.onAppear] View appeared with:")
216+
print(" - Address: \(address)")
217+
print(" - Amount: \(amount) sats")
218+
print(" - Fee: \(fee) sat/vB")
211219
viewModel.buildTransaction(
212220
address: address,
213221
amount: UInt64(amount) ?? 0,
214222
feeRate: UInt64(fee)
215223
)
216224
if let tx = viewModel.extractTransaction() {
225+
print("[BuildTransactionView.onAppear] Extracted transaction, calculating fee")
217226
viewModel.getCalulateFee(tx: tx)
227+
} else {
228+
print("[BuildTransactionView.onAppear] Failed to extract transaction")
218229
}
219230
}
220231
.alert(isPresented: $viewModel.showingBuildTransactionViewErrorAlert) {

0 commit comments

Comments
 (0)