Keycard Pal 1.15.0: ERC-7730 clear signing in an air-gapped Keycard app
Keycard Pal is an open-source (MIT) Android and iOS app that works as an air-gapped signer with your Keycard. Your software wallet shows a QR code, Keycard Pal shows what you are about to sign, and the Keycard signs it with a tap.
1.15.0 adds clear signing. Instead of a function selector and raw arguments, the review says what a contract call or EIP-712 message does ("Stake ETH", "Repay loan", "Authorize spending of token") and labels every field: amounts with their token, addresses checksummed, dates readable.
How it works
- The descriptions come from the ERC-7730 clear-signing registry (github.com/ethereum/clear-signing-erc7730-registry). A snapshot ships in the app, so it works without a network. The Offline build has no internet permission at all.
- A description is used only when the chain, contract and function (or the EIP-712 domain and type) match. Otherwise the app falls back to its own decoding.
- Each review says whether an auditor reviewed the description, from the ERC-8176 attestations in the registry (Cyfrin, for now). Unreviewed descriptions still show, marked "Not reviewed by an auditor".
- Settings can import a newer registry zip. The online build can also download one; that is off until you turn it on.
Dapps to try it with: Uniswap (Permit2, UniswapX orders), 1inch, ParaSwap, KyberSwap and LI.FI swaps, Aave, Morpho, Lido, Safe, WETH, USDC transfer authorizations, and 60+ other projects in the registry.
What it can't do: where a description expects a name the app cannot know offline, such as an address book entry or an NFT collection name, you see the checksummed address or the token ID instead.
Get it
- Android: Google Play, GitHub releases or our F-Droid repo, all linked from keycardpal.com. Release APKs are reproducible.
- iOS: coming soon.
Source and issues: mmlado/keycard-pal. Feedback welcome.
How it is built
Keycard Pal is developed with substantial help from AI coding assistants (Claude and Codex). I decide what gets built, read and test what goes in, and maintain it myself. What keeps that honest is in the repository: a Jest suite of about 3,150 tests that runs on every pull request, 16 architecture decision records explaining why things are the way they are, a check that the offline build carries no online code, and release APKs that anyone can rebuild byte for byte. Fixes that belonged upstream were sent upstream, to keycard-sdk and to the React Native Keycard bridge. Every release is tested on real Keycards and real phones before it ships.
4 points · 3 comments
Mentions
👀 Ctrl+C; Ctrl+V Clear signing registry? 👀 ethereum/clear-signing-erc7730-registry
@kutluhaneth In the end its all up to each wallet. The descriptors are in the github registry ethereum/clear-signing-erc7730-registry with few attestations at the moment. We also have an SDK that can be taken as a reference implementation. sourcifyeth/clear-signing To our experience so far wallets prefer implementing their own SDKs
@0xDmitry @Morpho @WalletChan_ @trueo pls get it listed on this registry! github.com/ethereum/clear-signing-erc7730-registr…
Keycard Pal 1.15.0: ERC-7730 clear signing in an air-gapped Keycard app Keycard Pal is an open-source (MIT) Android and iOS app that works as an air-gapped signer with your Keycard. Your software wallet shows a QR code, Keycard Pal shows what you are about to sign, and the Keycard signs it with a tap. 1.15.0 adds clear signing. Instead of a function selector and raw arguments, the review says what a contract call or EIP-712 message does ("Stake ETH", "Repay loan", "Authorize spending of token") and labels every field: amounts with their token, addresses checksummed, dates readable. How it works - The descriptions come from the ERC-7730 clear-signing registry (github.com/ethereum/clear-signing-erc7730-registry). A snapshot ships in the app, so it works without a network. The Offline build has no internet permission at all. - A description is used only when the chain, contract and function (or the EIP-712 domain and type) match. Otherwise the app falls back to its own decoding. - Each review says whether an auditor reviewed the description, from the ERC-8176 attestations in the registry (Cyfrin, for now). Unreviewed descriptions still show, marked "Not reviewed by an auditor". - Settings can import a newer registry zip. The online build can also download one; that is off until you turn it on. Dapps to try it with: Uniswap (Permit2, UniswapX orders), 1inch, ParaSwap, KyberSwap and LI.FI swaps, Aave, Morpho, Lido, Safe, WETH, USDC transfer authorizations, and 60+ other projects in the registry. What it can't do: where a description expects a name the app cannot know offline, such as an address book entry or an NFT collection name, you see the checksummed address or the token ID instead. Get it - Android: Google Play, GitHub releases or our F-Droid repo, all linked from keycardpal.com. Release APKs are reproducible. - iOS: coming soon. Source and issues: mmlado/keycard-pal. Feedback welcome. How it is built Keycard Pal is developed with substantial help from AI coding assistants (Claude and Codex). I decide what gets built, read and test what goes in, and maintain it myself. What keeps that honest is in the repository: a Jest suite of about 3,150 tests that runs on every pull request, 16 architecture decision records explaining why things are the way they are, a check that the offline build carries no online code, and release APKs that anyone can rebuild byte for byte. Fixes that belonged upstream were sent upstream, to keycard-sdk and to the React Native Keycard bridge. Every release is tested on real Keycards and real phones before it ships.