Skip to content

Commit 8512c8b

Browse files
authored
feat(upgrade): improve reusability of UpgradeExecutor (#417)
1 parent 0f6c753 commit 8512c8b

File tree

1 file changed

+22
-22
lines changed

1 file changed

+22
-22
lines changed

Diff for: script/foundry/utils/upgrades/UpgradeExecutor.s.sol

+22-22
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@ import { Script } from "forge-std/Script.sol";
77
import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
88
import { AccessManager } from "@openzeppelin/contracts/access/manager/AccessManager.sol";
99
import { AccessManaged } from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
10-
import { AccessController } from "contracts/access/AccessController.sol";
11-
import { ProtocolAdmin } from "contracts/lib/ProtocolAdmin.sol";
12-
import { IIPAssetRegistry } from "contracts/interfaces/registries/IIPAssetRegistry.sol";
13-
import { IVaultController } from "contracts/interfaces/modules/royalty/policies/IVaultController.sol";
10+
11+
// contracts
12+
import { ProtocolAdmin } from "../../../../contracts/lib/ProtocolAdmin.sol";
13+
import { IIPAssetRegistry } from "../../../../contracts/interfaces/registries/IIPAssetRegistry.sol";
14+
import { IVaultController } from "../../../../contracts/interfaces/modules/royalty/policies/IVaultController.sol";
1415

1516
// script
1617
import { BroadcastManager } from "../BroadcastManager.s.sol";
@@ -28,7 +29,6 @@ import { StorageLayoutChecker } from "./StorageLayoutCheck.s.sol";
2829
*/
2930
abstract contract UpgradeExecutor is Script, BroadcastManager, JsonDeploymentHandler, JsonBatchTxHelper {
3031
address internal CREATE3_DEPLOYER = 0x9fBB3DF7C40Da2e5A0dE984fFE2CCB7C47cd0ABf;
31-
uint256 internal CREATE3_DEFAULT_SEED = 0;
3232

3333
/// @notice Upgrade modes
3434
enum UpgradeModes {
@@ -58,19 +58,6 @@ abstract contract UpgradeExecutor is Script, BroadcastManager, JsonDeploymentHan
5858
/// @notice action accumulator for batch txs
5959
bytes[] multicallData;
6060

61-
/// @dev check if the proxy's authority is the accessManager in the file
62-
/// @param proxy The proxy address
63-
modifier onlyMatchingAccessManager(string memory contractKey, address proxy) {
64-
if (keccak256(abi.encodePacked(contractKey)) != keccak256(abi.encodePacked("IpRoyaltyVault")) &&
65-
keccak256(abi.encodePacked(contractKey)) != keccak256(abi.encodePacked("IPAccountImplCode"))) {
66-
require(
67-
AccessManaged(proxy).authority() == address(accessManager),
68-
"Proxy's Authority must equal accessManager"
69-
);
70-
}
71-
_;
72-
}
73-
7461
/// @dev check if the caller has the Upgrader role
7562
modifier onlyUpgraderRole() {
7663
(bool isMember, ) = accessManager.hasRole(ProtocolAdmin.UPGRADER_ROLE, deployer);
@@ -156,7 +143,8 @@ abstract contract UpgradeExecutor is Script, BroadcastManager, JsonDeploymentHan
156143
function _scheduleUpgrade(
157144
string memory key,
158145
UpgradedImplHelper.UpgradeProposal memory p
159-
) private onlyMatchingAccessManager(key, p.proxy) onlyUpgraderRole {
146+
) private {
147+
_checkMatchingAccessManager(key, p.proxy);
160148
bytes memory data = _getExecutionData(key, p);
161149
if (data.length == 0) {
162150
revert("No data to schedule");
@@ -199,7 +187,8 @@ abstract contract UpgradeExecutor is Script, BroadcastManager, JsonDeploymentHan
199187
function _executeUpgrade(
200188
string memory key,
201189
UpgradedImplHelper.UpgradeProposal memory p
202-
) private onlyMatchingAccessManager(key,p.proxy) {
190+
) private {
191+
_checkMatchingAccessManager(key, p.proxy);
203192
bytes memory data = _getExecutionData(key, p);
204193
uint48 schedule = accessManager.getSchedule(accessManager.hashOperation(deployer, p.proxy, data));
205194
console2.log("schedule", schedule);
@@ -236,7 +225,8 @@ abstract contract UpgradeExecutor is Script, BroadcastManager, JsonDeploymentHan
236225
function _cancelScheduledUpgrade(
237226
string memory key,
238227
UpgradedImplHelper.UpgradeProposal memory p
239-
) private onlyMatchingAccessManager(key, p.proxy) {
228+
) private {
229+
_checkMatchingAccessManager(key, p.proxy);
240230
bytes memory data = _getExecutionData(key, p);
241231
if (data.length == 0) {
242232
revert("No data to schedule");
@@ -272,7 +262,7 @@ abstract contract UpgradeExecutor is Script, BroadcastManager, JsonDeploymentHan
272262
function _getExecutionData(
273263
string memory key,
274264
UpgradedImplHelper.UpgradeProposal memory p
275-
) internal returns (bytes memory data) {
265+
) internal virtual returns (bytes memory data) {
276266
if (keccak256(abi.encodePacked(key)) == keccak256(abi.encodePacked("IpRoyaltyVault"))) {
277267
console2.log("encoding upgradeVaults");
278268
data = abi.encodeCall(IVaultController.upgradeVaults, (p.newImpl));
@@ -285,4 +275,14 @@ abstract contract UpgradeExecutor is Script, BroadcastManager, JsonDeploymentHan
285275
}
286276
return data;
287277
}
278+
279+
function _checkMatchingAccessManager(string memory contractKey, address proxy) virtual internal {
280+
if (keccak256(abi.encodePacked(contractKey)) != keccak256(abi.encodePacked("IpRoyaltyVault")) &&
281+
keccak256(abi.encodePacked(contractKey)) != keccak256(abi.encodePacked("IPAccountImplCode"))) {
282+
require(
283+
AccessManaged(proxy).authority() == address(accessManager),
284+
"Proxy's Authority must equal accessManager"
285+
);
286+
}
287+
}
288288
}

0 commit comments

Comments
 (0)