514
@override
515
bool hasPriorityFee(int chainId) => EVMChainUtils.hasPriorityFee(chainId);
516
517
- @override
518
- Future<bool> checkTokenFiatPrice(WalletBase wallet, Erc20Token token) async {
517
+ Future<({double usdValue, bool hasValidFiatPrice})> _getTokenUsdValueAndFiatCheck(
518
+ Erc20Token token,
519
+ BigInt balanceWei,
520
+ ) async {
521
try {
522
final settingsStore = getIt.get<SettingsStore>();
521
- final fiatCurrency = settingsStore.fiatCurrency;
523
final torOnly = settingsStore.fiatApiMode == FiatApiMode.torOnly;
524
525
final price = await FiatConversionService.fetchPrice(
526
crypto: token,
526
- fiat: fiatCurrency,
527
+ fiat: FiatCurrency.usd,
528
torOnly: torOnly,
529
);
530
530
- return price > 0;
531
+ final hasValidFiatPrice = price > 0;
532
+
533
+ final decimals = token.decimal;
534
+ final balance = balanceWei.toDouble() / math.pow(10, decimals);
535
+ final usdValue = balance * price;
536
+
537
+ return (usdValue: usdValue, hasValidFiatPrice: hasValidFiatPrice);
538
} catch (e) {
532
- return false;
539
+ return (usdValue: 0.0, hasValidFiatPrice: false);
540
}
541
}
542
543
+ static const _minTokenUsdValue = 0.1;
544
@override
545
Future<void> discoverAndAddWalletTokens(WalletBase wallet) async {
546
if (wallet is! EVMChainWallet) return;
547
548
try {
541
- final discoveredTokens = await wallet.discoverTokensFromMoralis();
549
+ final result = await wallet.discoverTokensFromMoralis();
550
543
- if (discoveredTokens.isEmpty) return;
551
+ if (result.newTokens.isEmpty) return;
552
553
final List<Future<void>> tokenChecks = [];
554
547
- for (final token in discoveredTokens) {
555
+ for (final item in result.newTokens) {
556
tokenChecks.add((() async {
549
- final isPropertiesSuspicious = wallet.isTokenPropertiesSuspicious(token);
557
+ final token = item.token;
558
551
- bool hasValidFiatPrice = true;
552
- if (!isPropertiesSuspicious) {
553
- hasValidFiatPrice = await checkTokenFiatPrice(wallet, token);
554
- }
559
+ final isPropertiesSuspicious = wallet.isTokenPropertiesSuspicious(token);
560
556
- final isSpam = isPropertiesSuspicious || !hasValidFiatPrice;
561
+ final fiatResult = await _getTokenUsdValueAndFiatCheck(
562
+ token,
563
+ item.balanceWei,
564
+ );
565
+ final isSpam = isPropertiesSuspicious || !fiatResult.hasValidFiatPrice;
566
567
token.isPotentialScam = isSpam;
559
- token.enabled = !isSpam;
568
+
569
+ token.enabled = (fiatResult.usdValue >= _minTokenUsdValue) && !isSpam;
570
571
await wallet.addErc20Token(token);
572
})());