ERC-1967
A standard for upgradeable smart contracts using proxy patterns and transparent storage slots.
Last Updated
2026-03-29
Related Concepts
What is ERC-1967?
ERC-1967 is a standard for "upgradeable" smart contracts that uses a proxy pattern. It provides a structured way to separate a contract's storage from its logic, allowing developers to update a contract's code without changing its address or losing its data.
How does ERC-1967 work?
- A "Proxy" contract is deployed to hold the project's data and state.
- An "Implementation" contract is deployed to hold the logic/code.
- The Proxy uses delegatecall to forward all user interactions to the Implementation.
ERC-1967specifies exact storage slots to store the Implementation's address, preventing "storage collisions."- To upgrade, the administrator simply updates the Implementation address stored in the Proxy's designated slot.
Why does ERC-1967 matter?
Standard smart contracts are immutable and cannot be changed after deployment. ERC-1967 allows projects to fix critical bugs or add new features while maintaining the same contract address for users and external integrations, significantly improving the maintainability of complex dApps.
Key features of ERC-1967
- Enables code upgrades on immutable blockchains
- Prevents storage collisions via standardized slots
- Maintains a constant contract address
- Separates logic (code) from state (data)
- Foundation for "Transparent" and "UUPS" proxy patterns
Examples of ERC-1967
Many major DeFi protocols like Aave and Uniswap use upgradeable proxy patterns. OpenZeppelin provides standard libraries that implement ERC-1967 to ensure developers can upgrade their contracts safely and reliably.
