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.
ERC681‑Terminal is an ERC‑20 payment terminal (native Android and iOS apps plus reusable, keyless read-only SDKs) built on exactly this flow: the cashier enters an amount, the terminal presents a canonical ERC‑681 QR code, and payment is observed via read-only JSON‑RPC.
- Unique one-time receiver per invoice, derived locally with CREATE2
- ERC‑20 transfer QR payments only — no arbitrary contract calls
- Settlement restricted to a single whitelisted vault method, signed by a device-local operator wallet
It’s a working demonstration that the “scan → confirm → done” model is buildable today with a strict safety boundary.
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