Skip to content

Commit fc27d01

Browse files
committed
fix: correct TransactionSigner not being used through ITransactionSigner interface.
1 parent e282683 commit fc27d01

File tree

4 files changed

+25
-15
lines changed

4 files changed

+25
-15
lines changed

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
@@ -379,8 +379,8 @@ public protocol ITransactionCreator {
379379
}
380380

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

386386
protocol ITransactionFeeCalculator {
@@ -648,7 +648,7 @@ protocol ILockTimeSetter {
648648
func setLockTime(to mutableTransaction: MutableTransaction)
649649
}
650650

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

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, value: Int, feeRate: Int, senderPay: Bool, sortType: TransactionDataSortType, unspentOutputs: [UnspentOutput]?, pluginData: [UInt8: IPluginData]) throws -> FullTransaction {
18+
func buildTransaction(toAddress: 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, 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, feeRate: Int, sortType: TransactionDataSortType) throws -> FullTransaction {
31+
func buildTransaction(from unspentOutput: UnspentOutput, toAddress: String, feeRate: Int, sortType: TransactionDataSortType, signer: ITransactionSigner) throws -> FullTransaction {
3232
let mutableTransaction = MutableTransaction(outgoing: false)
3333

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

Sources/BitcoinCore/Classes/Transactions/TransactionCreator.swift

Lines changed: 8 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 {
@@ -39,15 +41,16 @@ extension TransactionCreator: ITransactionCreator {
3941
senderPay: senderPay,
4042
sortType: sortType,
4143
unspentOutputs: unspentOutputs,
42-
pluginData: pluginData
44+
pluginData: pluginData,
45+
signer: signer
4346
)
4447

4548
try processAndSend(transaction: transaction)
4649
return transaction
4750
}
4851

4952
func create(from unspentOutput: UnspentOutput, to address: String, feeRate: Int, sortType: TransactionDataSortType) throws -> FullTransaction {
50-
let transaction = try transactionBuilder.buildTransaction(from: unspentOutput, toAddress: address, feeRate: feeRate, sortType: sortType)
53+
let transaction = try transactionBuilder.buildTransaction(from: unspentOutput, toAddress: address, feeRate: feeRate, sortType: sortType, signer: self.signer)
5154

5255
try processAndSend(transaction: transaction)
5356
return transaction
@@ -61,7 +64,8 @@ extension TransactionCreator: ITransactionCreator {
6164
senderPay: senderPay,
6265
sortType: sortType,
6366
unspentOutputs: unspentOutputs,
64-
pluginData: pluginData
67+
pluginData: pluginData,
68+
signer: self.signer
6569
)
6670

6771
return TransactionSerializer.serialize(transaction: transaction)

0 commit comments

Comments
 (0)