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

UnsafeUpgrades

Library for managing upgradeable contracts from Forge tests, without validations. Can be used with forge coverage. Requires implementation contracts to be instantiated first. Does not require --ffi and does not require a clean compilation before each run. Not supported for OpenZeppelin Defender deployments. WARNING: Not recommended for use in Forge scripts. UnsafeUpgrades does not validate whether your contracts are upgrade safe or whether new implementations are compatible with previous ones. Use Upgrades if you want validations to be run. NOTE: Only for upgrading existing deployments using OpenZeppelin Contracts v4. For new deployments, use OpenZeppelin Contracts v5 and Upgrades.sol.

Functions

upgradeProxy

Upgrades a proxy to a new implementation contract address. Only supported for UUPS or transparent proxies.

function upgradeProxy(address proxy, address newImpl, bytes memory data) internal;

Parameters

NameTypeDescription
proxyaddressAddress of the proxy to upgrade
newImpladdressAddress of the new implementation contract to upgrade to
databytesEncoded call data of an arbitrary function to call during the upgrade process, or empty if no function needs to be called during the upgrade

upgradeProxy

For tests only. If broadcasting in scripts, use the --sender <ADDRESS> option with forge script instead.

Upgrades a proxy to a new implementation contract address. Only supported for UUPS or transparent proxies. This function provides an additional tryCaller parameter to test an upgrade using a specific caller address. Use this if you encounter OwnableUnauthorizedAccount errors in your tests.

function upgradeProxy(address proxy, address newImpl, bytes memory data, address tryCaller) internal;

Parameters

NameTypeDescription
proxyaddressAddress of the proxy to upgrade
newImpladdressAddress of the new implementation contract to upgrade to
databytesEncoded call data of an arbitrary function to call during the upgrade process, or empty if no function needs to be called during the upgrade
tryCalleraddressAddress to use as the caller of the upgrade function. This should be the address that owns the proxy or its ProxyAdmin.

upgradeBeacon

Upgrades a beacon to a new implementation contract address.

function upgradeBeacon(address beacon, address newImpl) internal;

Parameters

NameTypeDescription
beaconaddressAddress of the beacon to upgrade
newImpladdressAddress of the new implementation contract to upgrade to

upgradeBeacon

For tests only. If broadcasting in scripts, use the --sender <ADDRESS> option with forge script instead.

Upgrades a beacon to a new implementation contract address. This function provides an additional tryCaller parameter to test an upgrade using a specific caller address. Use this if you encounter OwnableUnauthorizedAccount errors in your tests.

function upgradeBeacon(address beacon, address newImpl, address tryCaller) internal;

Parameters

NameTypeDescription
beaconaddressAddress of the beacon to upgrade
newImpladdressAddress of the new implementation contract to upgrade to
tryCalleraddressAddress to use as the caller of the upgrade function. This should be the address that owns the beacon.

getAdminAddress

Gets the admin address of a transparent proxy from its ERC1967 admin storage slot.

function getAdminAddress(address proxy) internal view returns (address);

Parameters

NameTypeDescription
proxyaddressAddress of a transparent proxy

Returns

NameTypeDescription
<none>addressAdmin address

getImplementationAddress

Gets the implementation address of a transparent or UUPS proxy from its ERC1967 implementation storage slot.

function getImplementationAddress(address proxy) internal view returns (address);

Parameters

NameTypeDescription
proxyaddressAddress of a transparent or UUPS proxy

Returns

NameTypeDescription
<none>addressImplementation address

getBeaconAddress

Gets the beacon address of a beacon proxy from its ERC1967 beacon storage slot.

function getBeaconAddress(address proxy) internal view returns (address);

Parameters

NameTypeDescription
proxyaddressAddress of a beacon proxy

Returns

NameTypeDescription
<none>addressBeacon address