Skip to main content

ProxyUpgradeable

ProxyUpgradeable

This abstract contract provides a fallback function that delegates all calls to another contract using the EVM instruction delegatecall. We refer to the second contract as the implementation behind the proxy, and it has to be specified by overriding the virtual {_implementation} function.

Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a different contract through the {_delegate} function.

The success and return data of the delegated call will be returned back to the caller of the proxy.

_delegate

function _delegate(address implementation) internal virtual

Delegates the current call to implementation.

This function does not return to its internal call site, it will return directly to the external caller.

_implementation

function _implementation() internal view virtual returns (address)

This is a virtual function that should be overridden so it returns the address to which the fallback function and {_fallback} should delegate.

_fallback

function _fallback() internal virtual

Delegates the current call to the address returned by _implementation().

This function does not return to its internal call site, it will return directly to the external caller.

fallback

fallback() external payable virtual

Fallback function that delegates calls to the address returned by _implementation(). Will run if no other function in the contract matches the call data.

_beforeFallback

function _beforeFallback() internal virtual

Hook that is called before falling back to the implementation. Can happen as part of a manual _fallback call, or as part of the Solidity fallback or receive functions.

If overridden should call super._beforeFallback().