refactor(spl): remove unneeded sol wallet token address provider
What changed, and why it matters
This commit is a routine code cleanup. It removes a separate Solana-specific token address provider and folds its logic into the general wallet token address provider. There is no visible security fix or behavior change beyond simplifying where token addresses are read from.
No security action required; treat as normal refactoring. Standard review and regression testing are sufficient.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch deletes sol_wallet_token_addresses_provider.dart, which exposed pSolanaWalletTokenAddresses reading walletInfo.solanaTokenMintAddresses. It updates pWalletTokenAddresses in wallet_info_provider.dart to branch on walletInfo.coin.prettyName == 'Solana' and return either Solana mint addresses or Ethereum contract addresses. Call sites in edit_wallet_tokens_view.dart and my_tokens_view.dart now use the unified provider. No validation, storage, or access-control logic changes.
Changed components
lib/wallets/isar/providers/solana/sol_wallet_token_addresses_provider.dartlib/wallets/isar/providers/wallet_info_provider.dartlib/pages/add_wallet_views/add_token_view/edit_wallet_tokens_view.dartlib/pages/token_view/my_tokens_view.dartInspect captured patch +20 / −44
diff --git a/lib/pages/add_wallet_views/add_token_view/edit_wallet_tokens_view.dart b/lib/pages/add_wallet_views/add_token_view/edit_wallet_tokens_view.dart
index 1602aa4..e86182b 100644
--- a/lib/pages/add_wallet_views/add_token_view/edit_wallet_tokens_view.dart
+++ b/lib/pages/add_wallet_views/add_token_view/edit_wallet_tokens_view.dart
@@ -31,7 +31,6 @@ import '../../../utilities/default_spl_tokens.dart';
import '../../../utilities/text_styles.dart';
import '../../../utilities/util.dart';
import '../../../wallets/isar/providers/wallet_info_provider.dart';
-import '../../../wallets/isar/providers/solana/sol_wallet_token_addresses_provider.dart';
import '../../../wallets/wallet/impl/ethereum_wallet.dart';
import '../../../wallets/wallet/impl/solana_wallet.dart';
import '../../../widgets/background.dart';
@@ -376,14 +375,8 @@ class _EditWalletTokensViewState extends ConsumerState<EditWalletTokensView> {
tokenEntities.addAll(contracts.map((e) => AddTokenListElementData(e)));
}
- // Get the appropriate token addresses based on wallet type.
- List<String> walletContracts = [];
-
- if (wallet is SolanaWallet) {
- walletContracts = ref.read(pSolanaWalletTokenAddresses(widget.walletId));
- } else {
- walletContracts = ref.read(pWalletTokenAddresses(widget.walletId));
- }
+ // Get token addresses.
+ final walletContracts = ref.read(pWalletTokenAddresses(widget.walletId));
final shouldMarkAsSelectedContracts = [
...walletContracts,
diff --git a/lib/pages/token_view/my_tokens_view.dart b/lib/pages/token_view/my_tokens_view.dart
index ad4fd8b..7e1c621 100644
--- a/lib/pages/token_view/my_tokens_view.dart
+++ b/lib/pages/token_view/my_tokens_view.dart
@@ -20,7 +20,6 @@ import '../../utilities/assets.dart';
import '../../utilities/constants.dart';
import '../../utilities/text_styles.dart';
import '../../utilities/util.dart';
-import '../../wallets/isar/providers/solana/sol_wallet_token_addresses_provider.dart';
import '../../wallets/isar/providers/wallet_info_provider.dart';
import '../../wallets/wallet/impl/solana_wallet.dart';
import '../../widgets/background.dart';
@@ -224,21 +223,20 @@ class _MyTokensViewState extends ConsumerState<MyTokensView> {
child: Builder(
builder: (context) {
final wallet = ref.watch(pWallets).getWallet(widget.walletId);
+ final tokenAddresses = ref.watch(
+ pWalletTokenAddresses(widget.walletId),
+ );
if (wallet is SolanaWallet) {
return SolanaTokensList(
walletId: widget.walletId,
searchTerm: _searchString,
- tokenMints: ref.watch(
- pSolanaWalletTokenAddresses(widget.walletId),
- ),
+ tokenMints: tokenAddresses,
);
} else {
return MyTokensList(
walletId: widget.walletId,
searchTerm: _searchString,
- tokenContracts: ref.watch(
- pWalletTokenAddresses(widget.walletId),
- ),
+ tokenContracts: tokenAddresses,
);
}
},
diff --git a/lib/wallets/isar/providers/solana/sol_wallet_token_addresses_provider.dart b/lib/wallets/isar/providers/solana/sol_wallet_token_addresses_provider.dart
deleted file mode 100644
index defccf4..0000000
--- a/lib/wallets/isar/providers/solana/sol_wallet_token_addresses_provider.dart
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * This file is part of Stack Wallet.
- *
- * Copyright (c) 2025 Cypher Stack
- * All Rights Reserved.
- * The code is distributed under GPLv3 license, see LICENSE file for details.
- *
- */
-
-import 'package:flutter_riverpod/flutter_riverpod.dart';
-
-import '../wallet_info_provider.dart';
-
-/// Provides the list of Solana SPL token mint addresses for a wallet.
-///
-/// This is a family provider that takes a walletId and returns the list of
-/// mint addresses from the WalletInfo's otherData.
-final pSolanaWalletTokenAddresses = Provider.family<List<String>, String>(
- (ref, walletId) {
- final walletInfo = ref.watch(pWalletInfo(walletId));
- return walletInfo.solanaTokenMintAddresses;
- },
-);
diff --git a/lib/wallets/isar/providers/wallet_info_provider.dart b/lib/wallets/isar/providers/wallet_info_provider.dart
index d646987..c79ab8a 100644
--- a/lib/wallets/isar/providers/wallet_info_provider.dart
+++ b/lib/wallets/isar/providers/wallet_info_provider.dart
@@ -96,13 +96,21 @@ final pWalletReceivingAddress = Provider.family<String, String>((
);
});
+/// Provider for wallet token addresses (Ethereum) or token mint addresses (Solana).
+///
+/// Returns the appropriate token list based on the wallet's coin type.
+///
+/// For Ethereum wallets: returns tokenContractAddresses.
+/// For Solana wallets: returns solanaTokenMintAddresses.
final pWalletTokenAddresses = Provider.family<List<String>, String>((
ref,
walletId,
) {
- return ref.watch(
- _wiProvider(
- walletId,
- ).select((value) => (value.value as WalletInfo).tokenContractAddresses),
- );
+ final walletInfo = ref.watch(pWalletInfo(walletId));
+
+ if (walletInfo.coin.prettyName == 'Solana') {
+ return walletInfo.solanaTokenMintAddresses;
+ } else {
+ return walletInfo.tokenContractAddresses;
+ }
});
Why this scored 15/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.