Add internal functions inside modifiers (#4472)
Co-authored-by: Ernesto García <ernestognw@gmail.com> Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com> Co-authored-by: Francisco <fg@frang.io>
This commit is contained in:
@ -138,10 +138,17 @@ abstract contract Initializable {
|
||||
* {initializer} and {reinitializer} modifiers, directly or indirectly.
|
||||
*/
|
||||
modifier onlyInitializing() {
|
||||
_checkInitializing();
|
||||
_;
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.
|
||||
*/
|
||||
function _checkInitializing() internal view virtual {
|
||||
if (!_initializing) {
|
||||
revert NotInitializing();
|
||||
}
|
||||
_;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -48,12 +48,7 @@ abstract contract UUPSUpgradeable is IERC1822Proxiable {
|
||||
* fail.
|
||||
*/
|
||||
modifier onlyProxy() {
|
||||
if (
|
||||
address(this) == __self || // Must be called through delegatecall
|
||||
ERC1967Utils.getImplementation() != __self // Must be called through an active proxy
|
||||
) {
|
||||
revert UUPSUnauthorizedCallContext();
|
||||
}
|
||||
_checkProxy();
|
||||
_;
|
||||
}
|
||||
|
||||
@ -62,10 +57,7 @@ abstract contract UUPSUpgradeable is IERC1822Proxiable {
|
||||
* callable on the implementing contract but not through proxies.
|
||||
*/
|
||||
modifier notDelegated() {
|
||||
if (address(this) != __self) {
|
||||
// Must not be called through delegatecall
|
||||
revert UUPSUnauthorizedCallContext();
|
||||
}
|
||||
_checkNotDelegated();
|
||||
_;
|
||||
}
|
||||
|
||||
@ -96,6 +88,31 @@ abstract contract UUPSUpgradeable is IERC1822Proxiable {
|
||||
_upgradeToAndCallUUPS(newImplementation, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Reverts if the execution is not performed via delegatecall or the execution
|
||||
* context is not of a proxy with an ERC1967-compliant implementation pointing to self.
|
||||
* See {_onlyProxy}.
|
||||
*/
|
||||
function _checkProxy() internal view virtual {
|
||||
if (
|
||||
address(this) == __self || // Must be called through delegatecall
|
||||
ERC1967Utils.getImplementation() != __self // Must be called through an active proxy
|
||||
) {
|
||||
revert UUPSUnauthorizedCallContext();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Reverts if the execution is performed via delegatecall.
|
||||
* See {notDelegated}.
|
||||
*/
|
||||
function _checkNotDelegated() internal view virtual {
|
||||
if (address(this) != __self) {
|
||||
// Must not be called through delegatecall
|
||||
revert UUPSUnauthorizedCallContext();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by
|
||||
* {upgradeToAndCall}.
|
||||
|
||||
Reference in New Issue
Block a user