How it works
AirWallet's two modes, the hardened AirWallet Offline build, the QR signing loop step by step, balances on the offline device, animated codes and watch-only wallets.
One app, two modes
AirWallet is one app per platform. Its first screen asks how this device will be used:
- Everyday wallet: "Online: balances, receive, send, swap. It can also prepare payments for an offline device to sign."
- Offline signer: "For a spare phone or laptop that never goes online again: it keeps the keys and signs by QR code. AirWallet makes no connection in this mode."
The app shows the difference side by side:
| Everyday wallet | Offline signer | |
|---|---|---|
| Connects to the internet | Yes: to public servers (your own, in Settings) | Never |
| Holds keys | Only of wallets made or imported on it | Yes: it's where they live |
| Signs | Sends of its own wallets | Everything its wallets send |
| Balances | Live, from the networks | As the everyday device's codes report them |
| Reachable by an attacker | Through the internet, like any app | Only through what you scan into it |
| Between the two | QR codes, nothing else | QR codes, nothing else |
In Offline signer mode the app refuses every connection. On a Mac or a Linux computer, the operating system blocks it too, from the app's next start (macOS's sandbox, Linux's seccomp). On Android, the lock is the app's own, because the AirWallet app has the internet permission.
Switching modes later
- Open Settings and tap the line that names this device and its mode, for example This phone: everyday wallet… or This computer: offline signer…
- Tap Use this phone as the offline signer… (or …as the everyday wallet…).
- Confirm with Use it as offline signer (or Use it as everyday wallet).
Your wallets stay as they are either way: both modes use the same wallets. On a computer, AirWallet may ask you to close it and open it again to finish the switch.
Switching an offline signer that holds keys back to an everyday wallet shows a warning first: once the device goes online, those keys are no longer air-gapped. The button then reads Go online anyway. To keep the keys offline, leave this device as the signer and use AirWallet on another device as your everyday wallet.
AirWallet Offline: the hardened build
AirWallet Offline is a separate app for the offline device. It has no mode to switch, and it can't connect at all:
- Android: the app has no internet permission, so Android itself refuses it every connection, even with Wi-Fi on.
- Mac and Linux: a network guard built into the app refuses every connection, and the operating system's lock (macOS's sandbox, Linux's seccomp) backs it up.
- Windows: the guard built into the app refuses every connection. For Windows Firewall to block it too, run Block network (admin) once (see Keeping the offline device offline).
- Chrome: the AirWallet Offline extension has no network permission, and Chrome enforces that. It turns a Chromebook, or any computer with Chrome, into a signer.
On any offline copy, Settings → This phone: offline signer… (or This computer…, This browser…) opens a page that explains why this device can't connect, with a Try to connect button that shows both of the app's ways out being refused.
The QR loop, step by step
A payment from a wallet whose keys are on the offline device goes like this:
- Prepare, on the everyday device. Open the watched wallet and tap Send (or Offline → New transaction). Fill in the recipient and the amount, then Create code. A QR code appears.
- Scan, on the offline device. Tap Scan and hold the camera up to the code.
- Check, on the offline device. It shows the full recipient address, the amount, the fee and any warnings, worked out from the transaction itself. This is the screen to trust: a hacked online device could have changed what it prepared.
- Sign, on the offline device. Tap Sign. Signing sends nothing; the offline device shows the signed transaction as a QR code.
- Scan back, on the everyday device. Tap Scan signed code and hold its camera up to the offline device's screen.
- Send, on the everyday device. It shows what the signed transaction does. Tap Send.
Each coin has its own details:
- Bitcoin and Ethereum need the offline wallet watched on the everyday device first: the everyday device needs its coins (Bitcoin) or its transaction count (Ethereum).
- Ethereum: the offline device builds the transaction itself from the fields it shows you, so what it shows is what it signs. It signs payments and token transfers, and refuses calls it can't show.
- Solana: the code renews itself every 15 seconds, and a signed Solana payment is good for about a minute. If it expires, nothing is sent: do it again.
- Monero: the first send from a watched wallet takes one extra round, so the everyday device can learn which coins are already spent. After that it's one round every time. See Your first offline payment.
- Zcash: one round. The everyday device makes the zero-knowledge proofs while you check and sign on the offline device.
For the full walkthrough, see Your first offline payment.
Balances on the offline device
The offline device never sees a blockchain, so it relies on your everyday device to tell it what its wallets hold:
- Every code the everyday device shows for signing also carries a snapshot of balances.
- To send balances alone, tap Offline → Sync balances on the everyday device, then Scan that code on the offline device. It covers every watched wallet, and how the offline device's recent sends went.
The offline device then shows its balances with a note such as "As of 14:02, as your online wallet reported". Until a sync, it shows No balances yet. Payments it has signed show under Pending, and are taken off the balance (amount and fee) until a later code reports them sent.
These balances are for display only. What the offline device signs never depends on them, though its review warns you if a payment looks like one you already signed, or is more than the wallet had.
Animated codes
A code too big for one QR code (a Zcash send, for example) is shown as an animated code: a loop of frames.
- Hold the camera steady on it until it's read. A frame the camera misses doesn't have to come round again: a few more of any frames make up for it.
- Tap a code to enlarge it. For AirWallet's own animated codes, the enlarged view offers Bigger dots, slower, for a camera that struggles with dense codes.
- The screen stays on while a code is shown or the camera is scanning; on Android it also goes to full brightness while a code shows. The camera view has a light button when the camera has a light.
Update both devices together: an older copy can't read the animated codes a newer one makes, and says so rather than misreading them.
Watch-only wallets
A watch-only wallet is one whose keys are elsewhere. Your everyday device shows its balances and history and prepares payments for it, but can't spend from it on its own. You add one in either of these ways:
- From your offline device: on the offline device, open the wallet → Receive → Show to my online wallet; on the everyday device, tap Watch my offline wallet (or + → Watch an address) and scan the code. See Set up an offline signer.
- From an address or another device: + → Watch an address takes a Solana, Bitcoin or Ethereum address, or the account QR code of a hardware wallet such as a Keystone, SeedSigner, Jade or Passport.
Monero and Zcash are private, so an address alone shows nothing. To show their balances, the everyday device needs the wallet's view key, which lets it see payments but never spend them.
AirWallet Online
airwallet.tech/online is a watch-only web page version of the everyday wallet. It holds no keys: you watch your offline wallet, see balances, prepare payments as QR codes and send what the offline device signed, all in a web page, with no app needed. You can also install it as an app from the browser. See AirWallet Online.
AirWallet