refactor(spl): reduce default spl token list
What changed, and why it matters
This commit trims the built-in list of Solana tokens shown in the wallet. Instead of shipping a hardcoded default token list and merging it with user-added tokens, the app now only shows tokens that are already stored in its local database. This is a code cleanup/refactoring change; it does not fix a known exploit or change cryptographic behavior.
No immediate security action required. Treat as routine refactoring. If the removed default list contained tokens users relied on, verify that migration/seed logic still populates the database appropriately so users do not lose access to previously visible tokens.
Security signals we found
Reduction of hardcoded token surface may lower risk of misleading default token entries
No cryptographic, permission, or input-validation changes observed
No mention of vulnerability, CVE, bug bounty, or security advisory in commit or title
Evidence from the diff
The change removes the use of DefaultSplTokens.list in two UI files. Previously, add_wallet_view.dart merged hardcoded default SPL token addresses with custom tokens from MainDB, deduplicating by address. Now it only loads tokens from MainDB.getSplTokens().findAllSync(). Similarly, sol_tokens_list.dart no longer combines default and database tokens; it only queries the database. The default_spl_tokens.dart import is removed in both files. The commit message explicitly frames this as a refactor and notes the Solana coin list could also be trimmed but the author is not comfortable doing so yet due to async initialization concerns.
Changed components
lib/pages/add_wallet_views/add_wallet_view/add_wallet_view.dartlib/pages/token_view/sub_widgets/sol_tokens_list.dartSPL token selection UISolana wallet add flowInspect captured patch +4 / −34
diff --git a/lib/pages/add_wallet_views/add_wallet_view/add_wallet_view.dart b/lib/pages/add_wallet_views/add_wallet_view/add_wallet_view.dart
index 56012c8..c1db3b5 100644
--- a/lib/pages/add_wallet_views/add_wallet_view/add_wallet_view.dart
+++ b/lib/pages/add_wallet_views/add_wallet_view/add_wallet_view.dart
@@ -29,7 +29,6 @@ import '../../../themes/stack_colors.dart';
import '../../../utilities/assets.dart';
import '../../../utilities/constants.dart';
import '../../../utilities/default_eth_tokens.dart';
-import '../../../utilities/default_spl_tokens.dart';
import '../../../utilities/text_styles.dart';
import '../../../utilities/util.dart';
import '../../../wallets/crypto_currency/crypto_currency.dart';
@@ -193,17 +192,8 @@ class _AddWalletViewState extends ConsumerState<AddWalletView> {
}
if (AppConfig.coins.whereType<Solana>().isNotEmpty) {
- // Add default tokens.
- final defaultTokenAddresses = DefaultSplTokens.list.map((e) => e.address).toSet();
- solTokenEntities.addAll(DefaultSplTokens.list.map((e) => SolTokenEntity(e)));
-
- // Add custom tokens from database.
- final allDatabaseTokens = MainDB.instance.getSplTokens().findAllSync();
- for (final token in allDatabaseTokens) {
- if (!defaultTokenAddresses.contains(token.address)) {
- solTokenEntities.add(SolTokenEntity(token));
- }
- }
+ final tokens = MainDB.instance.getSplTokens().findAllSync();
+ solTokenEntities.addAll(tokens.map((e) => SolTokenEntity(e)));
}
WidgetsBinding.instance.addPostFrameCallback((_) {
diff --git a/lib/pages/token_view/sub_widgets/sol_tokens_list.dart b/lib/pages/token_view/sub_widgets/sol_tokens_list.dart
index d063fc1..e2502b7 100644
--- a/lib/pages/token_view/sub_widgets/sol_tokens_list.dart
+++ b/lib/pages/token_view/sub_widgets/sol_tokens_list.dart
@@ -13,7 +13,6 @@ import 'package:isar_community/isar.dart';
import '../../../models/isar/models/solana/spl_token.dart';
import '../../../providers/db/main_db_provider.dart';
-import '../../../utilities/default_spl_tokens.dart';
import '../../../utilities/util.dart';
import 'sol_token_select_item.dart';
@@ -61,29 +60,10 @@ class SolanaTokensList extends StatelessWidget {
return Consumer(
builder: (_, ref, __) {
- // Get all available SPL tokens: combine defaults with custom tokens from database.
+ // Get all available SOL tokens.
final db = ref.watch(mainDBProvider);
- // Query all SplTokens from the database (includes both defaults and custom tokens).
- final allDatabaseTokens = db.getSplTokens().findAllSync();
-
- // Combined token lists: prioritize database tokens, fall back to defaults.
- final allTokens = <SplToken>[];
- final seenAddresses = <String>{};
-
- // Add all database tokens.
- for (final token in allDatabaseTokens) {
- allTokens.add(token);
- seenAddresses.add(token.address);
- }
-
- // Add default tokens that aren't already in the database.
- for (final defaultToken in DefaultSplTokens.list) {
- if (!seenAddresses.contains(defaultToken.address)) {
- allTokens.add(defaultToken);
- seenAddresses.add(defaultToken.address);
- }
- }
+ final allTokens = db.getSplTokens().findAllSync();
final tokens = _filter(searchTerm, allTokens);
Why this scored 17/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.