# Ethereum QR codes — the EIP-681 URI explained

> An Ethereum QR code stores an EIP-681 URI with the recipient address and optionally a chain id and value in wei. Simple address-only codes work everywhere; the richer forms — token transfers and contract calls — are supported inconsistently, so test with the wallets your audience actually uses.

Source: https://useqr.app/ethereum-qr-code · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## The payload

Simple transfer:

```
ethereum:0x1234...abcd@1?value=1e18
```

ERC-20 token transfer:

```
ethereum:0xTokenContract@1/transfer?address=0xRecipient&uint256=1e6
```

| Part | Meaning |
|---|---|
| `@1` | Chain id — 1 is mainnet, 137 Polygon, 42161 Arbitrum, 8453 Base |
| `value` | Amount in **wei**; `1e18` is 1 ETH |
| `/transfer` | Contract function to call |
| `uint256` | Token amount in the token's smallest unit |

## Wei, and the scientific notation that saves you

Values are in wei — 10^18 wei to the ether. Writing `value=1` sends one wei, effectively
nothing. EIP-681 permits scientific notation, so `1e18` is one ether and `2.5e17` is
0.25 ether. Use it; a literal 19-digit integer is both error-prone and adds modules.

## The chain id is not optional in practice

Omit `@1` and a multi-chain wallet has to guess. Sending mainnet USDC to an address on
the wrong network is a common and usually unrecoverable mistake. Always include the
chain id, and print the network name in text next to the code.

## Support is genuinely uneven

- **Address-only** (`ethereum:0x…`): universal.
- **With value**: widely supported.
- **ERC-20 `/transfer`**: MetaMask and several others honour it; many wallets ignore
  the function and open a plain send screen.
- **Arbitrary contract calls**: rarely supported from a scanned QR code, and rightly
  treated with suspicion.

If your audience uses a specific wallet, test on it before printing. Otherwise stick to
the address-only form and let the payer choose asset and amount.

## Safety

Same rules as Bitcoin, plus one: a QR code that triggers a *contract call* is a real
attack surface. Approving an unlimited token allowance takes one confirmation and
drains a wallet later. Never scan a contract-call QR code from an untrusted source, and
never ask your customers to.

## FAQ

### What units is the value in?
Wei. There are 10^18 wei in one ether, so one ether is value=1e18. EIP-681 allows scientific notation, which is far safer than typing nineteen digits.

### Do I need to include the chain id?
Yes, in practice. Without it a multi-chain wallet has to guess the network, and sending on the wrong chain is usually unrecoverable. Print the network name in text as well.

### Do ERC-20 token transfer QR codes work?
Inconsistently. MetaMask and some others honour the /transfer form; many wallets ignore it and open a plain send screen. Test with the wallets your audience uses.

### Are contract-call QR codes safe to scan?
Treat them as dangerous from any untrusted source. A single confirmation can grant an unlimited token allowance that is drained later.

## Try it

- https://useqr.app/ethereum
- https://useqr.app/bitcoin
