Written by Pablo Gómez
Founder & CEO at Metlabs · Reviewed on October 11, 2026
EIP-1967 computes its slots as keccak256 of a label minus one, so they are unpredictable to the compiler and never assigned to a normal variable. It defines three concrete, durable slots: implementation, derived from "eip1967.proxy.implementation"; admin, from "eip1967.proxy.admin"; and beacon, from "eip1967.proxy.beacon". By placing this metadata outside the ordinary storage range, it avoids the classic storage-collision problem, a serious vulnerability where the implementation address overwrote a logic-contract variable.
It matters because, beyond security, the slots are public and standardized. That lets explorers such as Etherscan, audit tools and wallets automatically detect that a contract is a proxy and read its implementation and admin. That is why it is a constant reference in audits of upgradeable contracts.
The reference implementation is OpenZeppelin's `ERC1967Proxy` and `ERC1967Utils`, the basis of the Transparent Proxy and UUPS (ERC-1822) patterns. Practically every protocol with upgradeable contracts uses it; for example, Circle's USDC is a proxy that follows this slot pattern. It is worth contrasting with ERC-1167: that is a minimal, non-upgradeable proxy that does not use these slots, whereas EIP-1967 is the core of the upgradeable pattern.
Also known as
- ERC1967
- Proxy Storage Slots





