Open source Ethereum wallet built with React Native and Expo, featuring biometric authentication and a glassmorphic design.
- 🔐 Secure Storage: Private keys stored in iOS Keychain / Android Keystore with biometric protection
- 👆 Biometric Authentication: Face ID, Touch ID, and device passcode support
- 💎 Glassmorphic Design: Modern UI with semi-transparent cards and custom backgrounds
- 🌐 Polygon Network: Built for POL (Polygon) transactions on mainnet, easily adaptable to other EVM networks, ETH, ARB, etc.
- 📤 Send Transactions: Easy-to-use interface for sending POL to other wallets
- 💰 Real-time Balance: Live balance updates from the blockchain
- 🔑 Wallet Management: Export and restore wallets using private keys
- React Native - Cross-platform mobile framework
- Expo SDK 53+ - Development and build toolchain
- Ethers.js v6 - Ethereum/Polygon blockchain interaction
- NativeWind v4 - Tailwind CSS for React Native
- TypeScript - Type-safe development
- Expo Secure Store - Secure key storage
- Expo Local Authentication - Biometric authentication
The app features three main screens:
- Wallet Screen: View balance and manage wallet settings
- Send Screen: Send POL to other addresses
- Transactions Screen: View transaction history (coming soon)
- Node.js 18+ and npm
- Expo CLI (
npm install -g expo-cli) - iOS Simulator (Mac only) or Android Emulator
- Expo Go app on your physical device (optional)
- Clone the repository:
git clone https://github.com/yourusername/ReactNativeWallet.git
cd ReactNativeWallet- Install dependencies:
npm install- Create API keys configuration:
# Create config/api-keys.ts (this file is gitignored)
cat > config/api-keys.ts << EOF
export const API_KEYS = {
ANKR_API_KEY: 'your_ankr_api_key_here',
};
EOF- Start the development server:
npm start
# or
npx expo start- Run on your device:
- Press
ifor iOS simulator - Press
afor Android emulator - Scan QR code with Expo Go app for physical device
The app uses a modular service architecture with inheritance:
BaseService (Abstract)
├── AuthenticationService - Biometric/passcode authentication
├── StorageService - Secure storage operations
├── BlockchainService - Blockchain interactions
└── WalletManagerService - Orchestrates all wallet operations
- GlassCard: Glassmorphic card component with blur effects
- Button: Custom button with multiple variants
- Input: Styled input component with glass variant
- Title: Typography component with consistent styling
- Private keys never leave the device
- Biometric authentication required for sensitive operations
- Secure storage using platform-specific keychains
- No telemetry or analytics tracking
The app features a custom glassmorphic design system:
- Glass Cards: Semi-transparent cards with backdrop blur
- Monochrome Icons: Geometric symbols (◈, ⬡, ⟠, etc.)
- Custom Backgrounds: Blurred and darkened images for each screen
- White Text Theme: Consistent white text for readability
ReactNativeWallet/
├── app/ # Expo Router screens
│ ├── (tabs)/ # Tab navigation screens
│ │ ├── index.tsx # Wallet/Home screen
│ │ ├── send.tsx # Send transaction screen
│ │ └── transactions.tsx # Transaction history
│ └── _layout.tsx # Root layout
├── services/ # Business logic services
│ ├── base/ # Base service classes
│ ├── AuthenticationService.ts
│ ├── StorageService.ts
│ ├── BlockchainService.ts
│ └── WalletManagerService.ts
├── components/ # Reusable UI components
│ └── ui/ # Design system components
├── contexts/ # React contexts
│ └── WalletContext.tsx
├── config/ # Configuration files
│ ├── rpc-endpoints.ts
│ └── api-keys.ts # (gitignored)
└── assets/ # Images and fonts
└── images/ # Background images
npm start- Start Expo development servernpm run ios- Run on iOS simulatornpm run android- Run on Android emulatornpm run lint- Run ESLint
The app uses the following environment configurations:
- Network: Polygon Mainnet (Chain ID: 137)
- RPC Provider: Ankr (requires API key)
- Native Token: POL
# iOS
eas build --platform ios
# Android
eas build --platform android- Never commit API keys - Use gitignored config files
- Private key management - Keys are encrypted in secure storage
- Biometric protection - Required for wallet access
- Network security - HTTPS only for RPC connections
MIT License - See LICENSE file for details
Contributions are welcome! Please feel free to submit a Pull Request.
This is a demonstration wallet application. Always conduct thorough security audits before using in production with real funds.
For issues and questions, please open a GitHub issue.
Built with ❤️ using React Native and Expo