In‑person payments
ERC‑681’s most compelling UX is physical-world payments: a static QR code or NFC tag that opens a wallet with a pre-filled transaction.
- Merchant enters amount
- User scans QR or taps NFC
- Wallet opens with a pre-filled transaction request
- User confirms (authenticated) and sends
This is conceptually similar to mailto: or tel: deep links — and it’s why ERC‑681 is worth reviving.
The safest cross-wallet baseline is a native transfer with optional value=… (wei) and optional @chainId.
ethereum:0xYourMerchantAddress@1?value=0.01e18中文:面对面支付建议优先用「原生币转账」做 MVP(最少 ABI 风险、最多钱包能跑通)。
ERC‑20 transfers and general contract calls are where adoption fragments. A link like:
ethereum:0xToken/transfer?address=0xRecipient&uint256=1e6…requires the wallet to safely construct calldata and present a clear signing UI. Without a standard ABI discovery mechanism, wallets often avoid this to reduce blind-signing risk.
Practical consequence: even if the URI scheme launches the wallet, advanced parameters may be ignored or misinterpreted. That’s why the adoption matrix matters.
An NFC tag can store a URI in an NDEF record. In theory, encoding an ethereum:… URI enables “tap-to-open wallet”.
In practice, the UX depends on OS behavior + which wallets register URL handlers, and many wallets don’t advertise NFC-first payment flows yet.
If you’re building POS/NFC flows, focus on:
- Native transfers first (broad compatibility)
- Explicit chainId handling
- Clear signing UX and anti-phishing protections
- Fallback paths (e.g., WalletConnect) for complex actions