Updated on 2026-08-14

This commit is contained in:
Tangem 2023-09-14 11:47:20 +03:00
parent bb07492c0c
commit 1b395e28d2
4 changed files with 73 additions and 73 deletions

View file

@ -71,9 +71,9 @@ class DefaultCustomTokenInteractor(
onSuccess: suspend (ScanResponse) -> Unit,
) {
val config = CardConfig.createConfig(scanResponse.card)
val derivationDataList = currencyList.mapNotNull {
val curve = config.primaryCurve(it.blockchain)
curve?.let { getDerivations(curve, scanResponse, currencyList) }
val derivationDataList = currencyList.mapNotNull { currency ->
val curve = config.primaryCurve(currency.blockchain)
curve?.let { getDerivations(curve, scanResponse, currency) }
}
val derivations = derivationDataList.associate(TokensMiddleware.DerivationData::derivations)
@ -110,24 +110,25 @@ class DefaultCustomTokenInteractor(
private fun getDerivations(
curve: EllipticCurve,
scanResponse: ScanResponse,
currencyList: List<Currency>,
currency: Currency,
): TokensMiddleware.DerivationData? {
val wallet = scanResponse.card.wallets.firstOrNull { it.curve == curve } ?: return null
val manageTokensCandidates = currencyList.map { it.blockchain }.distinct().filter {
it.getSupportedCurves().contains(curve)
}.mapNotNull {
it.derivationPath(scanResponse.derivationStyleProvider.getDerivationStyle())
}
val supportedCurves = currency.blockchain.getSupportedCurves()
val path = currency.derivationPath
?.let {
currency.blockchain.derivationPath(scanResponse.derivationStyleProvider.getDerivationStyle())
}
.takeIf { supportedCurves.contains(curve) }
val customTokensCandidates = currencyList.filter {
it.blockchain.getSupportedCurves().contains(curve)
}.mapNotNull { it.derivationPath }.map { DerivationPath(it) }
val customPath = currency.derivationPath?.let {
DerivationPath(it)
}.takeIf { supportedCurves.contains(curve) }
val bothCandidates = (manageTokensCandidates + customTokensCandidates).distinct().toMutableList()
val bothCandidates = listOfNotNull(path, customPath).distinct().toMutableList()
if (bothCandidates.isEmpty()) return null
currencyList.find { it is Currency.Blockchain && it.blockchain == Blockchain.Cardano }?.let { currency ->
if (currency is Currency.Blockchain && currency.blockchain == Blockchain.Cardano) {
currency.derivationPath?.let {
bothCandidates.add(CardanoUtils.extendedDerivationPath(DerivationPath(it)))
}