67 lines
3.5 KiB
Diff
67 lines
3.5 KiB
Diff
# UNDF: UNDF-2026-000000923
|
|
--- a/lib/view_model/exchange/exchange_view_model.dart
|
|
+++ b/lib/view_model/exchange/exchange_view_model.dart
|
|
@@ -1643,10 +1643,17 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with S
|
|
Future<void> _injectUserEthTokensIntoCurrencyLists() async {
|
|
final tokens = await TokenUtilities.loadEvmTokensForSwap();
|
|
final toAddReceive = <CryptoCurrency>[];
|
|
final toAddDeposit = <CryptoCurrency>[];
|
|
|
|
+ // Build sets of existing contract addresses for O(1) lookup instead of
|
|
+ // scanning receiveCurrencies/depositCurrencies with .any() per token.
|
|
+ final receiveAddrs = receiveCurrencies.whereType<Erc20Token>()
|
|
+ .map((t) => t.contractAddress.toLowerCase()).toSet();
|
|
+ final depositAddrs = depositCurrencies.whereType<Erc20Token>()
|
|
+ .map((t) => t.contractAddress.toLowerCase()).toSet();
|
|
+
|
|
for (final token in tokens) {
|
|
- if (!_listContainsToken(receiveCurrencies, token)) toAddReceive.add(token);
|
|
- if (!_listContainsToken(depositCurrencies, token)) toAddDeposit.add(token);
|
|
+ final addr = token.contractAddress.toLowerCase();
|
|
+ if (!receiveAddrs.contains(addr)) toAddReceive.add(token);
|
|
+ if (!depositAddrs.contains(addr)) toAddDeposit.add(token);
|
|
}
|
|
|
|
if (toAddReceive.isNotEmpty) receiveCurrencies.addAll(toAddReceive);
|
|
@@ -1680,10 +1687,17 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with S
|
|
Future<void> _injectUserSplTokensIntoCurrencyLists() async {
|
|
final tokens = await TokenUtilities.loadSolTokensForSwap();
|
|
final toAddReceive = <CryptoCurrency>[];
|
|
final toAddDeposit = <CryptoCurrency>[];
|
|
|
|
+ // Build sets of existing mint addresses for O(1) lookup.
|
|
+ final receiveMints = receiveCurrencies.whereType<SPLToken>()
|
|
+ .map((t) => t.mintAddress.toLowerCase()).toSet();
|
|
+ final depositMints = depositCurrencies.whereType<SPLToken>()
|
|
+ .map((t) => t.mintAddress.toLowerCase()).toSet();
|
|
+
|
|
for (final token in tokens) {
|
|
- if (!_listContainsSplToken(receiveCurrencies, token)) toAddReceive.add(token);
|
|
- if (!_listContainsSplToken(depositCurrencies, token)) toAddDeposit.add(token);
|
|
+ final mint = token.mintAddress.toLowerCase();
|
|
+ if (!receiveMints.contains(mint)) toAddReceive.add(token);
|
|
+ if (!depositMints.contains(mint)) toAddDeposit.add(token);
|
|
}
|
|
|
|
if (toAddReceive.isNotEmpty) receiveCurrencies.addAll(toAddReceive);
|
|
@@ -1707,10 +1721,17 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with S
|
|
Future<void> _injectUserTronTokensIntoCurrencyLists() async {
|
|
final tokens = await TokenUtilities.loadTronTokensForSwap();
|
|
final toAddReceive = <CryptoCurrency>[];
|
|
final toAddDeposit = <CryptoCurrency>[];
|
|
|
|
+ // Build sets of existing contract addresses for O(1) lookup.
|
|
+ final receiveAddrs = receiveCurrencies.whereType<TronToken>()
|
|
+ .map((t) => t.contractAddress.toLowerCase()).toSet();
|
|
+ final depositAddrs = depositCurrencies.whereType<TronToken>()
|
|
+ .map((t) => t.contractAddress.toLowerCase()).toSet();
|
|
+
|
|
for (final token in tokens) {
|
|
- if (!_listContainsTronToken(receiveCurrencies, token)) toAddReceive.add(token);
|
|
- if (!_listContainsTronToken(depositCurrencies, token)) toAddDeposit.add(token);
|
|
+ final addr = token.contractAddress.toLowerCase();
|
|
+ if (!receiveAddrs.contains(addr)) toAddReceive.add(token);
|
|
+ if (!depositAddrs.contains(addr)) toAddDeposit.add(token);
|
|
}
|
|
|
|
if (toAddReceive.isNotEmpty) receiveCurrencies.addAll(toAddReceive);
|