Improve code comments in ERC1967._upgradeToAndCallSecure

(cherry picked from commit 2e6ef74593)
release-v4.1
Francisco Giordano 4 years ago
parent df7996b671
commit a664fb1e45
  1. 14
      contracts/proxy/ERC1967/ERC1967Upgrade.sol

@ -61,16 +61,17 @@ abstract contract ERC1967Upgrade is ERC1967Storage {
*/
function _upgradeToAndCallSecure(address newImplementation, bytes memory data, bool forceCall) internal {
address oldImplementation = _getImplementation();
// do inital upgrade
// Initial upgrade and setup call
_setImplementation(newImplementation);
// do setup call
if (data.length > 0 || forceCall) {
Address.functionDelegateCall(newImplementation, data);
}
// check if nested in an upgrade check
// Perform rollback test if not already in progress
StorageSlot.BooleanSlot storage rollbackTesting = StorageSlot.getBooleanSlot(_ROLLBACK_SLOT);
if (!rollbackTesting.value) {
// trigger upgrade check with flag set to true
// Trigger rollback using upgradeTo from the new implementation
rollbackTesting.value = true;
Address.functionDelegateCall(
newImplementation,
@ -80,11 +81,10 @@ abstract contract ERC1967Upgrade is ERC1967Storage {
)
);
rollbackTesting.value = false;
// check upgrade was effective
// Check rollback was effective
require(oldImplementation == _getImplementation(), "ERC1967Upgrade: upgrade breaks further upgrades");
// reset upgrade
// Finally reset to the new implementation and log the upgrade
_setImplementation(newImplementation);
// emit event
emit Upgraded(newImplementation);
}
}

Loading…
Cancel
Save