Making ethereum:
URIs Actually Work: Proposal for ABI Discovery via ERC-5169 / 7738
We’re working on crypto-native NFC payment flows—think “Apple Pay for crypto.”
The ideal UX looks like this:
- Merchant enters amount
- User taps their phone on the NFC device
- Phone opens wallet with a pre-filled transaction
- User taps “Confirm” → done
To achieve this, we want to encode ethereum:
payment URIs (EIP-681) into NFC tags.
The Problem
While native token transfers work fine using ?value=...
, smart contract calls break across nearly all major wallets (MetaMask, Rainbow, Trust, Coinbase Wallet, etc).
Example URI:
ethereum:0xABC123/transfer?address=0xDEF456&uint256=1.23
This silently fails or gets ignored. Why?
Root Cause
- No ABI context — Wallets don’t know how to encode calldata without knowing parameter types.
- No standard ABI discovery — There’s no canonical way for a wallet to fetch a contract’s ABI.
- Wallet safety concerns — Guessing types is dangerous, so most wallets opt to ignore.
Proposed Solution: ABI Discovery via scriptURI
We propose using ERC-5169 or ERC-7738 to let contracts expose ABI metadata to wallets.
Example:
function scriptURI(bytes4 selector) external view returns (string memory);
Wallets could:
- Query
scriptURI()
on the contract
- Fetch the ABI from the returned URI
- Parse the URI params using that ABI
- Construct a valid
data
field and submit the transaction
This restores the original vision of EIP-681—linking wallets, NFC devices, QR codes, and POS terminals in a seamless, standardized way.
Sample Flow
-
NFC tag encodes:
ethereum:0xABC123/transfer?address=0xDEF456&uint256=1.23
-
Wallet calls:
scriptURI("0xa9059cbb")
-
URI returns JSON:
{
"name": "transfer",
"inputs": [
{ "name": "to", "type": "address" },
{ "name": "value", "type": "uint256" }
]
}
-
Wallet builds calldata, user confirms, done.
Why this matters
If we want crypto to reach real-world adoption (cafés, transit, vending machines), we must:
- Make URI-triggered smart contract interactions reliable
- Avoid requiring dApps or custom flows
- Empower POS hardware with standards-compliant, low-cost NFC/QR workflows
Call to Action
We’re calling on:
- Wallet developers
- ERC-681 / URI standards contributors
- Smart token and TokenScript builders
- Mobile UX & NFC ecosystem folks
Let’s collaborate on a lightweight, secure, standardized ABI-discovery flow so that ethereum:
URIs can actually fulfill their promise.
Thoughts, feedback, or interest in prototyping with us? We’d love to hear from you.