Francisco Giordano 951e946e71 Add a beacon proxy contract (#2411) %!s(int64=4) %!d(string=hai) anos
..
BeaconProxy.sol 951e946e71 Add a beacon proxy contract (#2411) %!s(int64=4) %!d(string=hai) anos
IBeacon.sol 951e946e71 Add a beacon proxy contract (#2411) %!s(int64=4) %!d(string=hai) anos
Initializable.sol 90ed1af972 Support compiling with solc 0.7 (#2408) %!s(int64=4) %!d(string=hai) anos
Proxy.sol 90ed1af972 Support compiling with solc 0.7 (#2408) %!s(int64=4) %!d(string=hai) anos
ProxyAdmin.sol 90ed1af972 Support compiling with solc 0.7 (#2408) %!s(int64=4) %!d(string=hai) anos
README.adoc 951e946e71 Add a beacon proxy contract (#2411) %!s(int64=4) %!d(string=hai) anos
TransparentUpgradeableProxy.sol 90ed1af972 Support compiling with solc 0.7 (#2408) %!s(int64=4) %!d(string=hai) anos
UpgradeableBeacon.sol 951e946e71 Add a beacon proxy contract (#2411) %!s(int64=4) %!d(string=hai) anos
UpgradeableProxy.sol 90ed1af972 Support compiling with solc 0.7 (#2408) %!s(int64=4) %!d(string=hai) anos

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 <>. 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}}