Skip to content

Commit f0710d6

Browse files
committed
🐛 Fix HDWallet initializer to enable overriding HDWallet
1 parent 150854e commit f0710d6

File tree

1 file changed

+34
-29
lines changed

1 file changed

+34
-29
lines changed

Sources/BitcoinKit/Wallet/HDWallet.swift

Lines changed: 34 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -86,22 +86,7 @@ open class HDWallet {
8686
/// [Cached] Addresses combined both external and internal.
8787
public var addresses: [BitcoinAddress] { return externalAddresses + internalAddresses }
8888

89-
private init(mnemonic: [String]?,
90-
seed: Data,
91-
externalIndex: UInt32,
92-
internalIndex: UInt32,
93-
network: Network,
94-
account: UInt32) {
95-
self.mnemonic = mnemonic
96-
self.seed = seed
97-
self.network = network
98-
self.account = account
99-
self.externalIndex = externalIndex
100-
self.internalIndex = internalIndex
101-
self.keychain = HDKeychain(seed: seed, network: network)
102-
self.rootXPrivKey = HDPrivateKey(seed: seed, network: network)
103-
self.rootXPubKey = rootXPrivKey.extendedPublicKey()
104-
89+
private func initializeCache() {
10590
// Privkey cache
10691
self.externalPrivKeys = (0...externalIndex).map { privKey(index: $0, chain: .external) }
10792
self.internalPrivKeys = (0...internalIndex).map { privKey(index: $0, chain: .internal) }
@@ -115,22 +100,42 @@ open class HDWallet {
115100
self.internalAddresses = internalPubKeys.map { $0.toBitcoinAddress() }
116101
}
117102

118-
public convenience init(seed: Data,
119-
externalIndex: UInt32,
120-
internalIndex: UInt32,
121-
network: Network,
122-
account: UInt32 = 0) {
123-
self.init(mnemonic: nil, seed: seed, externalIndex: externalIndex, internalIndex: internalIndex, network: network, account: account)
103+
public init(seed: Data,
104+
externalIndex: UInt32,
105+
internalIndex: UInt32,
106+
network: Network,
107+
account: UInt32 = 0) {
108+
self.mnemonic = nil
109+
self.seed = seed
110+
self.network = network
111+
self.account = account
112+
self.externalIndex = externalIndex
113+
self.internalIndex = internalIndex
114+
self.keychain = HDKeychain(seed: seed, network: network)
115+
self.rootXPrivKey = HDPrivateKey(seed: seed, network: network)
116+
self.rootXPubKey = rootXPrivKey.extendedPublicKey()
117+
118+
self.initializeCache()
124119
}
125120

126-
public convenience init(mnemonic: [String],
127-
passphrase: String,
128-
externalIndex: UInt32,
129-
internalIndex: UInt32,
130-
network: Network,
131-
account: UInt32 = 0) throws {
121+
public init(mnemonic: [String],
122+
passphrase: String,
123+
externalIndex: UInt32,
124+
internalIndex: UInt32,
125+
network: Network,
126+
account: UInt32 = 0) throws {
132127
let seed: Data = try Mnemonic.seed(mnemonic: mnemonic, passphrase: passphrase)
133-
self.init(mnemonic: mnemonic, seed: seed, externalIndex: externalIndex, internalIndex: internalIndex, network: network, account: account)
128+
self.mnemonic = mnemonic
129+
self.seed = seed
130+
self.network = network
131+
self.account = account
132+
self.externalIndex = externalIndex
133+
self.internalIndex = internalIndex
134+
self.keychain = HDKeychain(seed: seed, network: network)
135+
self.rootXPrivKey = HDPrivateKey(seed: seed, network: network)
136+
self.rootXPubKey = rootXPrivKey.extendedPublicKey()
137+
138+
self.initializeCache()
134139
}
135140

136141
/// Create HDWallet by generating random mnemonic. Passphrase is used as salt to generate seed from the mnemonic.

0 commit comments

Comments
 (0)