Skip to content
All projects
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.

Three Henry Wallet screens side by side: home, review before signing, and the sent confirmation
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

Henry Wallet — ArchitectureYour phoneYouHenry WalletBalance · send · receive · scanSecure storageRecovery phrase · Face IDSQLitePayment historyBlockchainsPolygon · Ethereum · AvalancheFace IDBalances · signed payments
Keys, signing and payment history stay on the phone. Only balance lookups and signed payments go out to the network.

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
The welcome screen: keys only on this device, Face ID for every signature, and everything checked before sending
Home on Polygon Amoy: USDC and JPYC balances, POL for fees with about 71 transfers left, and sent payments
Sending 25 USDC: the amount on a number pad, and the address passing the checksum check
Review before signing: both full addresses, 5 of 5 checks passed, and the expected and maximum fee
Sent: signed on the device, sent to the network and included in a block, with the actual fee next to the estimate
Receive: the address as a QR code, with a reminder to ask for Polygon Amoy

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