Crypto & SEPA Payment QR Codes: BIP-21, EIP-681 & Security Risks
2026-07-31
Understanding Payment URI Standards
Payment QR codes encode specific Uniform Resource Identifiers (URIs) that trigger wallet or banking apps. Unlike static data links, these URIs contain structured parameters for amount, label, and destination address. The syntax varies significantly by blockchain network or payment protocol, requiring precise formatting to ensure successful transaction processing.
Bitcoin and BIP-21 Implementation
For Bitcoin transactions, the industry standard is BIP-21. This URI scheme allows merchants to embed the recipient address, amount in satoshis or BTC, and optional labels. A typical payload looks like this:
bitcoin:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa?amount=0.001&label=Invoice%20#123
When scanned, a compliant wallet parses the address and pre-fills the amount field. This reduces user error and speeds up checkout. Tools like web3qr generate these payloads client-side, ensuring no private keys or transaction data leave your device during creation.
Ethereum EIP-681 and Solana Pay
Ethereum uses EIP-681 for smart contract interactions and token transfers. The URI structure is more complex, supporting method calls:
ethereum:0xdD87...?transfer=0x1234&value=1000000000000000000
Solana Pay utilizes a different approach, often encoding the destination address and amount in a compact format optimized for mobile scanning. It supports SPL tokens natively, allowing merchants to accept USDC or other stablecoins directly via QR scan without manual address entry.
SEPA Transfers with EPC069-12
For fiat payments in Europe, the EPC069-12 standard enables instant bank transfers. The QR code contains a structured text block including IBAN, BIC, amount, and creditor reference. This format is widely adopted by European banks for point-of-sale transactions.
Key components include: - IBAN: The recipient’s bank account number. - BIC: Bank identifier code. - Amount: Fixed or variable depending on merchant settings. - Creditor Reference: Unique invoice ID for reconciliation.
Scanning this QR opens the user’s banking app with all fields pre-populated, reducing friction compared to manual entry.
PayPal.me and Legacy Systems
PayPal offers a simpler URI scheme via paypal.me. The payload is straightforward:
https://www.paypal.me/username/amount
This links directly to the user’s PayPal account, bypassing complex blockchain protocols. While less secure than crypto URIs due to centralization, it remains popular for small businesses and freelancers seeking easy integration.
Address Verification Before Scan
A critical security step is verifying the encoded address matches the intended recipient. Users should: - Cross-check the first and last characters of the displayed address. - Use trusted wallets that highlight mismatched addresses in red. - Avoid scanning codes from unverified sources.
Many modern wallets display a warning if the URI contains unexpected parameters or malformed data.
Risks of QR Substitution Attacks
Publicly displayed payment QR codes are vulnerable to substitution attacks. Malicious actors may overlay a new QR code with their own address, diverting funds. To mitigate this: - Use tamper-evident stickers over printed codes. - Verify the merchant’s identity through secondary channels. - Prefer dynamic QR codes that refresh periodically.
Always inspect the physical integrity of the QR code before scanning. If it appears altered or covered by a sticker, do not proceed with the payment.