A powerful mobile application for exploring Solana blockchain wallets, tokens, and transactions.
SolPeek is a React Native mobile application built with Expo that allows users to explore any Solana wallet address, view balances and tokens, perform token swaps, and send SOL on both Devnet and Mainnet networks.
- Search and explore any Solana wallet address
- View real-time SOL balance
- Display all SPL tokens with amounts and USD values
- Show recent transaction history (last 10 transactions)
- Transaction success/failure indicators
- Direct links to Solscan for detailed blockchain views
- Address validation and error handling
- Jupiter Aggregator v6 API integration
- Swap SOL to USDC (and vice versa) on Mainnet
- Real-time price feeds from multiple sources (Jupiter, CoinGecko)
- Configurable slippage tolerance (0.1%, 0.5%, 1.0%, 3.0%)
- Mobile Wallet Adapter integration for secure transaction signing
- Comprehensive error handling and user feedback
- Transaction confirmation with Solscan explorer links
- Transfer SOL to any Solana address
- Secure transaction signing via Mobile Wallet Adapter
- Transaction preview with network fees
- Address validation
- Balance checks before sending
- Transaction status tracking
- Solscan integration for transaction verification
- Save frequently monitored wallet addresses
- Persistent storage across app sessions
- Quick access from favorites list
- Add/remove favorites with one tap
- Favorites count indicator
- Automatic tracking of searched addresses
- Store last 20 searches
- Quick re-search from history
- Clear history option
- Persistent storage
- Toggle between Devnet and Mainnet
- Visual network indicator in all screens
- Automatic RPC endpoint switching
- Confirmation modal before switching
- Network-specific features (swaps on Mainnet only)
- Live SOL price in USD
- Multiple API sources with fallback
- Price refresh every 15 seconds
- Graceful degradation on API failures
- Terminal-inspired cyberpunk design
- Dark theme optimized for OLED screens
- Monospace fonts for blockchain data
- Smooth animations and transitions
- Responsive layout for all screen sizes
- React Native 0.81.5 - Mobile framework
- Expo ~54.0.33 - Development platform
- TypeScript ~5.9.2 - Type safety
- Expo Router ~6.0.23 - File-based routing
- @solana/web3.js ^1.98.4 - Solana JavaScript SDK
- @solana-mobile/mobile-wallet-adapter-protocol ^2.2.5 - Mobile wallet integration
- @solana-mobile/mobile-wallet-adapter-protocol-web3js ^2.2.5 - Web3.js adapter
- Jupiter Aggregator v6 API - Token swap aggregation
- Zustand ^5.0.11 - Lightweight state management
- @react-native-async-storage/async-storage 2.2.0 - Persistent storage
- axios - HTTP client with better React Native support
- Native fetch - Fallback for RPC calls
- @expo/vector-icons ^15.0.3 - Icon library
- expo-linear-gradient ~15.0.8 - Gradient backgrounds
- @react-native-masked-view/masked-view 0.3.2 - Masked views
- react-native-safe-area-context ^5.6.2 - Safe area handling
- babel-plugin-module-resolver ^5.0.2 - Import aliasing
- TypeScript ESLint - Code quality
- Node.js 18 or higher
- npm or yarn package manager
- Expo CLI (
npm install -g expo-cli) - Android Studio (for Android development)
- Xcode (for iOS development on macOS)
- A Solana-compatible mobile wallet app (Phantom, Solflare, etc.)
- Clone the repository
git clone https://github.com/abhinavgautam01/SolPeek.git
cd SolPeek- Install dependencies
npm install- Start the development server
npm start- Run on your device
For Android:
npm run androidFor iOS:
npm run iosFor web (UI testing only, limited functionality):
npm run webAndroid APK:
eas build --platform android --profile previewiOS:
eas build --platform ios --profile preview- Launch the app and navigate to the "Wallet" tab
- Enter a Solana wallet address (32-44 characters)
- Tap the "Search" button
- View balance, tokens, and recent transactions
- Tap any transaction to view details on Solscan
- Add to favorites by tapping the star icon
- Navigate to the "Swap" tab
- Ensure you are connected to Mainnet (check network indicator)
- Tap "Connect Wallet" to connect your mobile wallet
- Enter the amount of SOL or USDC to swap
- Select slippage tolerance (recommended: 0.5% - 1.0%)
- Review the estimated output amount
- Tap "EXECUTE_SWAP"
- Approve the transaction in your wallet app
- Wait for confirmation
- Navigate to the "Send Tokens" tab
- Tap "Connect Wallet"
- Enter the recipient's Solana address
- Enter the amount of SOL to send
- Review the transaction details and network fee
- Tap "INITIATE_TRANSFER"
- Approve in your wallet app
- View transaction status and confirmation
- Go to any screen with the network indicator
- Tap the network badge (DEVNET / MAINNET) in the top-right corner
- Confirm the network switch in the modal
- App will refresh with new network data
- Add to favorites: Search for a wallet, then tap the star icon
- View favorites: Navigate to Settings > Favorites
- Remove from favorites: Tap the star icon again on any favorited wallet
SolPeek/
├── app/ # Expo Router screens
│ ├── (tabs)/ # Tab-based navigation
│ │ ├── index.tsx # Wallet explorer screen
│ │ ├── swap.tsx # Token swap screen
│ │ ├── sendtokens.tsx # Send tokens screen
│ │ ├── settings.tsx # Settings and favorites
│ │ └── _layout.tsx # Tab navigation layout
│ ├── token/
│ │ └── [mint].tsx # Individual token detail screen
│ ├── fav_wallet/
│ │ └── watchlist.tsx # Favorites list screen
│ ├── _layout.tsx # Root layout with providers
│ └── +not-found.tsx # 404 screen
├── src/
│ ├── components/ # Reusable UI components
│ │ ├── ConnectButton.tsx # Wallet connection button
│ │ ├── ConnectedWalletCard.tsx # Connected wallet display
│ │ ├── ConfirmModal.tsx # Confirmation modal
│ │ └── FavoriteButton.tsx # Favorite toggle button
│ ├── hooks/ # Custom React hooks
│ │ └── useWallet.ts # Wallet adapter and transactions
│ ├── store/ # State management
│ │ └── wallet-store.ts # Zustand global store
│ ├── styles/ # Global styles
│ │ └── styles.tsx # Shared style definitions
│ ├── utils/ # Utility functions
│ │ └── index.ts # RPC helpers, formatters
│ └── polyfills.ts # React Native polyfills
├── assets/ # Static assets
│ ├── images/ # Images
│ └── fonts/ # Custom fonts
├── android/ # Android native code
├── ios/ # iOS native code
├── app.json # Expo configuration
├── eas.json # Expo Application Services config
├── tsconfig.json # TypeScript configuration
├── package.json # Dependencies and scripts
└── README.md # This file
The app uses the following RPC endpoints (configured in src/utils/index.ts):
- Devnet:
https://api.devnet.solana.com - Mainnet:
https://api.mainnet-beta.solana.com
You can customize these endpoints by modifying the getRpcUrl() function.
Currently configured tokens for swapping:
- SOL: Native Solana token (9 decimals)
- USDC: USD Coin (6 decimals)
Token configurations can be extended in app/(tabs)/swap.tsx.
- Default network: Devnet (for safety)
- Network state persisted via AsyncStorage
- Switch anytime via the network indicator button
npm startThis starts the Expo development server with options to:
- Press
afor Android - Press
ifor iOS - Press
wfor web - Press
rto reload - Press
mto toggle menu
- Use React DevTools for component inspection
- Use Flipper for network and state debugging
- Console logs are visible in terminal and via remote debugging
- Use
__DEV__flag for development-only code
State Management:
src/store/wallet-store.ts- Global state for favorites, search history, network selection, and wallet auth
Wallet Operations:
src/hooks/useWallet.ts- Custom hook for wallet connection, transactions, and swapsauthorize()- Connect walletsendSOL()- Transfer SOL tokensexecuteSwap()- Execute Jupiter swaps
Utilities:
src/utils/index.ts- RPC endpoint getters, amount formatters, token address constants
Main Screens:
app/(tabs)/index.tsx- Wallet explorer with search and transaction historyapp/(tabs)/swap.tsx- Swap interface with Jupiter integrationapp/(tabs)/sendtokens.tsx- Send tokens with Mobile Wallet Adapter
- Create new screen file in
app/orapp/(tabs)/ - Add necessary state to
src/store/wallet-store.ts - Use existing components from
src/components/ - Follow TypeScript strict typing
- Test on both Android and iOS
- Update README with new feature documentation
- Use TypeScript for all new files
- Follow React hooks patterns (no class components)
- Use functional components with proper typing
- Keep components small and focused
- Extract reusable logic into custom hooks
- Use Zustand for global state, useState for local state
- Follow existing naming conventions
- Add comments for complex logic
- Use monospace fonts for blockchain addresses and amounts
Current Status: The Jupiter swap functionality is fully implemented but currently non-functional due to infrastructure issues on Jupiter's end.
Technical Details:
- The Jupiter quote API endpoint (
quote-api.jup.ag) does not resolve in DNS - This is a Jupiter infrastructure problem, not an app issue
- The main domain
api.jup.agworks, but the subdomain for quotes doesn't exist - All swap code is production-ready and will work immediately when Jupiter fixes their DNS
Error Message:
Unable to reach Jupiter API. Please check your internet connection.
User Impact:
- Token swaps will fail with network errors
- Price feeds may intermittently fail (CoinGecko fallback works)
Workaround: Users can use Jupiter's official web application at jup.ag for token swaps.
Resolution: No code changes required. Once Jupiter resolves their DNS issues, swaps will work automatically.
- Swaps only work on Mainnet - Jupiter does not support Devnet swaps
- Mobile Wallet Adapter - Requires compatible wallet apps (Phantom, Solflare, etc.)
- Network connectivity - Requires stable internet for RPC calls
- Rate limiting - Public RPC endpoints may rate-limit requests
- Ensure Node.js 18+ is installed
- Delete
node_modulesand runnpm installagain - Clear Expo cache:
expo start -c
- Ensure you have a compatible wallet app installed
- Grant necessary permissions to both apps
- Try disconnecting and reconnecting
- Restart both apps
- Check you're on the correct network (Mainnet for swaps)
- Ensure sufficient balance for transaction + fees
- Verify internet connectivity
- Check Solana network status
- Currently experiencing Jupiter API issues (see Known Issues)
- Ensure you're on Mainnet
- Check slippage tolerance (increase if market is volatile)
- Wait for Jupiter to resolve DNS issues
Contributions are welcome! Here's how you can help:
- Check existing issues first
- Open a new issue with:
- Clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- Screenshots if applicable
- Device and OS information
- Open an issue labeled "feature request"
- Describe the feature and use case
- Explain why it would be valuable
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature-name - Make your changes following code style guidelines
- Test thoroughly on both Android and iOS
- Commit with clear messages:
git commit -m 'Add feature: description' - Push to your fork:
git push origin feature/your-feature-name - Open a Pull Request with:
- Description of changes
- Related issue numbers
- Testing performed
- Screenshots/videos if UI changes
- Follow existing code patterns and style
- Add TypeScript types for all new code
- Write meaningful commit messages
- Keep PRs focused on single features/fixes
- Update documentation for new features
- Ensure no TypeScript errors
- Test on multiple devices if possible
This project is licensed under the MIT License. See the LICENSE file for details.
- Commercial use allowed
- Modification allowed
- Distribution allowed
- Private use allowed
- No liability or warranty
This project was made possible by:
- Solana Foundation - For building an incredible blockchain platform
- Jupiter Aggregator - For providing swap aggregation APIs
- Expo Team - For the excellent React Native development framework
- Solana Mobile - For the Mobile Wallet Adapter standard
- CoinGecko - For providing reliable price data APIs
- Solscan - For blockchain explorer integration
- Open Source Community - For the amazing tools and libraries
Abhinav Gautam
- GitHub: @abhinavgautam01
- Expo: @abhinavgautam01
- Issues: GitHub Issues
- Check this README for common questions
- Review Known Issues section
- Search existing issues
- Open a new issue with detailed information
- Initial release
- Wallet explorer functionality
- Token swap integration (Jupiter v6)
- Send SOL functionality
- Favorites system
- Search history
- Network switching (Devnet/Mainnet)
- Real-time price feeds
- Mobile Wallet Adapter integration
- Cyberpunk UI theme
- Transaction history viewer
- Solscan integration
Made for the Solana ecosystem
⭐ Star this repository if you find it useful ⭐