mirror of openzeppelin-contracts
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
openzeppelin-contracts/contracts/proxy
Francisco Giordano 951e946e71
Add a beacon proxy contract (#2411)
4 years ago
..
BeaconProxy.sol Add a beacon proxy contract (#2411) 4 years ago
IBeacon.sol Add a beacon proxy contract (#2411) 4 years ago
Initializable.sol Support compiling with solc 0.7 (#2408) 4 years ago
Proxy.sol Support compiling with solc 0.7 (#2408) 4 years ago
ProxyAdmin.sol Support compiling with solc 0.7 (#2408) 4 years ago
README.adoc Add a beacon proxy contract (#2411) 4 years ago
TransparentUpgradeableProxy.sol Support compiling with solc 0.7 (#2408) 4 years ago
UpgradeableBeacon.sol Add a beacon proxy contract (#2411) 4 years ago
UpgradeableProxy.sol Support compiling with solc 0.7 (#2408) 4 years ago

README.adoc

= Proxies

[.readme-notice]
NOTE: This document is better viewed at https://docs.openzeppelin.com/contracts/api/proxy

This is a low-level set of contracts implementing the proxy pattern for upgradeability. For an in-depth overview of this pattern check out the xref:upgrades-plugins::proxies.adoc[Proxy Upgrade Pattern] page.

The abstract {Proxy} contract implements the core delegation functionality. If the concrete proxies that we provide below are not suitable, we encourage building on top of this base contract since it contains an assembly block that may be hard to get right.

Upgradeability is implemented in the {UpgradeableProxy} contract, although it provides only an internal upgrade interface. For an upgrade interface exposed externally to an admin, we provide {TransparentUpgradeableProxy}. Both of these contracts use the storage slots specified in https://eips.ethereum.org/EIPS/eip-1967[EIP1967] to avoid clashes with the storage of the implementation contract behind the proxy.

An alternative upgradeability mechanism is provided in <<UpgradeableBeacon>>. This pattern, popularized by Dharma, allows multiple proxies to be upgraded to a different implementation in a single transaction. In this pattern, the proxy contract doesn't hold the implementation address in storage like {UpgradeableProxy}, but the address of a {UpgradeableBeacon} contract, which is where the implementation address is actually stored and retrieved from. The `upgrade` operations that change the implementation contract address are then sent to the beacon instead of to the proxy contract, and all proxies that follow that beacon are automatically upgraded.

CAUTION: Using upgradeable proxies correctly and securely is a difficult task that requires deep knowledge of the proxy pattern, Solidity, and the EVM. Unless you want a lot of low level control, we recommend using the xref:upgrades-plugins::index.adoc[OpenZeppelin Upgrades Plugins] for Truffle and Buidler.

== Core

{{Proxy}}

{{UpgradeableProxy}}

{{TransparentUpgradeableProxy}}

== UpgradeableBeacon

{{BeaconProxy}}

{{IBeacon}}

{{UpgradeableBeacon}}

== Utilities

{{Initializable}}

{{ProxyAdmin}}