ERC-681: Representing various transactions as URLs

:credit_card: 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:

  1. Merchant enters amount
  2. User taps their phone on the NFC device
  3. Phone opens wallet with a pre-filled transaction
  4. User taps “Confirm” → done

To achieve this, we want to encode ethereum: payment URIs (EIP-681) into NFC tags.

:fire: 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?


:cross_mark: Root Cause

  1. No ABI context — Wallets don’t know how to encode calldata without knowing parameter types.
  2. No standard ABI discovery — There’s no canonical way for a wallet to fetch a contract’s ABI.
  3. Wallet safety concerns — Guessing types is dangerous, so most wallets opt to ignore.

:white_check_mark: 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.


:repeat_button: Sample Flow

  1. NFC tag encodes:

    ethereum:0xABC123/transfer?address=0xDEF456&uint256=1.23
    
  2. Wallet calls:

    scriptURI("0xa9059cbb")
    
  3. URI returns JSON:

    {
      "name": "transfer",
      "inputs": [
        { "name": "to", "type": "address" },
        { "name": "value", "type": "uint256" }
      ]
    }
    
  4. Wallet builds calldata, user confirms, done.


:light_bulb: 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

:megaphone: 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.

2 Likes