Skip to content

Repository files navigation

ESM Wallet 🚀

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.


🌟 Key Features

  • 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.

🛠 Tech Stack & Tools

  • 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)

🔍 Deep Technical Insights

🔐 Manual BIP-44 Derivation (The "Hard Way")

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 deriveBip44Key function 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.

🛡️ Secure Key Management

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.

🏛️ Clean Architecture & SOLID

The project is strictly organized into three layers:

  1. Data: Handles API calls (Etherscan, Alchemy), Database (Room), and Wallet storage.
  2. Domain: Contains pure business logic and Use Cases (e.g., SendEthUseCase, GetEthBalanceUseCase).
  3. Presentation: A reactive UI layer where ViewModels interact with Use Cases and expose state via StateFlow.

📸 Screenshots (Coming Soon)

Home Screen Send Assets Import Wallet
Home Send Import

🚀 Getting Started

  1. Clone the repository:
    git clone https://github.com/your-username/ESM-Wallet.git
  2. Add API Keys: Create a local.properties file 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
  3. Build and Run: Open in Android Studio and run on an emulator or physical device.

👨‍💻 About the Developer

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.


📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

About

A modern Android crypto wallet built with Jetpack Compose and Clean Architecture, exploring Account Abstraction (EIP-4337) and advanced Web3 functionalities.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages