QR code type
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.
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.