ERC / EIP standards in stablecoins
Deep reference for EVM deployments in scope: USDT, USDC, USDe, DAI, USDS, FDUSD, PYUSD, FRAX, TUSD, and USD1 — ERC-20 surface, typed data (EIP-712), permit (EIP-2612), authorizations (EIP-3009), proxies (EIP-1967 / EIP-1822), vaults (ERC-4626), and contract signatures (EIP-1271). Use the matrix for a glance; expand sections for function lists, type hashes, and integration footguns. Some entries are chain-specific (e.g. BNB vs Ethereum); always verify the deployment you integrate.
Comparison matrix
Rows are standards from the master registry; columns follow static rank order. Click any row to scroll to that standard in the deep dive below. Hover a cell for a one-line developer impact note.
| Standard | USDT | USDC | USDe | DAI | USDS | FDUSD | PYUSD | FRAX | TUSD | USD1 |
|---|---|---|---|---|---|---|---|---|---|---|
ERC-20 Fungible token standard | ||||||||||
EIP-712 Typed structured data signing | ||||||||||
EIP-1271 Signature validation for smart contracts | ||||||||||
EIP-1822 UUPS — universal upgradeable proxy | ||||||||||
EIP-1967 Standard proxy storage slots | ||||||||||
EIP-2612 Permit — gasless ERC-20 approval | ||||||||||
EIP-3009 transferWithAuthorization | ||||||||||
ERC-4626 Tokenized yield vault standard |
- Implemented
- Partial
- Not implemented
- Unknown
Standards deep dive
Core
ERC-20 — Fungible token standard
eips.ethereum.org →Base interface for all fungible tokens — transfer, approve, allowance, balanceOf, totalSupply
Signatures & typed data
EIP-712 — Typed structured data signing
eips.ethereum.org →Domain-separated typed message signing that binds signatures to a specific contract and chain ID, preventing cross-chain and cross-contract replay attacks
Not implemented for EIP-712. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-712. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-712. Same as an empty profile row unless you verify this deployment on-chain.
EIP-2612 — Permit — gasless ERC-20 approval
eips.ethereum.org →Adds permit() to ERC-20 — users sign an approval off-chain, relayer submits on-chain. Eliminates the separate approve() transaction in DeFi flows
Not implemented for EIP-2612. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-2612. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-2612. Same as an empty profile row unless you verify this deployment on-chain.
EIP-3009 — transferWithAuthorization
eips.ethereum.org →Signed atomic transfer (not just approval) with random bytes32 nonces — enables concurrent authorizations and single-transaction gasless payments
Not implemented for EIP-3009. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-3009. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-3009. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-3009. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-3009. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-3009. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-3009. Same as an empty profile row unless you verify this deployment on-chain.
EIP-1271 — Signature validation for smart contracts
eips.ethereum.org →isValidSignature() lets smart contract wallets (Safe multisig, Argent, AA wallets) verify signatures — enables permit flows for contracts, not just EOAs
Not implemented for EIP-1271. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-1271. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-1271. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-1271. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-1271. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-1271. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-1271. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-1271. Same as an empty profile row unless you verify this deployment on-chain.
Upgradeability & proxies
EIP-1967 — Standard proxy storage slots
eips.ethereum.org →Standardises where proxy contracts store the implementation and admin addresses, enabling Etherscan and tooling to auto-detect proxies
Not implemented for EIP-1967. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-1967. Same as an empty profile row unless you verify this deployment on-chain.
EIP-1822 — UUPS — universal upgradeable proxy
eips.ethereum.org →Upgrade logic lives in the implementation contract rather than the proxy. Cheaper to deploy than transparent proxies and easier to audit
Not implemented for EIP-1822. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-1822. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-1822. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-1822. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-1822. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for EIP-1822. Same as an empty profile row unless you verify this deployment on-chain.
Vaults & yield
ERC-4626 — Tokenized yield vault standard
eips.ethereum.org →Standard interface for yield-bearing vaults: deposit, withdraw, mint, redeem, convertToShares, convertToAssets. Any ERC-4626-aware protocol integrates automatically
Not implemented for ERC-4626. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for ERC-4626. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for ERC-4626. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for ERC-4626. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for ERC-4626. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for ERC-4626. Same as an empty profile row unless you verify this deployment on-chain.
Not implemented for ERC-4626. Same as an empty profile row unless you verify this deployment on-chain.