Skip to content

Commit 33e6165

Browse files
committed
fix: correct TransactionSigner not being used through ITransactionSigner interface.
1 parent 09fde88 commit 33e6165

4 files changed

Lines changed: 26 additions & 15 deletions

File tree

Sources/BitcoinCore/Classes/Core/BitcoinCoreBuilder.swift

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public class BitcoinCoreBuilder {
3232
private var storage: IStorage?
3333
private var checkpoint: Checkpoint?
3434
private var apiSyncStateManager: ApiSyncStateManager?
35+
private var signer: ITransactionSigner?
3536

3637
@discardableResult public func set(extendedKey: HDExtendedKey?) -> BitcoinCoreBuilder {
3738
self.extendedKey = extendedKey
@@ -42,6 +43,11 @@ public class BitcoinCoreBuilder {
4243
self.watchAddressPublicKey = watchAddressPublicKey
4344
return self
4445
}
46+
47+
public func set(signer: ITransactionSigner?) -> BitcoinCoreBuilder {
48+
self.signer = signer
49+
return self
50+
}
4551

4652
public func set(network: INetwork) -> BitcoinCoreBuilder {
4753
self.network = network
@@ -305,8 +311,8 @@ public class BitcoinCoreBuilder {
305311
let outputSetter = OutputSetter(outputSorterFactory: transactionDataSorterFactory, factory: factory)
306312
let inputSetter = InputSetter(unspentOutputSelector: unspentOutputSelector, transactionSizeCalculator: transactionSizeCalculatorInstance, addressConverter: addressConverter, publicKeyManager: publicKeyManager, factory: factory, pluginManager: pluginManager, dustCalculator: dustCalculatorInstance, changeScriptType: purpose.scriptType, inputSorterFactory: transactionDataSorterFactory)
307313
let lockTimeSetter = LockTimeSetter(storage: storage)
308-
let transactionSigner = TransactionSigner(ecdsaInputSigner: ecdsaInputSigner, schnorrInputSigner: schnorrInputSigner)
309-
let transactionBuilder = TransactionBuilder(recipientSetter: recipientSetter, inputSetter: inputSetter, lockTimeSetter: lockTimeSetter, outputSetter: outputSetter, signer: transactionSigner)
314+
//let transactionSigner = TransactionSigner(ecdsaInputSigner: ecdsaInputSigner, schnorrInputSigner: schnorrInputSigner)
315+
let transactionBuilder = TransactionBuilder(recipientSetter: recipientSetter, inputSetter: inputSetter, lockTimeSetter: lockTimeSetter, outputSetter: outputSetter, signer: self.signer ?? TransactionSigner(ecdsaInputSigner: ecdsaInputSigner, schnorrInputSigner: schnorrInputSigner))
310316
transactionFeeCalculator = TransactionFeeCalculator(recipientSetter: recipientSetter, inputSetter: inputSetter, addressConverter: addressConverter, publicKeyManager: publicKeyManager, changeScriptType: purpose.scriptType)
311317
let transactionSendTimer = TransactionSendTimer(interval: 60)
312318
let transactionSenderInstance = TransactionSender(transactionSyncer: pendingTransactionSyncer, initialBlockDownload: initialDownload, peerManager: peerManager, storage: storage, timer: transactionSendTimer, logger: logger)
@@ -317,7 +323,7 @@ public class BitcoinCoreBuilder {
317323

318324
transactionSendTimer.delegate = transactionSender
319325

320-
transactionCreator = TransactionCreator(transactionBuilder: transactionBuilder, transactionProcessor: pendingTransactionProcessor, transactionSender: transactionSenderInstance, bloomFilterManager: bloomFilterManager)
326+
transactionCreator = TransactionCreator(transactionBuilder: transactionBuilder, transactionProcessor: pendingTransactionProcessor, transactionSender: transactionSenderInstance, bloomFilterManager: bloomFilterManager, signer: self.signer ?? TransactionSigner(ecdsaInputSigner: ecdsaInputSigner, schnorrInputSigner: schnorrInputSigner))
321327
}
322328
let mempoolTransactions = MempoolTransactions(transactionSyncer: pendingTransactionSyncer, transactionSender: transactionSender)
323329

Sources/BitcoinCore/Classes/Core/Protocols.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -378,8 +378,8 @@ public protocol ITransactionCreator {
378378
}
379379

380380
protocol ITransactionBuilder {
381-
func buildTransaction(toAddress: String, memo: String?, value: Int, feeRate: Int, senderPay: Bool, sortType: TransactionDataSortType, unspentOutputs: [UnspentOutput]?, pluginData: [UInt8: IPluginData]) throws -> FullTransaction
382-
func buildTransaction(from: UnspentOutput, toAddress: String, memo: String?, feeRate: Int, sortType: TransactionDataSortType) throws -> FullTransaction
381+
func buildTransaction(toAddress: String, memo: String?, value: Int, feeRate: Int, senderPay: Bool, sortType: TransactionDataSortType, unspentOutputs: [UnspentOutput]?, pluginData: [UInt8: IPluginData], signer: ITransactionSigner) throws -> FullTransaction
382+
func buildTransaction(from: UnspentOutput, toAddress: String, memo: String?, feeRate: Int, sortType: TransactionDataSortType, signer: ITransactionSigner) throws -> FullTransaction
383383
}
384384

385385
protocol ITransactionFeeCalculator {
@@ -647,7 +647,7 @@ protocol ILockTimeSetter {
647647
func setLockTime(to mutableTransaction: MutableTransaction)
648648
}
649649

650-
protocol ITransactionSigner {
650+
public protocol ITransactionSigner {
651651
func sign(mutableTransaction: MutableTransaction) throws
652652
}
653653

Sources/BitcoinCore/Classes/Transactions/Builder/TransactionBuilder.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@ class TransactionBuilder {
33
private let inputSetter: IInputSetter
44
private let lockTimeSetter: ILockTimeSetter
55
private let outputSetter: IOutputSetter
6-
private let signer: TransactionSigner
6+
// private let signer: ITransactionSigner
77

8-
init(recipientSetter: IRecipientSetter, inputSetter: IInputSetter, lockTimeSetter: ILockTimeSetter, outputSetter: IOutputSetter, signer: TransactionSigner) {
8+
init(recipientSetter: IRecipientSetter, inputSetter: IInputSetter, lockTimeSetter: ILockTimeSetter, outputSetter: IOutputSetter, signer: ITransactionSigner) {
99
self.recipientSetter = recipientSetter
1010
self.inputSetter = inputSetter
1111
self.lockTimeSetter = lockTimeSetter
1212
self.outputSetter = outputSetter
13-
self.signer = signer
13+
// self.signer = signer
1414
}
1515
}
1616

1717
extension TransactionBuilder: ITransactionBuilder {
18-
func buildTransaction(toAddress: String, memo: String?, value: Int, feeRate: Int, senderPay: Bool, sortType: TransactionDataSortType, unspentOutputs: [UnspentOutput]?, pluginData: [UInt8: IPluginData]) throws -> FullTransaction {
18+
func buildTransaction(toAddress: String, memo: String?, value: Int, feeRate: Int, senderPay: Bool, sortType: TransactionDataSortType, unspentOutputs: [UnspentOutput]?, pluginData: [UInt8: IPluginData], signer: ITransactionSigner) throws -> FullTransaction {
1919
let mutableTransaction = MutableTransaction()
2020

2121
try recipientSetter.setRecipient(to: mutableTransaction, toAddress: toAddress, memo: memo, value: value, pluginData: pluginData, skipChecks: false)
@@ -28,7 +28,7 @@ extension TransactionBuilder: ITransactionBuilder {
2828
return mutableTransaction.build()
2929
}
3030

31-
func buildTransaction(from unspentOutput: UnspentOutput, toAddress: String, memo: String?, feeRate: Int, sortType: TransactionDataSortType) throws -> FullTransaction {
31+
func buildTransaction(from unspentOutput: UnspentOutput, toAddress: String, memo: String?, feeRate: Int, sortType: TransactionDataSortType, signer: ITransactionSigner) throws -> FullTransaction {
3232
let mutableTransaction = MutableTransaction(outgoing: false)
3333

3434
try recipientSetter.setRecipient(to: mutableTransaction, toAddress: toAddress, memo: memo, value: unspentOutput.output.value, pluginData: [:], skipChecks: false)

Sources/BitcoinCore/Classes/Transactions/TransactionCreator.swift

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@ class TransactionCreator {
99
private let transactionProcessor: IPendingTransactionProcessor
1010
private let transactionSender: ITransactionSender
1111
private let bloomFilterManager: IBloomFilterManager
12+
private let signer: ITransactionSigner
1213

13-
init(transactionBuilder: ITransactionBuilder, transactionProcessor: IPendingTransactionProcessor, transactionSender: ITransactionSender, bloomFilterManager: IBloomFilterManager) {
14+
init(transactionBuilder: ITransactionBuilder, transactionProcessor: IPendingTransactionProcessor, transactionSender: ITransactionSender, bloomFilterManager: IBloomFilterManager, signer: ITransactionSigner) {
1415
self.transactionBuilder = transactionBuilder
1516
self.transactionProcessor = transactionProcessor
1617
self.transactionSender = transactionSender
1718
self.bloomFilterManager = bloomFilterManager
19+
self.signer = signer
1820
}
1921

2022
private func processAndSend(transaction: FullTransaction) throws {
@@ -40,7 +42,8 @@ extension TransactionCreator: ITransactionCreator {
4042
senderPay: senderPay,
4143
sortType: sortType,
4244
unspentOutputs: unspentOutputs,
43-
pluginData: pluginData
45+
pluginData: pluginData,
46+
signer: signer
4447
)
4548

4649
try processAndSend(transaction: transaction)
@@ -53,7 +56,8 @@ extension TransactionCreator: ITransactionCreator {
5356
toAddress: address,
5457
memo: memo,
5558
feeRate: feeRate,
56-
sortType: sortType
59+
sortType: sortType,
60+
signer: self.signer
5761
)
5862

5963
try processAndSend(transaction: transaction)
@@ -69,7 +73,8 @@ extension TransactionCreator: ITransactionCreator {
6973
senderPay: senderPay,
7074
sortType: sortType,
7175
unspentOutputs: unspentOutputs,
72-
pluginData: pluginData
76+
pluginData: pluginData,
77+
signer: self.signer
7378
)
7479

7580
return TransactionSerializer.serialize(transaction: transaction)

0 commit comments

Comments
 (0)