Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ERC1967Proxy

Git Source

Inherits: Proxy

This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn’t conflict with the storage layout of the implementation behind the proxy.

Functions

constructor

Initializes the upgradeable proxy with an initial implementation specified by implementation. If _data is nonempty, it’s used as data in a delegate call to implementation. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements:

  • If data is empty, msg.value must be zero.
constructor(address implementation, bytes memory _data) payable;

_implementation

Returns the current implementation address. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[eth_getStorageAt] RPC call. 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc

function _implementation() internal view virtual override returns (address);