ESM Wallet is a high-performance, secure, and non-custodial Ethereum wallet for Android. Built with the latest Android technologies, it demonstrates deep integration with the Ethereum blockchain, custom cryptographic implementations, and modern architectural patterns.
- Wallet Management: Create new BIP-39 compliant wallets or import existing ones using a 12/24-word mnemonic phrase.
- Deep Blockchain Integration: Full support for ETH and ERC-20 token transfers.
- Custom Token Support: Add and track custom ERC-20 tokens by contract address.
- Transaction History: Real-time transaction tracking via Etherscan API integration.
- Security First: Industry-standard encryption for private key storage.
- Modern UI: Fully built with Jetpack Compose for a reactive and fluid user experience.
- Language: Kotlin
- UI Framework: Jetpack Compose
- Concurrency: Kotlin Coroutines & StateFlow
- Architecture: Clean Architecture (Data, Domain, Presentation) + MVVM
- Blockchain Interface: Web3j
- Cryptography: Bouncy Castle (Manual BIP-44 Derivation)
- Networking: Retrofit & OkHttp
- Local Storage:
- Room Database: For storing custom token metadata.
- Encrypted DataStore: Securely storing private keys using Android Keystore System (AES-256).
- Dependency Injection: Manual DI (Hilt implementation in progress)
Unlike many wallets that rely on high-level libraries, ESM Wallet implements the BIP-44/BIP-32 derivation path logic manually using Bouncy Castle.
- Challenge: Correctly implementing the secp256k1 elliptic curve derivation for Ethereum (path
m/44'/60'/0'/0/0). - Solution: Developed a robust
deriveBip44Keyfunction that handles master key generation, hardened derivation, and child key derivation from a BIP-39 seed. This demonstrates a deep understanding of cryptographic principles beyond simple API usage.
Private keys are never stored in plain text. By utilizing Jetpack Security (EncryptedDataStore), the app ensures that sensitive data is encrypted at the hardware level. This makes the wallet resilient against rooted device vulnerabilities and data leakage.
The project is strictly organized into three layers:
- Data: Handles API calls (Etherscan, Alchemy), Database (Room), and Wallet storage.
- Domain: Contains pure business logic and Use Cases (e.g.,
SendEthUseCase,GetEthBalanceUseCase). - Presentation: A reactive UI layer where ViewModels interact with Use Cases and expose state via
StateFlow.
| Home Screen | Send Assets | Import Wallet |
|---|---|---|
- Clone the repository:
git clone https://github.com/your-username/ESM-Wallet.git
- Add API Keys:
Create a
local.propertiesfile in the root directory and add your keys:ETHERSCAN_API_KEY=your_etherscan_key ALCHEMY_NODE_URL=your_alchemy_url_sepolia ALCHEMY_NODE_URL_MAINNET=your_alchemy_url_mainnet
- Build and Run: Open in Android Studio and run on an emulator or physical device.
I am a passionate Android Developer focused on Blockchain, Security, and Modern UI. I enjoy solving complex problems that lie at the intersection of cryptography and mobile user experience.
- LinkedIn: Esmaeeil Moradi
- Email: esmaeeilmoradi700@gmail.com
This project is licensed under the MIT License - see the LICENSE file for details.