From 9c56c09002a14ed622699db3993385e6468ef918 Mon Sep 17 00:00:00 2001 From: Mike Kelly Date: Sun, 10 Jul 2022 10:29:39 +0100 Subject: [PATCH] make HD Wallet injectable --- BitcoinCore/Classes/Core/BitcoinCoreBuilder.swift | 8 +++++++- BitcoinKit/Classes/Core/Kit.swift | 5 +++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/BitcoinCore/Classes/Core/BitcoinCoreBuilder.swift b/BitcoinCore/Classes/Core/BitcoinCoreBuilder.swift index 1e99ce50..550d26cd 100644 --- a/BitcoinCore/Classes/Core/BitcoinCoreBuilder.swift +++ b/BitcoinCore/Classes/Core/BitcoinCoreBuilder.swift @@ -21,6 +21,7 @@ public class BitcoinCoreBuilder { private var blockHeaderHasher: IHasher? private var blockValidator: IBlockValidator? private var transactionInfoConverter: ITransactionInfoConverter? + private var hdWallet: IHDWallet? // parameters with default values private var confirmationsThreshold = 6 @@ -94,6 +95,11 @@ public class BitcoinCoreBuilder { return self } + public func set(hdWallet: IHDWallet?) -> BitcoinCoreBuilder { + self.hdWallet = hdWallet + return self + } + public func set(initialSyncApi: ISyncTransactionApi?) -> BitcoinCoreBuilder { self.initialSyncApi = initialSyncApi return self @@ -142,7 +148,7 @@ public class BitcoinCoreBuilder { let reachabilityManager = ReachabilityManager() - let hdWallet = HDWallet(seed: seed, coinType: network.coinType, xPrivKey: network.xPrivKey, xPubKey: network.xPubKey, gapLimit: 20, purpose: bip.purpose) + var hdWallet = self.hdWallet ?? HDWallet(seed: seed, coinType: network.coinType, xPrivKey: network.xPrivKey, xPubKey: network.xPubKey, gapLimit: 20, purpose: bip.purpose) let networkMessageParser = NetworkMessageParser(magic: network.magic) let networkMessageSerializer = NetworkMessageSerializer(magic: network.magic) diff --git a/BitcoinKit/Classes/Core/Kit.swift b/BitcoinKit/Classes/Core/Kit.swift index b2191286..3d109e4c 100644 --- a/BitcoinKit/Classes/Core/Kit.swift +++ b/BitcoinKit/Classes/Core/Kit.swift @@ -20,7 +20,7 @@ public class Kit: AbstractKit { } } - public init(seed: Data, bip: Bip, walletId: String, syncMode: BitcoinCore.SyncMode = .api, networkType: NetworkType = .mainNet, confirmationsThreshold: Int = 6, logger: Logger?) throws { + public init(seed: Data, bip: Bip, walletId: String, syncMode: BitcoinCore.SyncMode = .api, networkType: NetworkType = .mainNet, confirmationsThreshold: Int = 6, hdWallet: IHDWallet?, logger: Logger?) throws { let network: INetwork let logger = logger ?? Logger(minLogLevel: .verbose) @@ -67,7 +67,7 @@ public class Kit: AbstractKit { blockValidatorSet.add(blockValidator: blockValidatorChain) let hodler = HodlerPlugin(addressConverter: bitcoinCoreBuilder.addressConverter, blockMedianTimeHelper: BlockMedianTimeHelper(storage: storage), publicKeyStorage: storage) - + let bitcoinCore = try bitcoinCoreBuilder .set(network: network) .set(initialSyncApi: initialSyncApi) @@ -80,6 +80,7 @@ public class Kit: AbstractKit { .set(syncMode: syncMode) .set(storage: storage) .set(blockValidator: blockValidatorSet) + .set(hdWallet: hdWallet) .add(plugin: hodler) .build()