Testing · Side project
Henry Wallet
Holds and sends USDC and JPYC on Polygon, Ethereum and Avalanche. The recovery phrase stays in the phone's secure storage, and every payment is shown in full on one screen before you approve it with Face ID.

- Type
- iPhone app (Expo) · KO / EN
- Period
- Oct 2026
- Networks
- Polygon · Ethereum · Avalanche, testnets first
- Runs on
- Only on the phone · no server
About
It handles two coins: USDC and JPYC.
There's no server. Everything from creating the wallet to signing happens on the phone, and the only thing that leaves it is the signed payment. The features stay narrow: send, receive and check balances, with no swaps.
What it does
- Create or import
- Make a new 12-word phrase on the phone, or bring in one you already have. A new wallet asks for three random words from the phrase before it's ready.
- Face ID on every payment
- The phrase is kept in the iOS Keychain for this device only, and it can only be read after Face ID. The private key is never saved; it's derived for each signature.
- One review screen
- The amount, the network, both full addresses, the results of the five checks and the expected and maximum fee, all before signing. The EIP-1559 transaction details are one tap away.
- Stopped before signing
- A bad checksum, a token's contract address or too little gas is caught before the Face ID prompt. A first-time recipient gets a reminder to match the first and last four characters.
- Balances at a glance
- USDC and JPYC, plus roughly how many more transfers the POL fee balance covers.
- Follow each payment
- Signed on the device, sent to the network, included in a block, with times, the nonce and the actual fee next to the estimate. Pending, failed and dropped payments are still tracked after a restart.
- Receive and scan
- Address and QR code with a reminder to use the right network. The scanner reads plain addresses and EIP-681 links, and refuses requests for another chain.
Architecture
How it's built
- App
- Expo SDK 58 · React Native 0.88 · TypeScript · Expo Router · Zustand
- Wallet
- ethers v6 · BIP-39 · EIP-1559 · ERC-20 (USDC, JPYC)
- Storage
- expo-secure-store (Keychain, Face ID) · expo-sqlite
- Device
- expo-camera · expo-screen-capture · react-native-qrcode-svg
- Networks
- Polygon · Ethereum · Avalanche C-Chain · testnets (Amoy, Sepolia, Fuji) · public RPC
- Testing
- jest-expo (amount, address, key derivation) · ESLint · Prettier · GitHub Actions
- Demo
- react-native-web · in-memory stubs for storage, keys and RPC






Experimental and unaudited. I only use it on test networks and with small amounts. The screenshots are from the web demo with sample data.