EIP and ERC are two of the most used acronyms in Ethereum development, and two of the most often confused. This guide explains how they relate, how a proposal moves from idea to final standard, which standards you meet in almost every codebase, and where implementing them goes wrong.
EIP and ERC in One Minute
An Ethereum Improvement Proposal, or EIP, is a design document that proposes something for Ethereum: a protocol change, a networking change, a process change, or a standard that applications can follow. It is the formal way the community writes down a proposal, its rationale, and its specification.
An Ethereum Request for Comments, or ERC, is one category of EIP: the Standards Track proposals that define application-level conventions. ERC-20 tokens, ERC-721 NFTs, ERC-1155 multi-tokens, and ERC-4626 vaults are all ERCs. They do not change how Ethereum nodes behave. They define interfaces that contracts, wallets, and applications agree to follow.
So every ERC is an EIP, but most EIPs are not ERCs. EIP-1559, which changed how transaction fees work, is a Core EIP that every node had to implement in a network upgrade. ERC-20 is a standard that nothing forces anyone to adopt, yet almost every token does.
EIP Types and Categories
EIP-1, the living document that defines the process, describes three types of proposals. The Standards Track type is further divided into four categories, one of which is ERC.
| Type or category | What it covers | Example |
|---|---|---|
| Standards Track: Core | Changes that require a consensus fork or affect client behavior | EIP-1559 fee market, EIP-4844 blobs, EIP-7702 set code for EOAs |
| Standards Track: Networking | Peer-to-peer and network protocol improvements | EIP-8 devp2p forward compatibility |
| Standards Track: Interface | Client API and RPC specifications, and language-level standards | EIP-712 typed structured data signing |
| Standards Track: ERC | Application-level standards and conventions | ERC-20, ERC-721, ERC-1155, ERC-4626, ERC-2612 |
| Meta | Processes and procedures around Ethereum | EIP-1, EIP-7329 repository split |
| Informational | Design issues and guidelines without a new feature | Guidance that implementers are free to ignore |
How a Proposal Moves From Idea to Final
A proposal usually starts as an idea discussed with the community before anything is written formally. Once it is properly formatted and merged by an editor, it is tracked as a Draft. The author then requests peer Review, the proposal enters a final Last Call window, and if it survives, it becomes Final.
Three other statuses matter when you read a proposal. Stagnant applies to proposals in Draft, Review, or Last Call that have been inactive for six months or more. Withdrawn means the authors abandoned the proposal and its number cannot be reused. Living is reserved for documents meant to be updated continuously, such as EIP-1 itself.
EIP editors check that proposals are complete and correctly formatted; EIP-1 states that they do not pass judgment on the ideas themselves. Whether a Core EIP ships is decided by client developers through network upgrades. Whether an ERC matters is decided by adoption.
Only Final proposals have stable requirements. Building on a Draft means accepting that its interface may still change.
Why ERCs Now Live in Their Own Repository
For years, every proposal lived in one repository. In 2023, EIP-7329 split ERCs into a separate repository so that application standards and core protocol work could evolve at their own pace. ERCs are now maintained in the ethereum/ERCs repository and published at ercs.ethereum.org, while core and process proposals remain at eips.ethereum.org.
The numbering is shared, which is why you still see both EIP-20 and ERC-20 used for the same token standard. In practice, ERC is the conventional name for application standards and EIP for everything else.
Standards Developers and Auditors Meet Every Day
A small number of proposals appear in almost every codebase or affect how almost every contract behaves. Knowing what each one promises, and what it does not, is the difference between integrating a standard and merely calling its functions.
| Proposal | Category | What it defines | Typical review focus |
|---|---|---|---|
| ERC-20 | ERC | Fungible token interface | Return values, decimals, fee-on-transfer and rebasing tokens |
| ERC-721 | ERC | Non-fungible token interface | Safe transfer callbacks and reentrancy |
| ERC-1155 | ERC | Multi-token interface with batch operations | Receiver callbacks, batch accounting |
| ERC-4626 | ERC | Tokenized vault interface | Rounding direction, share inflation, preview functions |
| ERC-2612 | ERC | Signed approvals through permit | Nonces, deadlines, front-run permits |
| EIP-712 | Interface | Typed structured data hashing and signing | Domain separator, chain ID, replay |
| EIP-1153 | Core | Transient storage opcodes | Values persisting across calls within a transaction |
| EIP-7702 | Core | Code delegation for externally owned accounts | Assumptions that an address has no code |
Where Implementing Standards Goes Wrong
Standards remove ambiguity about interfaces, but they leave plenty of room for unsafe implementations and unsafe assumptions. These are the patterns auditors check most often.
ERC-20: not every token behaves like the standard
Some widely used tokens return nothing from transfer and approve, some charge a fee on transfer, some rebase balances, and some revert when changing a non-zero allowance to another non-zero value. A protocol that assumes the received amount equals the requested amount, or that every call returns true, can break or lose funds when such a token is listed. Use a safe-transfer wrapper and measure balances before and after transfers where it matters.
using SafeERC20 for IERC20;
uint256 before = token.balanceOf(address(this));
token.safeTransferFrom(msg.sender, address(this), amount);
uint256 received = token.balanceOf(address(this)) - before;
// credit the user with `received`, not `amount`
ERC-721 and ERC-1155: callbacks hand control to the receiver
Safe transfer functions call onERC721Received or onERC1155Received on the recipient. That callback is an external call into code the protocol does not control. If state is updated after the transfer, the receiver can reenter while the protocol is in an inconsistent state. Follow checks-effects-interactions and add reentrancy guards around flows that mint or transfer tokens.
ERC-4626: rounding rules are part of the standard
ERC-4626 tells implementers to favor the vault when rounding: round down when calculating the shares issued for a deposit or the assets returned for redeemed shares, and round up when calculating the shares a user must burn to withdraw a given amount or the assets a user must provide to mint a given number of shares. Getting a direction wrong, or letting the first depositor inflate the share price by donating assets, can let attackers extract value from later depositors. Virtual shares or an initial dead-share deposit are common defenses against inflation.
EIP-712 and ERC-2612: signatures must be bound to one context
A typed signature should be bound to a chain ID, a verifying contract, a nonce, and a deadline. Missing any of these can allow replay on another chain, against another deployment, or long after the user intended. Permit-based flows should also tolerate a permit that was already submitted by someone else, so a front-run signature cannot block the user's transaction.
EIP-1153 and EIP-7702: newer Core changes break old assumptions
Transient storage lasts for the whole transaction, not for a single call, so a value written by one call is still visible to later calls in the same transaction unless it is cleared. EIP-7702 lets an externally owned account delegate to contract code, so checks such as requiring an address to have no code, or treating tx.origin as a plain wallet, no longer prove that an address is a simple user account.
How Auditors Check Standards Compliance
Standards are written with RFC 2119 keywords: MUST, SHOULD, and MAY. Auditors check each MUST requirement against the implementation, note deviations from SHOULD requirements, and read the security considerations section of every standard the code implements or integrates. Integration review matters as much as implementation review, because a vault, lending market, or router usually depends on the behavior of tokens it did not write.
When a protocol intentionally deviates from a standard, the deviation should be documented, tested, and visible to integrators. Silent deviations are a common source of bugs in other people's code. Kann Audits Expert Security Audits review both sides: whether your contracts honor the standards they claim, and whether they stay safe when the contracts around them do not.
- List every standard implemented and every standard assumed of integrated contracts.
- Check MUST and SHOULD requirements, events, return values, and rounding rules.
- Test with non-standard tokens: fee-on-transfer, rebasing, missing return values, and unusual decimals.
- Bind every signature to chain, contract, nonce, and deadline.
- Revisit address and account assumptions after EIP-7702.
Questions About EIPs and ERCs
Short answers to the questions developers most often ask about Ethereum proposals and standards.
What is the difference between an EIP and an ERC?
An EIP (Ethereum Improvement Proposal) is any design document that proposes a change or a standard for Ethereum. An ERC (Ethereum Request for Comments) is the Standards Track category of EIPs that defines application-level conventions such as token interfaces and signing formats. Every ERC is a type of EIP, but most EIPs are not ERCs.
Is ERC-20 an EIP?
Yes. ERC-20 is a Standards Track proposal in the ERC category, so it is both an EIP and an ERC. Since the 2023 repository split, ERCs are maintained in their own repository and published at ercs.ethereum.org, while sharing the same proposal numbering.
Who approves EIPs?
EIP editors check that proposals are correctly formatted and complete; they do not judge whether an idea is good. Core EIPs are adopted when client developers include them in a network upgrade. ERCs become useful when wallets, applications, and libraries choose to implement them.
What does Final status mean for an EIP or ERC?
Final means the proposal represents the finished standard. A Final EIP should only be updated to correct errata or add non-normative clarifications, so implementers can rely on its requirements not changing.
Does following an ERC make a contract secure?
No. A standard defines an interface and expected behavior, not a safe implementation. Many vulnerabilities come from integrating tokens that deviate from a standard, misreading its rounding or callback rules, or relying on properties the standard never promised.
Why do auditors care about EIP and ERC compliance?
Other contracts, wallets, and protocols assume standard behavior. A deviation in return values, events, rounding direction, or callbacks can break every integration that relies on the standard, so auditors check the MUST and SHOULD requirements as well as the security considerations in each proposal.
Primary references
Sources and further reading
- EIP-1: EIP Purpose and Guidelines
- EIP-7329: ERC/EIP Repository Split
- Ethereum ERCs repository
- ERC-20: Token Standard
- ERC-721: Non-Fungible Token Standard
- ERC-1155: Multi Token Standard
- ERC-4626: Tokenized Vaults
- ERC-2612: Permit Extension for EIP-20 Signed Approvals
- EIP-712: Typed structured data hashing and signing
- EIP-1559: Fee market change
- EIP-1153: Transient storage opcodes
- EIP-4844: Shard Blob Transactions
- EIP-7702: Set Code for EOAs
