Payment QRs Payment-URI shapes that a crypto wallet scanner should handle — BIP-21 (Bitcoin), EIP-681 (Ethereum), Solana Pay, plus rejection tests. Each card lists the expected on-device behaviour under the QR.
Only the highlighted QR is scannable. Click any other card to make it active and blur the rest.
1 Plain BTC bech32 bc1qf2lx2fjtpvdhzy0jfvknqs0hl2e0zwqttcm2lt → Lands on send screen, network locked to Bitcoin, recipient pre-filled. 2 Plain Solana base58 GZNGdvR3jBM3rnXprp2RMgArtP8VGvimpAi5xLNTuixB → Lands with network = Solana. 3 Plain EVM (no chain context) 0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe → Lands with network field empty / selectable. 4 BIP-21 with amount bitcoin:bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh?amount=0.0001 → BTC, network locked, amount pre-filled. 5 EIP-681 native ETH ethereum:0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe?value=1000000000000000000 → ETH on Ethereum, amount = 1. 6 Solana Pay solana:GZNGdvR3jBM3rnXprp2RMgArtP8VGvimpAi5xLNTuixB?amount=0.5 → Solana, amount = 0.5. 7 BIP-21 with label bitcoin:bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh?amount=0.0001&label=Alice%20Cafe → BTC, amount pre-filled. Recipient is the bech32 address only — the label is dropped from the recipient field. 8 EIP-681 ERC-20 transfer (USDC) ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/transfer?address=0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe&uint256=1000000 → Recipient = the 0x address in the `address` query param (not the token contract). Amount = 1 USDC (uint256 / 10^6). 9 EIP-681 with @chain_id (Polygon USDC) ethereum:0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359@137/transfer?address=0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe&uint256=1000000 → Either routes to Polygon (preferred) or shows 'not supported' inline. Silent fallback to Ethereum mainnet is a bug — confirm chain-id handling. 10 WalletConnect URI — rejection test wc:abc123def4567890@1?bridge=https%3A%2F%2Fbridge.walletconnect.org&key=deadbeef → Scanner rejects inline. No transaction state altered. No navigation away from the scanner. 11 Garbage QR — rejection test hello world not a uri 12345 → Scanner rejects inline with a parse-error message. No transaction state altered. No navigation.