@@ -61,9 +61,10 @@ class CommonUserTokensManager {
61
61
return tokenItem. blockchainNetwork
62
62
}
63
63
64
- private func addInternal( _ tokenItems: [ TokenItem ] , shouldUpload: Bool ) {
65
- let entries = tokenItems. map { tokenItem in
64
+ private func addInternal( _ tokenItems: [ TokenItem ] , shouldUpload: Bool ) throws {
65
+ let entries = try tokenItems. map { tokenItem in
66
66
let blockchainNetwork = getBlockchainNetwork ( for: tokenItem)
67
+ try validateDerivation ( for: tokenItem)
67
68
return StorageEntry ( blockchainNetwork: blockchainNetwork, token: tokenItem. token)
68
69
}
69
70
@@ -92,6 +93,14 @@ class CommonUserTokensManager {
92
93
let tokenItems = converter. convertToTokenItem ( nonCustomTokens)
93
94
swapAvailabilityController. loadSwapAvailability ( for: tokenItems, forceReload: forceReload, userWalletId: userWalletId. stringValue)
94
95
}
96
+
97
+ private func validateDerivation( for tokenItem: TokenItem ) throws {
98
+ if let derivationPath = tokenItem. blockchainNetwork. derivationPath,
99
+ tokenItem. blockchain. curve == . ed25519_slip0010,
100
+ derivationPath. nodes. contains ( where: { !$0. isHardened } ) {
101
+ throw TangemSdkError . nonHardenedDerivationNotSupported
102
+ }
103
+ }
95
104
}
96
105
97
106
// MARK: - UserTokensManager protocol conformance
@@ -144,6 +153,8 @@ extension CommonUserTokensManager: UserTokensManager {
144
153
throw Error . failedSupportedLongHahesTokens ( blockchainDisplayName: tokenItem. blockchain. displayName)
145
154
}
146
155
156
+ try validateDerivation ( for: tokenItem)
157
+
147
158
return
148
159
}
149
160
@@ -168,7 +179,12 @@ extension CommonUserTokensManager: UserTokensManager {
168
179
}
169
180
170
181
func add( _ tokenItems: [ TokenItem ] , completion: @escaping ( Result < Void , TangemSdkError > ) -> Void ) {
171
- addInternal ( tokenItems, shouldUpload: true )
182
+ do {
183
+ try addInternal ( tokenItems, shouldUpload: true )
184
+ } catch {
185
+ completion ( . failure( error. toTangemSdkError ( ) ) )
186
+ return
187
+ }
172
188
deriveIfNeeded ( completion: completion)
173
189
}
174
190
@@ -192,16 +208,22 @@ extension CommonUserTokensManager: UserTokensManager {
192
208
}
193
209
194
210
func update( itemsToRemove: [ TokenItem ] , itemsToAdd: [ TokenItem ] , completion: @escaping ( Result < Void , TangemSdkError > ) -> Void ) {
195
- update ( itemsToRemove: itemsToRemove, itemsToAdd: itemsToAdd)
211
+ do {
212
+ try update ( itemsToRemove: itemsToRemove, itemsToAdd: itemsToAdd)
213
+ } catch {
214
+ completion ( . failure( error. toTangemSdkError ( ) ) )
215
+ return
216
+ }
217
+
196
218
deriveIfNeeded ( completion: completion)
197
219
}
198
220
199
- func update( itemsToRemove: [ TokenItem ] , itemsToAdd: [ TokenItem ] ) {
221
+ func update( itemsToRemove: [ TokenItem ] , itemsToAdd: [ TokenItem ] ) throws {
200
222
itemsToRemove. forEach {
201
223
removeInternal ( $0, shouldUpload: false )
202
224
}
203
225
204
- addInternal ( itemsToAdd, shouldUpload: false )
226
+ try addInternal ( itemsToAdd, shouldUpload: false )
205
227
loadSwapAvailbilityStateIfNeeded ( forceReload: true )
206
228
userTokenListManager. upload ( )
207
229
}
0 commit comments