From d3d4a5ef708c57beedc7284caad9f4644eea7b0c Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 17 Apr 2025 17:54:46 +0800 Subject: [PATCH 01/29] refactor: IUpgradeExecutor --- src/UpgradeExecRouteBuilder.sol | 4 +- .../AIPArbOS40/SetArbOS40VersionAction.sol | 10 +++++ .../GovernanceChainSCMgmtActivationAction.sol | 8 +++- ...nGovernanceChainSCMgmtActivationAction.sol | 8 +++- .../SecurityCouncilMgmtUpgradeLib.sol | 16 +++++-- src/interfaces/IUpgradeExecutor.sol | 11 +++-- .../SecurityCouncilMemberElectionGovernor.sol | 1 + .../SecurityCouncilMemberRemovalGovernor.sol | 1 + ...SecurityCouncilNomineeElectionGovernor.sol | 20 ++++++--- test/UpgradeExecRouteBuilder.t.sol | 6 +-- .../NomineeGovernorV2UpgradeAction.t.sol | 2 +- .../SecurityCouncilManager.t.sol | 2 +- ...ecurityCouncilMemberElectionGovernor.t.sol | 4 +- ...curityCouncilNomineeElectionGovernor.t.sol | 45 +++++++++++-------- 14 files changed, 88 insertions(+), 50 deletions(-) create mode 100644 src/gov-action-contracts/AIPs/AIPArbOS40/SetArbOS40VersionAction.sol diff --git a/src/UpgradeExecRouteBuilder.sol b/src/UpgradeExecRouteBuilder.sol index b1f7f6ee1..cd8e75400 100644 --- a/src/UpgradeExecRouteBuilder.sol +++ b/src/UpgradeExecRouteBuilder.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.16; import "@arbitrum/nitro-contracts/src/precompiles/ArbSys.sol"; -import "./UpgradeExecutor.sol"; +import "./interfaces/IUpgradeExecutor.sol"; import "./L1ArbitrumTimelock.sol"; import "./security-council-mgmt/Common.sol"; @@ -136,7 +136,7 @@ contract UpgradeExecRouteBuilder { } bytes memory executorData = abi.encodeWithSelector( - UpgradeExecutor.execute.selector, actionAddresses[i], actionDatas[i] + IUpgradeExecutor.execute.selector, actionAddresses[i], actionDatas[i] ); // for L1, inbox is set to address(0): diff --git a/src/gov-action-contracts/AIPs/AIPArbOS40/SetArbOS40VersionAction.sol b/src/gov-action-contracts/AIPs/AIPArbOS40/SetArbOS40VersionAction.sol new file mode 100644 index 000000000..3e26da414 --- /dev/null +++ b/src/gov-action-contracts/AIPs/AIPArbOS40/SetArbOS40VersionAction.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.16; + +import "../../arbos-upgrade/UpgradeArbOSVersionAction.sol"; + +/// @notice Sets the ArbOS version to 40. To be run on an arbitrum chain +/// @dev Identical copies of this contract to be deployed on Arb One and Nova for ArbOS40 upgrades +contract SetArbOS40VersionAction is UpgradeArbOSVersionAction { + constructor() UpgradeArbOSVersionAction(uint64(40), uint64(1 weeks)) {} +} diff --git a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/GovernanceChainSCMgmtActivationAction.sol b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/GovernanceChainSCMgmtActivationAction.sol index 956ce437d..fe798894c 100644 --- a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/GovernanceChainSCMgmtActivationAction.sol +++ b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/GovernanceChainSCMgmtActivationAction.sol @@ -116,11 +116,15 @@ contract GovernanceChainSCMgmtActivationAction { // confirm updates bytes32 EXECUTOR_ROLE = upgradeExecutor.EXECUTOR_ROLE(); require( - upgradeExecutor.hasRole(EXECUTOR_ROLE, address(newEmergencySecurityCouncil)), + IAccessControlUpgradeable(address(upgradeExecutor)).hasRole( + EXECUTOR_ROLE, address(newEmergencySecurityCouncil) + ), "NonGovernanceChainSCMgmtActivationAction: new emergency security council not set" ); require( - !upgradeExecutor.hasRole(EXECUTOR_ROLE, address(prevEmergencySecurityCouncil)), + !IAccessControlUpgradeable(address(upgradeExecutor)).hasRole( + EXECUTOR_ROLE, address(prevEmergencySecurityCouncil) + ), "NonGovernanceChainSCMgmtActivationAction: prev emergency security council still set" ); diff --git a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/NonGovernanceChainSCMgmtActivationAction.sol b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/NonGovernanceChainSCMgmtActivationAction.sol index d3c48f057..6ff72348a 100644 --- a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/NonGovernanceChainSCMgmtActivationAction.sol +++ b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/NonGovernanceChainSCMgmtActivationAction.sol @@ -34,11 +34,15 @@ contract NonGovernanceChainSCMgmtActivationAction { // confirm updates bytes32 EXECUTOR_ROLE = upgradeExecutor.EXECUTOR_ROLE(); require( - upgradeExecutor.hasRole(EXECUTOR_ROLE, address(newEmergencySecurityCouncil)), + IAccessControlUpgradeable(address(upgradeExecutor)).hasRole( + EXECUTOR_ROLE, address(newEmergencySecurityCouncil) + ), "NonGovernanceChainSCMgmtActivationAction: new emergency security council not set" ); require( - !upgradeExecutor.hasRole(EXECUTOR_ROLE, address(prevEmergencySecurityCouncil)), + !IAccessControlUpgradeable(address(upgradeExecutor)).hasRole( + EXECUTOR_ROLE, address(prevEmergencySecurityCouncil) + ), "NonGovernanceChainSCMgmtActivationAction: prev emergency security council still set" ); } diff --git a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/SecurityCouncilMgmtUpgradeLib.sol b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/SecurityCouncilMgmtUpgradeLib.sol index d12c9212e..d306f1677 100644 --- a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/SecurityCouncilMgmtUpgradeLib.sol +++ b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/SecurityCouncilMgmtUpgradeLib.sol @@ -14,16 +14,24 @@ library SecurityCouncilMgmtUpgradeLib { requireSafesEquivalent(_prevSecurityCouncil, _newSecurityCouncil, _threshold); bytes32 EXECUTOR_ROLE = _upgradeExecutor.EXECUTOR_ROLE(); require( - _upgradeExecutor.hasRole(EXECUTOR_ROLE, address(_prevSecurityCouncil)), + IAccessControlUpgradeable(address(_upgradeExecutor)).hasRole( + EXECUTOR_ROLE, address(_prevSecurityCouncil) + ), "SecurityCouncilMgmtUpgradeLib: prev council not executor" ); require( - !_upgradeExecutor.hasRole(EXECUTOR_ROLE, address(_newSecurityCouncil)), + !IAccessControlUpgradeable(address(_upgradeExecutor)).hasRole( + EXECUTOR_ROLE, address(_newSecurityCouncil) + ), "SecurityCouncilMgmtUpgradeLib: new council already executor" ); - _upgradeExecutor.revokeRole(EXECUTOR_ROLE, address(_prevSecurityCouncil)); - _upgradeExecutor.grantRole(EXECUTOR_ROLE, address(_newSecurityCouncil)); + IAccessControlUpgradeable(address(_upgradeExecutor)).revokeRole( + EXECUTOR_ROLE, address(_prevSecurityCouncil) + ); + IAccessControlUpgradeable(address(_upgradeExecutor)).grantRole( + EXECUTOR_ROLE, address(_newSecurityCouncil) + ); } function requireSafesEquivalent( diff --git a/src/interfaces/IUpgradeExecutor.sol b/src/interfaces/IUpgradeExecutor.sol index e9f02416a..22f598911 100644 --- a/src/interfaces/IUpgradeExecutor.sol +++ b/src/interfaces/IUpgradeExecutor.sol @@ -3,8 +3,11 @@ pragma solidity 0.8.16; import "@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol"; -interface IUpgradeExecutor is IAccessControlUpgradeable { - function execute(address upgrade, bytes memory upgradeCallData) external; - function ADMIN_ROLE() external returns (bytes32); - function EXECUTOR_ROLE() external returns (bytes32); +// TODO: import from @offchainlabs/upgrade-executor@1.1.1 +interface IUpgradeExecutor { + function initialize(address admin, address[] memory executors) external; + function execute(address upgrade, bytes memory upgradeCallData) external payable; + function executeCall(address target, bytes memory targetCallData) external payable; + function ADMIN_ROLE() external view returns (bytes32); + function EXECUTOR_ROLE() external view returns (bytes32); } diff --git a/src/security-council-mgmt/governors/SecurityCouncilMemberElectionGovernor.sol b/src/security-council-mgmt/governors/SecurityCouncilMemberElectionGovernor.sol index 768792d3c..13edde4e4 100644 --- a/src/security-council-mgmt/governors/SecurityCouncilMemberElectionGovernor.sol +++ b/src/security-council-mgmt/governors/SecurityCouncilMemberElectionGovernor.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.16; +import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorVotesUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorSettingsUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; diff --git a/src/security-council-mgmt/governors/SecurityCouncilMemberRemovalGovernor.sol b/src/security-council-mgmt/governors/SecurityCouncilMemberRemovalGovernor.sol index 3c14d7445..812832d24 100644 --- a/src/security-council-mgmt/governors/SecurityCouncilMemberRemovalGovernor.sol +++ b/src/security-council-mgmt/governors/SecurityCouncilMemberRemovalGovernor.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.16; +import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorPreventLateQuorumUpgradeable.sol"; import diff --git a/src/security-council-mgmt/governors/SecurityCouncilNomineeElectionGovernor.sol b/src/security-council-mgmt/governors/SecurityCouncilNomineeElectionGovernor.sol index e1eba1a96..f660fa2d7 100644 --- a/src/security-council-mgmt/governors/SecurityCouncilNomineeElectionGovernor.sol +++ b/src/security-council-mgmt/governors/SecurityCouncilNomineeElectionGovernor.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.16; +import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorSettingsUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "../interfaces/ISecurityCouncilMemberElectionGovernor.sol"; @@ -429,11 +430,14 @@ contract SecurityCouncilNomineeElectionGovernor is } /// @notice Recover EIP712 signature for `AddContenderMessage` - function recoverAddContenderMessage(uint256 proposalId, bytes calldata signature) public view returns (address) { - bytes32 digest = _hashTypedDataV4(keccak256(abi.encode( - keccak256("AddContenderMessage(uint256 proposalId)"), - proposalId - ))); + function recoverAddContenderMessage(uint256 proposalId, bytes calldata signature) + public + view + returns (address) + { + bytes32 digest = _hashTypedDataV4( + keccak256(abi.encode(keccak256("AddContenderMessage(uint256 proposalId)"), proposalId)) + ); return ECDSAUpgradeable.recover(digest, signature); } @@ -490,10 +494,12 @@ contract SecurityCouncilNomineeElectionGovernor is } /// @notice Deprecated, use `addContender(uint256 proposalId, bytes calldata signature)` instead - /// @dev This function is deprecated because contenders should only be EOA's that can produce signatures. + /// @dev This function is deprecated because contenders should only be EOA's that can produce signatures. /// If a security council member's address is not an EOA, then they may be unable to sign on all relevant chains. function addContender(uint256) external pure { - revert Deprecated("addContender(uint256 proposalId) has been deprecated. Use addContender(uint256 proposalId, bytes calldata signature) instead"); + revert Deprecated( + "addContender(uint256 proposalId) has been deprecated. Use addContender(uint256 proposalId, bytes calldata signature) instead" + ); } /** diff --git a/test/UpgradeExecRouteBuilder.t.sol b/test/UpgradeExecRouteBuilder.t.sol index fb13667f3..cb8b8708f 100644 --- a/test/UpgradeExecRouteBuilder.t.sol +++ b/test/UpgradeExecRouteBuilder.t.sol @@ -27,11 +27,7 @@ contract UpgradeExecRouteBuilderTest is Test { }) }); - return new UpgradeExecRouteBuilder( - chainLocations, - l1TimelockAddress, - 259200 - ); + return new UpgradeExecRouteBuilder(chainLocations, l1TimelockAddress, 259_200); } // test that aip1.2 would have been created with the same call data if it had used diff --git a/test/gov-actions/NomineeGovernorV2UpgradeAction.t.sol b/test/gov-actions/NomineeGovernorV2UpgradeAction.t.sol index d4e5fdf34..e5c9f9548 100644 --- a/test/gov-actions/NomineeGovernorV2UpgradeAction.t.sol +++ b/test/gov-actions/NomineeGovernorV2UpgradeAction.t.sol @@ -10,7 +10,7 @@ contract NomineeGovernorV2UpgradeActionTest is Test { address oldImplementation = 0x8436A1bc9f9f9EB0cF1B51942C5657b60A40CCDD; SecurityCouncilNomineeElectionGovernor gov = SecurityCouncilNomineeElectionGovernor(payable(0x8a1cDA8dee421cD06023470608605934c16A05a0)); ProxyAdmin proxyAdmin = ProxyAdmin(0xdb216562328215E010F819B5aBe947bad4ca961e); - UpgradeExecutor arbOneUe = UpgradeExecutor(0xCF57572261c7c2BCF21ffD220ea7d1a27D40A827); + IUpgradeExecutor arbOneUe = IUpgradeExecutor(0xCF57572261c7c2BCF21ffD220ea7d1a27D40A827); address council = 0x423552c0F05baCCac5Bfa91C6dCF1dc53a0A1641; IArbitrumDAOConstitution constitution = IArbitrumDAOConstitution(0x1D62fFeB72e4c360CcBbacf7c965153b00260417); // see https://github.com/ArbitrumFoundation/docs/pull/731/commits/0837520dccc12e56a25f62de90ff9e3869196d05 diff --git a/test/security-council-mgmt/SecurityCouncilManager.t.sol b/test/security-council-mgmt/SecurityCouncilManager.t.sol index c68be6ce6..4e5da420b 100644 --- a/test/security-council-mgmt/SecurityCouncilManager.t.sol +++ b/test/security-council-mgmt/SecurityCouncilManager.t.sol @@ -109,7 +109,7 @@ contract SecurityCouncilManagerTest is Test { chainAndUpExecLocation.push(firstChainAndUpExecLocation); chainAndUpExecLocation.push(secondChainAndUpExecLocation); uerb = new UpgradeExecRouteBuilder({ - _upgradeExecutors:chainAndUpExecLocation, + _upgradeExecutors: chainAndUpExecLocation, _l1ArbitrumTimelock: l1ArbitrumTimelock, _l1TimelockMinDelay: l1TimelockMinDelay }); diff --git a/test/security-council-mgmt/governors/SecurityCouncilMemberElectionGovernor.t.sol b/test/security-council-mgmt/governors/SecurityCouncilMemberElectionGovernor.t.sol index eadef41e0..31007ea20 100644 --- a/test/security-council-mgmt/governors/SecurityCouncilMemberElectionGovernor.t.sol +++ b/test/security-council-mgmt/governors/SecurityCouncilMemberElectionGovernor.t.sol @@ -875,9 +875,7 @@ contract SecurityCouncilMemberElectionGovernorTest is Test { return SecurityCouncilMemberElectionGovernor( payable( new TransparentUpgradeableProxy( - address(new SecurityCouncilMemberElectionGovernor()), - proxyAdmin, - bytes("") + address(new SecurityCouncilMemberElectionGovernor()), proxyAdmin, bytes("") ) ) ); diff --git a/test/security-council-mgmt/governors/SecurityCouncilNomineeElectionGovernor.t.sol b/test/security-council-mgmt/governors/SecurityCouncilNomineeElectionGovernor.t.sol index a67dfd2df..7cb019024 100644 --- a/test/security-council-mgmt/governors/SecurityCouncilNomineeElectionGovernor.t.sol +++ b/test/security-council-mgmt/governors/SecurityCouncilNomineeElectionGovernor.t.sol @@ -13,45 +13,54 @@ import "../../../src/security-council-mgmt/Common.sol"; contract SigUtils is Test { bytes32 private constant _HASHED_NAME = keccak256("SecurityCouncilNomineeElectionGovernor"); bytes32 private constant _HASHED_VERSION = keccak256("1"); - bytes32 private constant _TYPE_HASH = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"); + bytes32 private constant _TYPE_HASH = keccak256( + "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" + ); address private immutable _VERIFIER; constructor(address verifier) { _VERIFIER = verifier; } - function signAddContenderMessage(uint256 proposalId, uint256 privKey) public view returns (bytes memory sig) { - bytes32 digest = _hashTypedDataV4(keccak256(abi.encode( - keccak256("AddContenderMessage(uint256 proposalId)"), - proposalId - ))); + function signAddContenderMessage(uint256 proposalId, uint256 privKey) + public + view + returns (bytes memory sig) + { + bytes32 digest = _hashTypedDataV4( + keccak256(abi.encode(keccak256("AddContenderMessage(uint256 proposalId)"), proposalId)) + ); (uint8 v, bytes32 r, bytes32 s) = vm.sign(privKey, digest); sig = abi.encodePacked(r, s, v); } + function _domainSeparatorV4() internal view returns (bytes32) { return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash()); } - function _buildDomainSeparator( - bytes32 typeHash, - bytes32 nameHash, - bytes32 versionHash - ) private view returns (bytes32) { + + function _buildDomainSeparator(bytes32 typeHash, bytes32 nameHash, bytes32 versionHash) + private + view + returns (bytes32) + { return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, _VERIFIER)); } + function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) { return ECDSAUpgradeable.toTypedDataHash(_domainSeparatorV4(), structHash); } - function _EIP712NameHash() internal virtual view returns (bytes32) { + + function _EIP712NameHash() internal view virtual returns (bytes32) { return _HASHED_NAME; } - function _EIP712VersionHash() internal virtual view returns (bytes32) { + + function _EIP712VersionHash() internal view virtual returns (bytes32) { return _HASHED_VERSION; } } - contract SecurityCouncilNomineeElectionGovernorTest is Test { SecurityCouncilNomineeElectionGovernor governor; @@ -65,7 +74,7 @@ contract SecurityCouncilNomineeElectionGovernorTest is Test { securityCouncilManager: ISecurityCouncilManager(address(0x22)), securityCouncilMemberElectionGovernor: ISecurityCouncilMemberElectionGovernor( payable(address(0x33)) - ), + ), token: IVotesUpgradeable(address(0x44)), owner: address(0x55), quorumNumeratorValue: 20, @@ -770,7 +779,7 @@ contract SecurityCouncilNomineeElectionGovernorTest is Test { vm.expectRevert( abi.encodeWithSelector(SecurityCouncilNomineeElectionGovernor.ProposeDisabled.selector) ); - governor.propose(new address[](1), new uint[](1), new bytes[](1), ""); + governor.propose(new address[](1), new uint256[](1), new bytes[](1), ""); } function testCastVoteReverts() public { @@ -949,9 +958,7 @@ contract SecurityCouncilNomineeElectionGovernorTest is Test { return SecurityCouncilNomineeElectionGovernor( payable( new TransparentUpgradeableProxy( - address(new SecurityCouncilNomineeElectionGovernor()), - proxyAdmin, - bytes("") + address(new SecurityCouncilNomineeElectionGovernor()), proxyAdmin, bytes("") ) ) ); From 861860c6cd498f70eec00e809704b9867ee01792 Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 17 Apr 2025 17:59:57 +0800 Subject: [PATCH 02/29] feat: createActionRouteData2 --- src/UpgradeExecRouteBuilder.sol | 51 ++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/src/UpgradeExecRouteBuilder.sol b/src/UpgradeExecRouteBuilder.sol index cd8e75400..4d330ad95 100644 --- a/src/UpgradeExecRouteBuilder.sol +++ b/src/UpgradeExecRouteBuilder.sol @@ -41,6 +41,7 @@ contract UpgradeExecRouteBuilder { error UpgradeExecAlreadyExists(uint256 chindId); error ParamLengthMismatch(uint256 len1, uint256 len2); error EmptyActionBytesData(bytes[]); + error InvalidActionType(uint256 actionType); /// @notice The magic value used by the L1 timelock to indicate that a retryable ticket should be created /// See L1ArbitrumTimelock for more details @@ -100,13 +101,15 @@ contract UpgradeExecRouteBuilder { /// @param actionAddresses Addresses of the action contracts to be called /// @param actionValues Values to call the action contracts with /// @param actionDatas Call data to call the action contracts with + /// @param actionTypes Types of the action contracts to be called (0: execute, 1: executeCall) /// @param predecessor A predecessor value for the l1 timelock operation /// @param timelockSalt A salt for the l1 timelock operation - function createActionRouteData( + function createActionRouteData2( uint256[] memory chainIds, address[] memory actionAddresses, uint256[] memory actionValues, bytes[] memory actionDatas, + uint256[] memory actionTypes, bytes32 predecessor, bytes32 timelockSalt ) public view returns (address, bytes memory) { @@ -135,9 +138,18 @@ contract UpgradeExecRouteBuilder { revert EmptyActionBytesData(actionDatas); } - bytes memory executorData = abi.encodeWithSelector( - IUpgradeExecutor.execute.selector, actionAddresses[i], actionDatas[i] - ); + bytes memory executorData; + if (actionTypes[i] == 0) { + executorData = abi.encodeWithSelector( + IUpgradeExecutor.execute.selector, actionAddresses[i], actionDatas[i] + ); + } else if (actionTypes[i] == 1) { + executorData = abi.encodeWithSelector( + IUpgradeExecutor.executeCall.selector, actionAddresses[i], actionDatas[i] + ); + } else { + revert InvalidActionType(actionTypes[i]); + } // for L1, inbox is set to address(0): if (upExecLocation.inbox == address(0)) { @@ -177,6 +189,37 @@ contract UpgradeExecRouteBuilder { ); } + /// @notice Creates the to address and calldata to be called to execute a route to a batch of action contracts. + /// See Governance Action Contracts for more details. + /// @param chainIds Chain ids containing the actions to be called + /// @param actionAddresses Addresses of the action contracts to be called + /// @param actionValues Values to call the action contracts with + /// @param actionDatas Call data to call the action contracts with + /// @param predecessor A predecessor value for the l1 timelock operation + /// @param timelockSalt A salt for the l1 timelock operation + function createActionRouteData( + uint256[] memory chainIds, + address[] memory actionAddresses, + uint256[] memory actionValues, + bytes[] memory actionDatas, + bytes32 predecessor, + bytes32 timelockSalt + ) public view returns (address, bytes memory) { + uint256[] memory actionTypes = new uint256[](chainIds.length); + for (uint256 i = 0; i < chainIds.length; i++) { + actionTypes[i] = 0; // default is execute + } + return createActionRouteData2( + chainIds, + actionAddresses, + actionValues, + actionDatas, + actionTypes, + predecessor, + timelockSalt + ); + } + /// @notice Creates the to address and calldata to be called to execute a route to a batch of action contracts. /// Uses common defaults for value, calldata and predecessor. /// See Governance Action Contracts for more details. From fadb97baf5db0ffe2cf627b2293362873c0609da Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 17 Apr 2025 18:00:02 +0800 Subject: [PATCH 03/29] test: createActionRouteData2 --- test/UpgradeExecRouteBuilder.t.sol | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/UpgradeExecRouteBuilder.t.sol b/test/UpgradeExecRouteBuilder.t.sol index cb8b8708f..22759e0dd 100644 --- a/test/UpgradeExecRouteBuilder.t.sol +++ b/test/UpgradeExecRouteBuilder.t.sol @@ -102,5 +102,15 @@ contract UpgradeExecRouteBuilderTest is Test { routeBuilder.createActionRouteData( chainIds, actionAddresses, actionValues, badActionDatas, predecessor, salt ); + + uint256[] memory badActionTypes = new uint256[](1); + badActionTypes[0] = 2; + vm.expectRevert( + abi.encodeWithSelector(UpgradeExecRouteBuilder.InvalidActionType.selector, 2) + ); + routeBuilder.createActionRouteData2( + chainIds, actionAddresses, actionValues, actionDatas, badActionTypes, predecessor, salt + ); + // TODO: more test for execute vs executeCall } } From ccd5d3c9164da706fb267bd5bb3b333eb812f401 Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 17 Apr 2025 18:01:26 +0800 Subject: [PATCH 04/29] fix: remove unrelated code --- .../AIPs/AIPArbOS40/SetArbOS40VersionAction.sol | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 src/gov-action-contracts/AIPs/AIPArbOS40/SetArbOS40VersionAction.sol diff --git a/src/gov-action-contracts/AIPs/AIPArbOS40/SetArbOS40VersionAction.sol b/src/gov-action-contracts/AIPs/AIPArbOS40/SetArbOS40VersionAction.sol deleted file mode 100644 index 3e26da414..000000000 --- a/src/gov-action-contracts/AIPs/AIPArbOS40/SetArbOS40VersionAction.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity 0.8.16; - -import "../../arbos-upgrade/UpgradeArbOSVersionAction.sol"; - -/// @notice Sets the ArbOS version to 40. To be run on an arbitrum chain -/// @dev Identical copies of this contract to be deployed on Arb One and Nova for ArbOS40 upgrades -contract SetArbOS40VersionAction is UpgradeArbOSVersionAction { - constructor() UpgradeArbOSVersionAction(uint64(40), uint64(1 weeks)) {} -} From b9d67a251a88112e1288ba93154b41d7e01860ef Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 17 Apr 2025 18:01:46 +0800 Subject: [PATCH 05/29] chore: update gas snapshot --- .gas-snapshot | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index a030439c6..63624daea 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -26,7 +26,7 @@ ArbitrumVestingWalletTest:testDelegateFailsForNonBeneficiary() (gas: 16008435) ArbitrumVestingWalletTest:testDoesDeploy() (gas: 15971342) ArbitrumVestingWalletTest:testReleaseAffordance() (gas: 16008649) ArbitrumVestingWalletTest:testVestedAmountStart() (gas: 16074917) -E2E:testE2E() (gas: 84680100) +E2E:testE2E() (gas: 84923676) FixedDelegateErc20WalletTest:testInit() (gas: 5822575) FixedDelegateErc20WalletTest:testInitZeroToken() (gas: 5816805) FixedDelegateErc20WalletTest:testTransfer() (gas: 5932218) @@ -94,14 +94,14 @@ L2GovernanceFactoryTest:testSanityCheckValues() (gas: 28415658) L2GovernanceFactoryTest:testSetMinDelay() (gas: 28364371) L2GovernanceFactoryTest:testSetMinDelayRevertsForCoreAddress() (gas: 28417242) L2GovernanceFactoryTest:testUpgraderCanCancel() (gas: 28657360) -L2SecurityCouncilMgmtFactoryTest:testMemberElectionGovDeployment() (gas: 30524001) -L2SecurityCouncilMgmtFactoryTest:testNomineeElectionGovDeployment() (gas: 30528232) -L2SecurityCouncilMgmtFactoryTest:testOnlyOwnerCanDeploy() (gas: 25659644) -L2SecurityCouncilMgmtFactoryTest:testRemovalGovDeployment() (gas: 30526232) -L2SecurityCouncilMgmtFactoryTest:testSecurityCouncilManagerDeployment() (gas: 30545325) +L2SecurityCouncilMgmtFactoryTest:testMemberElectionGovDeployment() (gas: 30766071) +L2SecurityCouncilMgmtFactoryTest:testNomineeElectionGovDeployment() (gas: 30770302) +L2SecurityCouncilMgmtFactoryTest:testOnlyOwnerCanDeploy() (gas: 25780656) +L2SecurityCouncilMgmtFactoryTest:testRemovalGovDeployment() (gas: 30768302) +L2SecurityCouncilMgmtFactoryTest:testSecurityCouncilManagerDeployment() (gas: 30787395) NomineeGovernorV2UpgradeActionTest:testAction() (gas: 8153) OfficeHoursActionTest:testConstructor() (gas: 9050) -OfficeHoursActionTest:testFuzzOfficeHoursDeployment(uint256,uint256,int256,uint256,uint256,uint256) (runs: 256, μ: 317072, ~: 317184) +OfficeHoursActionTest:testFuzzOfficeHoursDeployment(uint256,uint256,int256,uint256,uint256,uint256) (runs: 258, μ: 317064, ~: 317184) OfficeHoursActionTest:testInvalidConstructorParameters() (gas: 235740) OfficeHoursActionTest:testPerformBeforeMinimumTimestamp() (gas: 8646) OfficeHoursActionTest:testPerformDuringOfficeHours() (gas: 9140) @@ -116,28 +116,28 @@ OutboxActionsTest:testRemoveAllOutboxes() (gas: 693007) OutboxActionsTest:testRemoveOutboxes() (gas: 853882) ProxyUpgradeAndCallActionTest:testUpgrade() (gas: 137095) ProxyUpgradeAndCallActionTest:testUpgradeAndCall() (gas: 143042) -SecurityCouncilManagerTest:testAddMemberAffordances() (gas: 249651) +SecurityCouncilManagerTest:testAddMemberAffordances() (gas: 250192) SecurityCouncilManagerTest:testAddMemberSpecialAddresses() (gas: 20795) -SecurityCouncilManagerTest:testAddMemberToFirstCohort() (gas: 339764) -SecurityCouncilManagerTest:testAddMemberToSecondCohort() (gas: 343060) +SecurityCouncilManagerTest:testAddMemberToFirstCohort() (gas: 340846) +SecurityCouncilManagerTest:testAddMemberToSecondCohort() (gas: 344142) SecurityCouncilManagerTest:testAddSC() (gas: 118567) SecurityCouncilManagerTest:testAddSCAffordances() (gas: 112083) SecurityCouncilManagerTest:testCantUpdateCohortWithADup() (gas: 123116) SecurityCouncilManagerTest:testCohortMethods() (gas: 136185) SecurityCouncilManagerTest:testInitialization() (gas: 193074) -SecurityCouncilManagerTest:testRemoveMember() (gas: 213029) +SecurityCouncilManagerTest:testRemoveMember() (gas: 213570) SecurityCouncilManagerTest:testRemoveMemberAffordances() (gas: 99074) SecurityCouncilManagerTest:testRemoveSCAffordances() (gas: 81253) SecurityCouncilManagerTest:testRemoveSeC() (gas: 38309) SecurityCouncilManagerTest:testReplaceMemberAffordances() (gas: 208560) -SecurityCouncilManagerTest:testReplaceMemberInFirstCohort() (gas: 258788) -SecurityCouncilManagerTest:testReplaceMemberInSecondCohort() (gas: 262305) -SecurityCouncilManagerTest:testRotateMember() (gas: 258792) +SecurityCouncilManagerTest:testReplaceMemberInFirstCohort() (gas: 259329) +SecurityCouncilManagerTest:testReplaceMemberInSecondCohort() (gas: 262846) +SecurityCouncilManagerTest:testRotateMember() (gas: 259333) SecurityCouncilManagerTest:testUpdateCohortAffordances() (gas: 83026) -SecurityCouncilManagerTest:testUpdateFirstCohort() (gas: 295311) +SecurityCouncilManagerTest:testUpdateFirstCohort() (gas: 295852) SecurityCouncilManagerTest:testUpdateRouter() (gas: 76296) SecurityCouncilManagerTest:testUpdateRouterAffordacnes() (gas: 112379) -SecurityCouncilManagerTest:testUpdateSecondCohort() (gas: 295316) +SecurityCouncilManagerTest:testUpdateSecondCohort() (gas: 295857) SecurityCouncilMemberElectionGovernorTest:testCannotUseMoreVotesThanAvailable() (gas: 246997) SecurityCouncilMemberElectionGovernorTest:testCastBySig() (gas: 302852) SecurityCouncilMemberElectionGovernorTest:testCastBySigTwice() (gas: 266244) @@ -153,7 +153,7 @@ SecurityCouncilMemberElectionGovernorTest:testOnlyNomineeElectionGovernorCanProp SecurityCouncilMemberElectionGovernorTest:testProperInitialization() (gas: 49388) SecurityCouncilMemberElectionGovernorTest:testProposeReverts() (gas: 32916) SecurityCouncilMemberElectionGovernorTest:testRelay() (gas: 42229) -SecurityCouncilMemberElectionGovernorTest:testSelectTopNominees(uint256) (runs: 256, μ: 339999, ~: 339822) +SecurityCouncilMemberElectionGovernorTest:testSelectTopNominees(uint256) (runs: 258, μ: 340043, ~: 339909) SecurityCouncilMemberElectionGovernorTest:testSelectTopNomineesFails() (gas: 273335) SecurityCouncilMemberElectionGovernorTest:testSetFullWeightDuration() (gas: 34951) SecurityCouncilMemberElectionGovernorTest:testVotesToWeight() (gas: 152898) @@ -245,8 +245,8 @@ TokenDistributorTest:testZeroOwner() (gas: 4132646) TokenDistributorTest:testZeroReceiver() (gas: 4132675) TokenDistributorTest:testZeroToken() (gas: 71889) TopNomineesGasTest:testTopNomineesGas() (gas: 4502996) -UpgradeExecRouteBuilderTest:testAIP1Point2() (gas: 1322645) -UpgradeExecRouteBuilderTest:testRouteBuilderErrors() (gas: 1127374) +UpgradeExecRouteBuilderTest:testAIP1Point2() (gas: 1444239) +UpgradeExecRouteBuilderTest:testRouteBuilderErrors() (gas: 1263265) UpgradeExecutorTest:testAdminCanChangeExecutor() (gas: 2583801) UpgradeExecutorTest:testCantExecuteEOA() (gas: 2439721) UpgradeExecutorTest:testExecute() (gas: 2677995) From 1b5bacd3c7c8eca1fe50aa776c0ac1baf97bb796 Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 17 Apr 2025 18:04:11 +0800 Subject: [PATCH 06/29] chore: update sigs --- test/signatures/UpgradeExecRouteBuilder | 48 +++++++++++++------------ 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/test/signatures/UpgradeExecRouteBuilder b/test/signatures/UpgradeExecRouteBuilder index d15069f24..efa3cea00 100644 --- a/test/signatures/UpgradeExecRouteBuilder +++ b/test/signatures/UpgradeExecRouteBuilder @@ -1,25 +1,27 @@ -╭------------------------------------------------------------------------------+------------╮ -| Method | Identifier | -+===========================================================================================+ -| DEFAULT_GOV_ACTION_CALLDATA() | d1d677cb | -|------------------------------------------------------------------------------+------------| -| DEFAULT_PREDECESSOR() | 002c49eb | -|------------------------------------------------------------------------------+------------| -| DEFAULT_VALUE() | 0715a24a | -|------------------------------------------------------------------------------+------------| -| RETRYABLE_TICKET_MAGIC() | 3994073d | -|------------------------------------------------------------------------------+------------| -| createActionRouteData(uint256[],address[],uint256[],bytes[],bytes32,bytes32) | 035a5724 | -|------------------------------------------------------------------------------+------------| -| createActionRouteDataWithDefaults(uint256[],address[],bytes32) | 25524ccc | -|------------------------------------------------------------------------------+------------| -| l1TimelockAddr() | 3d967760 | -|------------------------------------------------------------------------------+------------| -| l1TimelockMinDelay() | ee69d88e | -|------------------------------------------------------------------------------+------------| -| upExecLocationExists(uint256) | ee382a71 | -|------------------------------------------------------------------------------+------------| -| upExecLocations(uint256) | 0b3cf625 | -╰------------------------------------------------------------------------------+------------╯ +╭-----------------------------------------------------------------------------------------+------------╮ +| Method | Identifier | ++======================================================================================================+ +| DEFAULT_GOV_ACTION_CALLDATA() | d1d677cb | +|-----------------------------------------------------------------------------------------+------------| +| DEFAULT_PREDECESSOR() | 002c49eb | +|-----------------------------------------------------------------------------------------+------------| +| DEFAULT_VALUE() | 0715a24a | +|-----------------------------------------------------------------------------------------+------------| +| RETRYABLE_TICKET_MAGIC() | 3994073d | +|-----------------------------------------------------------------------------------------+------------| +| createActionRouteData(uint256[],address[],uint256[],bytes[],bytes32,bytes32) | 035a5724 | +|-----------------------------------------------------------------------------------------+------------| +| createActionRouteData2(uint256[],address[],uint256[],bytes[],uint256[],bytes32,bytes32) | 2ddb5dfc | +|-----------------------------------------------------------------------------------------+------------| +| createActionRouteDataWithDefaults(uint256[],address[],bytes32) | 25524ccc | +|-----------------------------------------------------------------------------------------+------------| +| l1TimelockAddr() | 3d967760 | +|-----------------------------------------------------------------------------------------+------------| +| l1TimelockMinDelay() | ee69d88e | +|-----------------------------------------------------------------------------------------+------------| +| upExecLocationExists(uint256) | ee382a71 | +|-----------------------------------------------------------------------------------------+------------| +| upExecLocations(uint256) | 0b3cf625 | +╰-----------------------------------------------------------------------------------------+------------╯ From 94837891fca9f8f7a8bf0c0fcc8049208ebd50b7 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Thu, 17 Apr 2025 17:13:19 -0500 Subject: [PATCH 07/29] use 1.1.1 IUpgradeExecutor --- package.json | 1 + remappings.txt | 1 + src/UpgradeExecRouteBuilder.sol | 2 +- .../GovernanceChainSCMgmtActivationAction.sol | 2 +- .../L1SCMgmtActivationAction.sol | 2 +- .../SecurityCouncilMgmtUpgradeLib.sol | 3 ++- src/interfaces/IUpgradeExecutor.sol | 13 ------------- yarn.lock | 8 ++++++++ 8 files changed, 15 insertions(+), 17 deletions(-) delete mode 100644 src/interfaces/IUpgradeExecutor.sol diff --git a/package.json b/package.json index 54acd0e9e..940763f1c 100644 --- a/package.json +++ b/package.json @@ -79,6 +79,7 @@ "@arbitrum/nitro-contracts": "1.1.1", "@arbitrum/token-bridge-contracts": "1.0.0-beta.0", "@gnosis.pm/safe-contracts": "1.3.0", + "@offchainlabs/upgrade-executor": "1.1.1", "@openzeppelin/contracts": "4.7.3", "@openzeppelin/contracts-upgradeable": "4.7.3", "@types/yargs": "^17.0.17", diff --git a/remappings.txt b/remappings.txt index aa38660ff..c2bc29377 100644 --- a/remappings.txt +++ b/remappings.txt @@ -5,4 +5,5 @@ solady/=lib/solady/src/ @openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/ @openzeppelin/contracts/=node_modules/@openzeppelin/contracts/ @gnosis.pm/safe-contracts/=node_modules/@gnosis.pm/safe-contracts/ +@offchainlabs/upgrade-executor=node_modules/@offchainlabs/upgrade-executor/ ds-test/=lib/forge-std/lib/ds-test/src/ diff --git a/src/UpgradeExecRouteBuilder.sol b/src/UpgradeExecRouteBuilder.sol index 4d330ad95..431e8a15f 100644 --- a/src/UpgradeExecRouteBuilder.sol +++ b/src/UpgradeExecRouteBuilder.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.16; import "@arbitrum/nitro-contracts/src/precompiles/ArbSys.sol"; -import "./interfaces/IUpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/IUpgradeExecutor.sol"; import "./L1ArbitrumTimelock.sol"; import "./security-council-mgmt/Common.sol"; diff --git a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/GovernanceChainSCMgmtActivationAction.sol b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/GovernanceChainSCMgmtActivationAction.sol index fe798894c..85b106dd4 100644 --- a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/GovernanceChainSCMgmtActivationAction.sol +++ b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/GovernanceChainSCMgmtActivationAction.sol @@ -5,7 +5,7 @@ import "../../../security-council-mgmt/interfaces/IGnosisSafe.sol"; import "../../address-registries/L2AddressRegistryInterfaces.sol"; import "./SecurityCouncilMgmtUpgradeLib.sol"; import "../../../interfaces/IArbitrumDAOConstitution.sol"; -import "../../../interfaces/IUpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/IUpgradeExecutor.sol"; import "../../../interfaces/ICoreTimelock.sol"; import "@openzeppelin/contracts/utils/Address.sol"; diff --git a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/L1SCMgmtActivationAction.sol b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/L1SCMgmtActivationAction.sol index 602e149cf..e1cebc91f 100644 --- a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/L1SCMgmtActivationAction.sol +++ b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/L1SCMgmtActivationAction.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.16; import "../../../security-council-mgmt/interfaces/IGnosisSafe.sol"; -import "../../../interfaces/IUpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/IUpgradeExecutor.sol"; import "../../../interfaces/ICoreTimelock.sol"; import "./SecurityCouncilMgmtUpgradeLib.sol"; diff --git a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/SecurityCouncilMgmtUpgradeLib.sol b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/SecurityCouncilMgmtUpgradeLib.sol index d306f1677..7726c1dc5 100644 --- a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/SecurityCouncilMgmtUpgradeLib.sol +++ b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/SecurityCouncilMgmtUpgradeLib.sol @@ -2,7 +2,8 @@ pragma solidity 0.8.16; import "../../../security-council-mgmt/interfaces/IGnosisSafe.sol"; -import "../../../interfaces/IUpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/IUpgradeExecutor.sol"; +import "@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol"; library SecurityCouncilMgmtUpgradeLib { function replaceEmergencySecurityCouncil( diff --git a/src/interfaces/IUpgradeExecutor.sol b/src/interfaces/IUpgradeExecutor.sol deleted file mode 100644 index 22f598911..000000000 --- a/src/interfaces/IUpgradeExecutor.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity 0.8.16; - -import "@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol"; - -// TODO: import from @offchainlabs/upgrade-executor@1.1.1 -interface IUpgradeExecutor { - function initialize(address admin, address[] memory executors) external; - function execute(address upgrade, bytes memory upgradeCallData) external payable; - function executeCall(address target, bytes memory targetCallData) external payable; - function ADMIN_ROLE() external view returns (bytes32); - function EXECUTOR_ROLE() external view returns (bytes32); -} diff --git a/yarn.lock b/yarn.lock index 2ee098f38..24b340d80 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1183,6 +1183,14 @@ "@openzeppelin/contracts" "4.7.3" "@openzeppelin/contracts-upgradeable" "4.7.3" +"@offchainlabs/upgrade-executor@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@offchainlabs/upgrade-executor/-/upgrade-executor-1.1.1.tgz#ae3dfe4a183d88c0c3fd3b39ab6dd6508b371b53" + integrity sha512-/hnUblMbzXS4asPdTSWjFUn/N5+E71dVfDW1314j/r/847OIy1VHZDFhw+fOlUGL5/qrZu2UV34oZAwwrRV4tg== + dependencies: + "@openzeppelin/contracts" "4.7.3" + "@openzeppelin/contracts-upgradeable" "4.7.3" + "@openzeppelin/contracts-upgradeable@3.4.2": version "3.4.2" resolved "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-3.4.2.tgz" From 09456457d3e3bca4c910aabf185395e8049f8d90 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Thu, 17 Apr 2025 17:22:15 -0500 Subject: [PATCH 08/29] use 1.1.1 UpgradeExecutor contract --- src/L1GovernanceFactory.sol | 2 +- src/L2GovernanceFactory.sol | 2 +- src/UpgradeExecutor.sol | 60 ------------------- .../SecurityCouncilManager.sol | 2 +- test/L2GovernanceFactory.t.sol | 2 +- test/UpgradeExecutor.t.sol | 2 +- .../gov-actions/AIPNovaFeeRoutingAction.t.sol | 2 +- test/gov-actions/ProxyAdminUpgrader.t.sol | 2 +- test/security-council-mgmt/E2E.t.sol | 2 +- .../SecurityCouncilMemberSyncAction.t.sol | 2 +- .../SecurityCouncilUpgradeAction.t.sol | 2 +- test/util/ActionTestBase.sol | 2 +- 12 files changed, 11 insertions(+), 71 deletions(-) delete mode 100644 src/UpgradeExecutor.sol diff --git a/src/L1GovernanceFactory.sol b/src/L1GovernanceFactory.sol index c6292aad5..ebc99b841 100644 --- a/src/L1GovernanceFactory.sol +++ b/src/L1GovernanceFactory.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.16; import "./L1ArbitrumTimelock.sol"; -import "./UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; diff --git a/src/L2GovernanceFactory.sol b/src/L2GovernanceFactory.sol index 5a4ad6b9f..5528eb63c 100644 --- a/src/L2GovernanceFactory.sol +++ b/src/L2GovernanceFactory.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.16; import "./L2ArbitrumToken.sol"; import "./L2ArbitrumGovernor.sol"; import "./ArbitrumTimelock.sol"; -import "./UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "./FixedDelegateErc20Wallet.sol"; import "./ArbitrumDAOConstitution.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; diff --git a/src/UpgradeExecutor.sol b/src/UpgradeExecutor.sol deleted file mode 100644 index adaa6d830..000000000 --- a/src/UpgradeExecutor.sol +++ /dev/null @@ -1,60 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity 0.8.16; - -import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; -import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; -import "@openzeppelin/contracts/utils/Address.sol"; - -/// @title A root contract from which it execute upgrades -/// @notice Does not contain upgrade logic itself, only the means to call upgrade contracts and execute them -/// @dev We use these upgrade contracts as they allow multiple actions to take place in an upgrade -/// and for these actions to interact. However because we are delegatecalling into these upgrade -/// contracts, it's important that these upgrade contract do not touch or modify contract state. -contract UpgradeExecutor is Initializable, AccessControlUpgradeable, ReentrancyGuard { - using Address for address; - - bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE"); - bytes32 public constant EXECUTOR_ROLE = keccak256("EXECUTOR_ROLE"); - - /// @notice Emitted when an upgrade execution occurs - event UpgradeExecuted(address indexed upgrade, uint256 value, bytes data); - - constructor() { - _disableInitializers(); - } - - /// @notice Initialise the upgrade executor - /// @param admin The admin who can update other roles, and itself - ADMIN_ROLE - /// @param executors Can call the execute function - EXECUTOR_ROLE - function initialize(address admin, address[] memory executors) public initializer { - require(admin != address(0), "UpgradeExecutor: zero admin"); - - __AccessControl_init(); - - _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE); - _setRoleAdmin(EXECUTOR_ROLE, ADMIN_ROLE); - - _setupRole(ADMIN_ROLE, admin); - for (uint256 i = 0; i < executors.length; ++i) { - _setupRole(EXECUTOR_ROLE, executors[i]); - } - } - - /// @notice Execute an upgrade by delegate calling an upgrade contract - /// @dev Only executor can call this. Since we're using a delegatecall here the Upgrade contract - /// will have access to the state of this contract - including the roles. Only upgrade contracts - /// that do not touch local state should be used. - function execute(address upgrade, bytes memory upgradeCallData) - public - payable - onlyRole(EXECUTOR_ROLE) - nonReentrant - { - // OZ Address library check if the address is a contract and bubble up inner revert reason - address(upgrade).functionDelegateCall( - upgradeCallData, "UpgradeExecutor: inner delegate call failed without reason" - ); - - emit UpgradeExecuted(upgrade, msg.value, upgradeCallData); - } -} diff --git a/src/security-council-mgmt/SecurityCouncilManager.sol b/src/security-council-mgmt/SecurityCouncilManager.sol index fb03bf742..c657401a5 100644 --- a/src/security-council-mgmt/SecurityCouncilManager.sol +++ b/src/security-council-mgmt/SecurityCouncilManager.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.16; import "../ArbitrumTimelock.sol"; -import "../UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "../L1ArbitrumTimelock.sol"; import "./SecurityCouncilMgmtUtils.sol"; import "./interfaces/ISecurityCouncilManager.sol"; diff --git a/test/L2GovernanceFactory.t.sol b/test/L2GovernanceFactory.t.sol index 13ad94051..6cbf64687 100644 --- a/test/L2GovernanceFactory.t.sol +++ b/test/L2GovernanceFactory.t.sol @@ -3,7 +3,7 @@ import "../src/L2GovernanceFactory.sol"; import "../src/L2ArbitrumGovernor.sol"; -import "../src/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "../src/ArbitrumTimelock.sol"; import "../src/ArbitrumDAOConstitution.sol"; diff --git a/test/UpgradeExecutor.t.sol b/test/UpgradeExecutor.t.sol index f27e8047c..5213c1ee0 100644 --- a/test/UpgradeExecutor.t.sol +++ b/test/UpgradeExecutor.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.16; -import "../src/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "./util/TestUtil.sol"; import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; diff --git a/test/gov-actions/AIPNovaFeeRoutingAction.t.sol b/test/gov-actions/AIPNovaFeeRoutingAction.t.sol index 93b79753d..a1b09d66e 100644 --- a/test/gov-actions/AIPNovaFeeRoutingAction.t.sol +++ b/test/gov-actions/AIPNovaFeeRoutingAction.t.sol @@ -6,7 +6,7 @@ pragma solidity 0.8.16; import "forge-std/Test.sol"; import "../../src/gov-action-contracts/AIPs/AIPNovaFeeRoutingAction.sol"; -import "../../src/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; contract AIPNovaFeeRoutingActionTest is Test { UpgradeExecutor constant upExec = UpgradeExecutor(0x86a02dD71363c440b21F4c0E5B2Ad01Ffe1A7482); diff --git a/test/gov-actions/ProxyAdminUpgrader.t.sol b/test/gov-actions/ProxyAdminUpgrader.t.sol index 39b3f4244..605ef39b0 100644 --- a/test/gov-actions/ProxyAdminUpgrader.t.sol +++ b/test/gov-actions/ProxyAdminUpgrader.t.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.16; import "forge-std/Test.sol"; import "../util/TestUtil.sol"; -import "../../src/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "../../src/gov-action-contracts/gov-upgrade-contracts/upgrade-proxy/ProxyUpgradeAndCallAction.sol"; import "../../src/gov-action-contracts/gov-upgrade-contracts/upgrade-proxy/ProxyUpgradeAction.sol"; diff --git a/test/security-council-mgmt/E2E.t.sol b/test/security-council-mgmt/E2E.t.sol index d53809430..b3a649d55 100644 --- a/test/security-council-mgmt/E2E.t.sol +++ b/test/security-council-mgmt/E2E.t.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.16; import "forge-std/Test.sol"; -import "../../src/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "../../src/ArbitrumTimelock.sol"; import "../../src/L2ArbitrumGovernor.sol"; import "../../src/FixedDelegateErc20Wallet.sol"; diff --git a/test/security-council-mgmt/SecurityCouncilMemberSyncAction.t.sol b/test/security-council-mgmt/SecurityCouncilMemberSyncAction.t.sol index 1f9414743..710ceffb4 100644 --- a/test/security-council-mgmt/SecurityCouncilMemberSyncAction.t.sol +++ b/test/security-council-mgmt/SecurityCouncilMemberSyncAction.t.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.16; import "@gnosis.pm/safe-contracts/contracts/GnosisSafeL2.sol"; import "../util/TestUtil.sol"; import "../util/DeployGnosisWithModule.sol"; -import "../../src/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "../../src/security-council-mgmt/SecurityCouncilMemberSyncAction.sol"; import "../../src/security-council-mgmt/interfaces/IGnosisSafe.sol"; diff --git a/test/security-council-mgmt/SecurityCouncilUpgradeAction.t.sol b/test/security-council-mgmt/SecurityCouncilUpgradeAction.t.sol index aa67cd967..cdd397709 100644 --- a/test/security-council-mgmt/SecurityCouncilUpgradeAction.t.sol +++ b/test/security-council-mgmt/SecurityCouncilUpgradeAction.t.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.16; import "@gnosis.pm/safe-contracts/contracts/GnosisSafeL2.sol"; import "../util/TestUtil.sol"; import "../util/DeployGnosisWithModule.sol"; -import "../../src/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "../../src/security-council-mgmt/SecurityCouncilMemberSyncAction.sol"; import "../../src/security-council-mgmt/interfaces/IGnosisSafe.sol"; diff --git a/test/util/ActionTestBase.sol b/test/util/ActionTestBase.sol index d82c7aa8e..5be3c1837 100644 --- a/test/util/ActionTestBase.sol +++ b/test/util/ActionTestBase.sol @@ -15,7 +15,7 @@ import "../../src/ArbitrumTimelock.sol"; import "../../src/L1ArbitrumTimelock.sol"; import "../../src/FixedDelegateErc20Wallet.sol"; import "../util/TestUtil.sol"; -import "../../src/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "../../src/ArbitrumDAOConstitution.sol"; import "../../src/gov-action-contracts/address-registries/L1AddressRegistry.sol" as _ar; import "../../src/gov-action-contracts/address-registries/L2AddressRegistry.sol" as _ar1; From 50904f69f3344ebcdba322737c79bed6362acebf Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Thu, 17 Apr 2025 17:53:46 -0500 Subject: [PATCH 09/29] add tests for executeCall --- test/UpgradeExecRouteBuilder.t.sol | 41 +++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/test/UpgradeExecRouteBuilder.t.sol b/test/UpgradeExecRouteBuilder.t.sol index 22759e0dd..632d91115 100644 --- a/test/UpgradeExecRouteBuilder.t.sol +++ b/test/UpgradeExecRouteBuilder.t.sol @@ -13,6 +13,10 @@ contract UpgradeExecRouteBuilderTest is Test { bytes aipData = hex"8f2a0bb000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000067565fcc91c79be6e957056bdf0ed93287216afcc5ea02fec16f1900a177a3c5000000000000000000000000000000000000000000000000000000000003f4800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001800000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000841cff79cd0000000000000000000000006274106eedd4848371d2c09e0352d67b795ed51600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004b147f40c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + // same as aipData but execute selector replaced with executeCall + bytes aipDataExecuteCall = + hex"8f2a0bb000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000067565fcc91c79be6e957056bdf0ed93287216afcc5ea02fec16f1900a177a3c5000000000000000000000000000000000000000000000000000000000003f4800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001800000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000084bca8c7b50000000000000000000000006274106eedd4848371d2c09e0352d67b795ed51600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004b147f40c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + address aip1Point2ActionAddress = 0x6274106eedD4848371D2C09e0352d67B795ED516; bytes32 aip1Point2TimelockSalt = 0x67565fcc91c79be6e957056bdf0ed93287216afcc5ea02fec16f1900a177a3c5; @@ -49,6 +53,42 @@ contract UpgradeExecRouteBuilderTest is Test { ); } + function testActionType() public { + UpgradeExecRouteBuilder routeBuilder = deployRouteBuilder(); + + uint256[] memory chainIds = new uint256[](1); + chainIds[0] = 42_161; + address[] memory actionAddresses = new address[](1); + actionAddresses[0] = aip1Point2ActionAddress; + uint256[] memory actionValues = new uint256[](1); + actionValues[0] = 0; + bytes[] memory actionDatas = new bytes[](1); + actionDatas[0] = abi.encodeWithSignature("perform()"); + bytes32 predecessor = 0; + bytes32 salt = aip1Point2TimelockSalt; + + uint256[] memory actionTypes = new uint256[](1); + + // execute + (address to, bytes memory data) = routeBuilder.createActionRouteData2( + chainIds, actionAddresses, actionValues, actionDatas, actionTypes, predecessor, salt + ); + assertEq(to, arbSys); + assertEq( + data, abi.encodeWithSelector(ArbSys.sendTxToL1.selector, l1TimelockAddress, aipData) + ); + + // executeCall + actionTypes[0] = 1; + (address to2, bytes memory data2) = routeBuilder.createActionRouteData2( + chainIds, actionAddresses, actionValues, actionDatas, actionTypes, predecessor, salt + ); + assertEq(to2, arbSys); + assertEq( + data2, abi.encodeWithSelector(ArbSys.sendTxToL1.selector, l1TimelockAddress, aipDataExecuteCall) + ); + } + // test all the error conditions for the createActionRouteData funtion on the route builder function testRouteBuilderErrors() public { UpgradeExecRouteBuilder routeBuilder = deployRouteBuilder(); @@ -111,6 +151,5 @@ contract UpgradeExecRouteBuilderTest is Test { routeBuilder.createActionRouteData2( chainIds, actionAddresses, actionValues, actionDatas, badActionTypes, predecessor, salt ); - // TODO: more test for execute vs executeCall } } From c9b583d47f38d4241aee812d12e50252620a87f8 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Fri, 18 Apr 2025 09:08:54 -0500 Subject: [PATCH 10/29] fix ci --- .gas-snapshot | 103 ++++++++++++++++---------------- test/signatures/UpgradeExecutor | 27 --------- test/storage/UpgradeExecutor | 19 ------ 3 files changed, 52 insertions(+), 97 deletions(-) delete mode 100644 test/signatures/UpgradeExecutor delete mode 100644 test/storage/UpgradeExecutor diff --git a/.gas-snapshot b/.gas-snapshot index 63624daea..3d36547f9 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,4 +1,4 @@ -AIP1Point2ActionTest:testAction() (gas: 629328) +AIP1Point2ActionTest:testAction() (gas: 629373) AIPNovaFeeRoutingActionTest:testAction() (gas: 3074) ArbitrumDAOConstitutionTest:testConstructor() (gas: 259383) ArbitrumDAOConstitutionTest:testMonOwnerCannotSetHash() (gas: 262836) @@ -26,12 +26,12 @@ ArbitrumVestingWalletTest:testDelegateFailsForNonBeneficiary() (gas: 16008435) ArbitrumVestingWalletTest:testDoesDeploy() (gas: 15971342) ArbitrumVestingWalletTest:testReleaseAffordance() (gas: 16008649) ArbitrumVestingWalletTest:testVestedAmountStart() (gas: 16074917) -E2E:testE2E() (gas: 84923676) +E2E:testE2E() (gas: 85079428) FixedDelegateErc20WalletTest:testInit() (gas: 5822575) FixedDelegateErc20WalletTest:testInitZeroToken() (gas: 5816805) FixedDelegateErc20WalletTest:testTransfer() (gas: 5932218) FixedDelegateErc20WalletTest:testTransferNotOwner() (gas: 5897843) -InboxActionsTest:testPauseAndUpauseInbox() (gas: 370454) +InboxActionsTest:testPauseAndUpauseInbox() (gas: 370544) L1AddressRegistryTest:testAddressRegistryAddress() (gas: 47009) L1ArbitrumTimelockTest:testCancel() (gas: 5324642) L1ArbitrumTimelockTest:testCancelFailsBadSender() (gas: 5369529) @@ -56,9 +56,9 @@ L1ArbitrumTokenTest:testInitZeroNovaGateway() (gas: 3177301) L1ArbitrumTokenTest:testInitZeroNovaRouter() (gas: 3177235) L1ArbitrumTokenTest:testRegisterTokenOnL2() (gas: 4568612) L1ArbitrumTokenTest:testRegisterTokenOnL2NotEnoughVal() (gas: 4425799) -L1GovernanceFactoryTest:testL1GovernanceFactory() (gas: 10771109) -L1GovernanceFactoryTest:testSetMinDelay() (gas: 10746003) -L1GovernanceFactoryTest:testSetMinDelayRevertsForCoreAddress() (gas: 10798958) +L1GovernanceFactoryTest:testL1GovernanceFactory() (gas: 10771066) +L1GovernanceFactoryTest:testSetMinDelay() (gas: 10746048) +L1GovernanceFactoryTest:testSetMinDelayRevertsForCoreAddress() (gas: 10799003) L2AddressRegistryTest:testAddressRegistryAddress() (gas: 54658) L2ArbitrumGovernorTest:testCantReinit() (gas: 13669489) L2ArbitrumGovernorTest:testExecutorPermissions() (gas: 13706483) @@ -85,15 +85,15 @@ L2ArbitrumTokenTest:testDoesNotInitialiseZeroL1Token() (gas: 3800726) L2ArbitrumTokenTest:testDoesNotInitialiseZeroOwner() (gas: 3800739) L2ArbitrumTokenTest:testIsInitialised() (gas: 4072777) L2ArbitrumTokenTest:testNoLogicContractInit() (gas: 2693127) -L2GovernanceFactoryTest:testContractsDeployed() (gas: 28359365) -L2GovernanceFactoryTest:testContractsInitialized() (gas: 28396315) -L2GovernanceFactoryTest:testDeploySteps() (gas: 28370874) -L2GovernanceFactoryTest:testProxyAdminOwnership() (gas: 28368375) -L2GovernanceFactoryTest:testRoles() (gas: 28391450) -L2GovernanceFactoryTest:testSanityCheckValues() (gas: 28415658) -L2GovernanceFactoryTest:testSetMinDelay() (gas: 28364371) -L2GovernanceFactoryTest:testSetMinDelayRevertsForCoreAddress() (gas: 28417242) -L2GovernanceFactoryTest:testUpgraderCanCancel() (gas: 28657360) +L2GovernanceFactoryTest:testContractsDeployed() (gas: 28514933) +L2GovernanceFactoryTest:testContractsInitialized() (gas: 28551928) +L2GovernanceFactoryTest:testDeploySteps() (gas: 28526442) +L2GovernanceFactoryTest:testProxyAdminOwnership() (gas: 28523943) +L2GovernanceFactoryTest:testRoles() (gas: 28546930) +L2GovernanceFactoryTest:testSanityCheckValues() (gas: 28571182) +L2GovernanceFactoryTest:testSetMinDelay() (gas: 28519939) +L2GovernanceFactoryTest:testSetMinDelayRevertsForCoreAddress() (gas: 28572810) +L2GovernanceFactoryTest:testUpgraderCanCancel() (gas: 28812928) L2SecurityCouncilMgmtFactoryTest:testMemberElectionGovDeployment() (gas: 30766071) L2SecurityCouncilMgmtFactoryTest:testNomineeElectionGovDeployment() (gas: 30770302) L2SecurityCouncilMgmtFactoryTest:testOnlyOwnerCanDeploy() (gas: 25780656) @@ -101,7 +101,7 @@ L2SecurityCouncilMgmtFactoryTest:testRemovalGovDeployment() (gas: 30768302) L2SecurityCouncilMgmtFactoryTest:testSecurityCouncilManagerDeployment() (gas: 30787395) NomineeGovernorV2UpgradeActionTest:testAction() (gas: 8153) OfficeHoursActionTest:testConstructor() (gas: 9050) -OfficeHoursActionTest:testFuzzOfficeHoursDeployment(uint256,uint256,int256,uint256,uint256,uint256) (runs: 258, μ: 317064, ~: 317184) +OfficeHoursActionTest:testFuzzOfficeHoursDeployment(uint256,uint256,int256,uint256,uint256,uint256) (runs: 256, μ: 317070, ~: 317184) OfficeHoursActionTest:testInvalidConstructorParameters() (gas: 235740) OfficeHoursActionTest:testPerformBeforeMinimumTimestamp() (gas: 8646) OfficeHoursActionTest:testPerformDuringOfficeHours() (gas: 9140) @@ -109,13 +109,13 @@ OfficeHoursActionTest:testPerformFridayUTCSaturdayLocal() (gas: 304792) OfficeHoursActionTest:testPerformMondayUTCSundayLocal() (gas: 304780) OfficeHoursActionTest:testPerformOnWeekend() (gas: 9327) OfficeHoursActionTest:testPerformOutsideOfficeHours() (gas: 9537) -OutboxActionsTest:testAddOutbxesAction() (gas: 651398) -OutboxActionsTest:testCantAddEOA() (gas: 968968) -OutboxActionsTest:testCantReAddOutbox() (gas: 974344) -OutboxActionsTest:testRemoveAllOutboxes() (gas: 693007) -OutboxActionsTest:testRemoveOutboxes() (gas: 853882) -ProxyUpgradeAndCallActionTest:testUpgrade() (gas: 137095) -ProxyUpgradeAndCallActionTest:testUpgradeAndCall() (gas: 143042) +OutboxActionsTest:testAddOutbxesAction() (gas: 651443) +OutboxActionsTest:testCantAddEOA() (gas: 969058) +OutboxActionsTest:testCantReAddOutbox() (gas: 974434) +OutboxActionsTest:testRemoveAllOutboxes() (gas: 693079) +OutboxActionsTest:testRemoveOutboxes() (gas: 853972) +ProxyUpgradeAndCallActionTest:testUpgrade() (gas: 137140) +ProxyUpgradeAndCallActionTest:testUpgradeAndCall() (gas: 143087) SecurityCouncilManagerTest:testAddMemberAffordances() (gas: 250192) SecurityCouncilManagerTest:testAddMemberSpecialAddresses() (gas: 20795) SecurityCouncilManagerTest:testAddMemberToFirstCohort() (gas: 340846) @@ -153,7 +153,7 @@ SecurityCouncilMemberElectionGovernorTest:testOnlyNomineeElectionGovernorCanProp SecurityCouncilMemberElectionGovernorTest:testProperInitialization() (gas: 49388) SecurityCouncilMemberElectionGovernorTest:testProposeReverts() (gas: 32916) SecurityCouncilMemberElectionGovernorTest:testRelay() (gas: 42229) -SecurityCouncilMemberElectionGovernorTest:testSelectTopNominees(uint256) (runs: 258, μ: 340043, ~: 339909) +SecurityCouncilMemberElectionGovernorTest:testSelectTopNominees(uint256) (runs: 256, μ: 340075, ~: 339909) SecurityCouncilMemberElectionGovernorTest:testSelectTopNomineesFails() (gas: 273335) SecurityCouncilMemberElectionGovernorTest:testSetFullWeightDuration() (gas: 34951) SecurityCouncilMemberElectionGovernorTest:testVotesToWeight() (gas: 152898) @@ -173,19 +173,19 @@ SecurityCouncilMemberRemovalGovernorTest:testSetVoteSuccessNumeratorAffordance() SecurityCouncilMemberRemovalGovernorTest:testSuccessNumeratorInsufficientVotes() (gas: 358327) SecurityCouncilMemberRemovalGovernorTest:testSuccessNumeratorSufficientVotes() (gas: 361245) SecurityCouncilMemberRemovalGovernorTest:testSuccessfulProposalAndCantAbstain() (gas: 142674) -SecurityCouncilMemberSyncActionTest:testAddOne() (gas: 7938503) -SecurityCouncilMemberSyncActionTest:testAddOne() (gas: 7939341) -SecurityCouncilMemberSyncActionTest:testCantDropBelowThreshhold() (gas: 7965404) -SecurityCouncilMemberSyncActionTest:testCantDropBelowThreshhold() (gas: 7965411) -SecurityCouncilMemberSyncActionTest:testGetPrevOwner() (gas: 7929385) -SecurityCouncilMemberSyncActionTest:testGetPrevOwner() (gas: 7929385) -SecurityCouncilMemberSyncActionTest:testNonces() (gas: 8229875) -SecurityCouncilMemberSyncActionTest:testNoopUpdate() (gas: 7928439) -SecurityCouncilMemberSyncActionTest:testNoopUpdate() (gas: 7929365) -SecurityCouncilMemberSyncActionTest:testRemoveOne() (gas: 7929685) -SecurityCouncilMemberSyncActionTest:testRemoveOne() (gas: 7930546) -SecurityCouncilMemberSyncActionTest:testUpdateCohort() (gas: 8171934) -SecurityCouncilMemberSyncActionTest:testUpdateCohort() (gas: 8172795) +SecurityCouncilMemberSyncActionTest:testAddOne() (gas: 8094226) +SecurityCouncilMemberSyncActionTest:testAddOne() (gas: 8095064) +SecurityCouncilMemberSyncActionTest:testCantDropBelowThreshhold() (gas: 8121127) +SecurityCouncilMemberSyncActionTest:testCantDropBelowThreshhold() (gas: 8121134) +SecurityCouncilMemberSyncActionTest:testGetPrevOwner() (gas: 8085063) +SecurityCouncilMemberSyncActionTest:testGetPrevOwner() (gas: 8085063) +SecurityCouncilMemberSyncActionTest:testNonces() (gas: 8385778) +SecurityCouncilMemberSyncActionTest:testNoopUpdate() (gas: 8084162) +SecurityCouncilMemberSyncActionTest:testNoopUpdate() (gas: 8085088) +SecurityCouncilMemberSyncActionTest:testRemoveOne() (gas: 8085408) +SecurityCouncilMemberSyncActionTest:testRemoveOne() (gas: 8086269) +SecurityCouncilMemberSyncActionTest:testUpdateCohort() (gas: 8327657) +SecurityCouncilMemberSyncActionTest:testUpdateCohort() (gas: 8328518) SecurityCouncilMgmtUtilsTests:testIsInArray() (gas: 2102) SecurityCouncilNomineeElectionGovernorTest:testAddContender() (gas: 270750) SecurityCouncilNomineeElectionGovernorTest:testCastBySig() (gas: 333730) @@ -202,11 +202,11 @@ SecurityCouncilNomineeElectionGovernorTest:testProperInitialization() (gas: 7811 SecurityCouncilNomineeElectionGovernorTest:testProposeFails() (gas: 19740) SecurityCouncilNomineeElectionGovernorTest:testRelay() (gas: 42427) SecurityCouncilNomineeElectionGovernorTest:testSetNomineeVetter() (gas: 39905) -SequencerActionsTest:testAddAndRemoveSequencer() (gas: 483532) -SequencerActionsTest:testCantAddZeroAddress() (gas: 235614) -SetInitialGovParamsActionTest:testL1() (gas: 259904) -SetInitialGovParamsActionTest:testL2() (gas: 688888) -SetSequencerInboxMaxTimeVariationActionTest:testSetMaxTimeVariation() (gas: 374262) +SequencerActionsTest:testAddAndRemoveSequencer() (gas: 483622) +SequencerActionsTest:testCantAddZeroAddress() (gas: 235659) +SetInitialGovParamsActionTest:testL1() (gas: 259949) +SetInitialGovParamsActionTest:testL2() (gas: 688933) +SetSequencerInboxMaxTimeVariationActionTest:testSetMaxTimeVariation() (gas: 374307) SwitchManagerRolesActionTest:testAction() (gas: 6313) TokenDistributorTest:testClaim() (gas: 5742744) TokenDistributorTest:testClaimAndDelegate() (gas: 5850827) @@ -245,12 +245,13 @@ TokenDistributorTest:testZeroOwner() (gas: 4132646) TokenDistributorTest:testZeroReceiver() (gas: 4132675) TokenDistributorTest:testZeroToken() (gas: 71889) TopNomineesGasTest:testTopNomineesGas() (gas: 4502996) -UpgradeExecRouteBuilderTest:testAIP1Point2() (gas: 1444239) -UpgradeExecRouteBuilderTest:testRouteBuilderErrors() (gas: 1263265) -UpgradeExecutorTest:testAdminCanChangeExecutor() (gas: 2583801) -UpgradeExecutorTest:testCantExecuteEOA() (gas: 2439721) -UpgradeExecutorTest:testExecute() (gas: 2677995) -UpgradeExecutorTest:testExecuteFailsForAdmin() (gas: 2663614) -UpgradeExecutorTest:testExecuteFailsForNobody() (gas: 2665855) -UpgradeExecutorTest:testInit() (gas: 2427602) -UpgradeExecutorTest:testInitFailsZeroAdmin() (gas: 2288342) \ No newline at end of file +UpgradeExecRouteBuilderTest:testAIP1Point2() (gas: 1444246) +UpgradeExecRouteBuilderTest:testActionType() (gas: 1753432) +UpgradeExecRouteBuilderTest:testRouteBuilderErrors() (gas: 1263287) +UpgradeExecutorTest:testAdminCanChangeExecutor() (gas: 2739548) +UpgradeExecutorTest:testCantExecuteEOA() (gas: 2595534) +UpgradeExecutorTest:testExecute() (gas: 2833808) +UpgradeExecutorTest:testExecuteFailsForAdmin() (gas: 2819427) +UpgradeExecutorTest:testExecuteFailsForNobody() (gas: 2821668) +UpgradeExecutorTest:testInit() (gas: 2583172) +UpgradeExecutorTest:testInitFailsZeroAdmin() (gas: 2444110) \ No newline at end of file diff --git a/test/signatures/UpgradeExecutor b/test/signatures/UpgradeExecutor deleted file mode 100644 index 42683e764..000000000 --- a/test/signatures/UpgradeExecutor +++ /dev/null @@ -1,27 +0,0 @@ - -╭-------------------------------+------------╮ -| Method | Identifier | -+============================================+ -| ADMIN_ROLE() | 75b238fc | -|-------------------------------+------------| -| DEFAULT_ADMIN_ROLE() | a217fddf | -|-------------------------------+------------| -| EXECUTOR_ROLE() | 07bd0265 | -|-------------------------------+------------| -| execute(address,bytes) | 1cff79cd | -|-------------------------------+------------| -| getRoleAdmin(bytes32) | 248a9ca3 | -|-------------------------------+------------| -| grantRole(bytes32,address) | 2f2ff15d | -|-------------------------------+------------| -| hasRole(bytes32,address) | 91d14854 | -|-------------------------------+------------| -| initialize(address,address[]) | 946d9204 | -|-------------------------------+------------| -| renounceRole(bytes32,address) | 36568abe | -|-------------------------------+------------| -| revokeRole(bytes32,address) | d547741f | -|-------------------------------+------------| -| supportsInterface(bytes4) | 01ffc9a7 | -╰-------------------------------+------------╯ - diff --git a/test/storage/UpgradeExecutor b/test/storage/UpgradeExecutor deleted file mode 100644 index 17b41d91d..000000000 --- a/test/storage/UpgradeExecutor +++ /dev/null @@ -1,19 +0,0 @@ - -╭---------------+--------------------------------------------------------------+------+--------+-------+-----------------------------------------╮ -| Name | Type | Slot | Offset | Bytes | Contract | -+================================================================================================================================================+ -| _initialized | uint8 | 0 | 0 | 1 | src/UpgradeExecutor.sol:UpgradeExecutor | -|---------------+--------------------------------------------------------------+------+--------+-------+-----------------------------------------| -| _initializing | bool | 0 | 1 | 1 | src/UpgradeExecutor.sol:UpgradeExecutor | -|---------------+--------------------------------------------------------------+------+--------+-------+-----------------------------------------| -| __gap | uint256[50] | 1 | 0 | 1600 | src/UpgradeExecutor.sol:UpgradeExecutor | -|---------------+--------------------------------------------------------------+------+--------+-------+-----------------------------------------| -| __gap | uint256[50] | 51 | 0 | 1600 | src/UpgradeExecutor.sol:UpgradeExecutor | -|---------------+--------------------------------------------------------------+------+--------+-------+-----------------------------------------| -| _roles | mapping(bytes32 => struct AccessControlUpgradeable.RoleData) | 101 | 0 | 32 | src/UpgradeExecutor.sol:UpgradeExecutor | -|---------------+--------------------------------------------------------------+------+--------+-------+-----------------------------------------| -| __gap | uint256[49] | 102 | 0 | 1568 | src/UpgradeExecutor.sol:UpgradeExecutor | -|---------------+--------------------------------------------------------------+------+--------+-------+-----------------------------------------| -| _status | uint256 | 151 | 0 | 32 | src/UpgradeExecutor.sol:UpgradeExecutor | -╰---------------+--------------------------------------------------------------+------+--------+-------+-----------------------------------------╯ - From 8f5cd920caaafa760d776f518555c1c76f4aded0 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Fri, 18 Apr 2025 11:26:44 -0500 Subject: [PATCH 11/29] support executeCall in prop builder cli --- scripts/propBuilderCli.ts | 14 ++++++++++++-- scripts/proposals/buildProposal.ts | 17 +++++++++++++---- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/scripts/propBuilderCli.ts b/scripts/propBuilderCli.ts index 8f681a6d9..43a3a7c25 100644 --- a/scripts/propBuilderCli.ts +++ b/scripts/propBuilderCli.ts @@ -37,6 +37,12 @@ const options = yargs(process.argv.slice(2)) description: "Addresses for action contracts in proposal; indices should correspond to indices in actionChainIds", }, + actionTypes: { + type: "array", + number: true, + demandOption: false, + description: "The action types for each item in the proposal, 0 for execute, 1 for executeCall" + }, writeToJsonPath: { type: "string", demandOption: false, @@ -77,6 +83,7 @@ const options = yargs(process.argv.slice(2)) govChainProviderRPC: string; actionChainIds: number[]; actionAddresses: string[]; + actionTypes?: number[]; writeToJsonPath?: string; routeBuilderAddress: string; upgradeValues?: number[]; @@ -109,6 +116,7 @@ const main = async () => { options.actionAddresses, options.upgradeValues, options.upgradeDatas, + options.actionTypes, options.predecessor ); console.log("Proposal data:"); @@ -124,8 +132,8 @@ const main = async () => { } const proposalData = await (() => { - if (!options.upgradeValues && !options.upgradeDatas && !options.predecessor) { - console.log("Using defaults for upgradeValues, upgradeDatas, and predecessor"); + if (!options.upgradeValues && !options.upgradeDatas && !options.actionTypes && !options.predecessor) { + console.log("Using defaults for upgradeValues, upgradeDatas, actionTypes, and predecessor"); return buildProposal( govChainProvider, routeBuilderAddress, @@ -138,6 +146,7 @@ const main = async () => { const upgradeValues = options.upgradeValues || options.actionChainIds.map(() => constants.Zero); const upgradeDatas = options.upgradeDatas || options.actionChainIds.map(() => defaultUpgradeData); + const actionTypes = options.actionTypes || options.actionChainIds.map(() => 0); let predecessor = options.predecessor; return buildProposalCustom( govChainProvider, @@ -146,6 +155,7 @@ const main = async () => { options.actionAddresses, upgradeValues, upgradeDatas, + actionTypes, predecessor ); })(); diff --git a/scripts/proposals/buildProposal.ts b/scripts/proposals/buildProposal.ts index ebe4143a8..2cdc27a7d 100644 --- a/scripts/proposals/buildProposal.ts +++ b/scripts/proposals/buildProposal.ts @@ -19,24 +19,26 @@ async function _getCallDataFromRouteBuilder( actionAddresses: string[], actionValues: BigNumberish[] | undefined, actionDatas: BytesLike[] | undefined, + actionTypes: number[] | undefined, predecessor: BytesLike | undefined ) { const timelockSalt = _generateL1TimelockSalt(actionChainIds, actionAddresses); const routeBuilder = UpgradeExecRouteBuilder__factory.connect(routeBuilderAddress, provider); - if (actionValues && actionDatas && predecessor) { + if (actionValues && actionDatas && actionTypes && predecessor) { return ( - await routeBuilder.createActionRouteData( + await routeBuilder.createActionRouteData2( actionChainIds, actionAddresses, actionValues, actionDatas, + actionTypes, predecessor, timelockSalt ) )[1]; // returns [ArbSysAddress, Proposal Data] - } else if (actionValues || actionDatas || predecessor) { + } else if (actionValues || actionDatas || actionTypes || predecessor) { throw new Error( - "Custom actionValues, actionDatas and predecessor must all be provided if any are" + "Custom actionValues, actionDatas, actionTypes and predecessor must all be provided if any are" ); } else { return ( @@ -56,6 +58,7 @@ async function _buildProposal( actionAddresses: string[], actionValues: BigNumberish[] | undefined, actionDatas: BytesLike[] | undefined, + actionTypes: number[] | undefined, predecessor: BytesLike | undefined ): Promise { let calldata = await _getCallDataFromRouteBuilder( @@ -65,6 +68,7 @@ async function _buildProposal( actionAddresses, actionValues, actionDatas, + actionTypes, predecessor ); @@ -90,6 +94,7 @@ export function buildProposalCustom( actionAddresses: string[], actionValues: BigNumberish[], actionDatas: BytesLike[], + actionTypes: number[], predecessor: BytesLike ): Promise { return _buildProposal( @@ -99,6 +104,7 @@ export function buildProposalCustom( actionAddresses, actionValues, actionDatas, + actionTypes, predecessor ); } @@ -116,6 +122,7 @@ export function buildProposal( actionAddresses, undefined, undefined, + undefined, undefined ); } @@ -127,6 +134,7 @@ export async function buildNonEmergencySecurityCouncilProposal( actionAddresses: string[], actionValues?: BigNumberish[], actionDatas?: BytesLike[], + actionTypes?: number[], predecessor?: BytesLike ): Promise { // get data; unlike CoreProposal path, we keep the encoded sendTxToL1 call @@ -137,6 +145,7 @@ export async function buildNonEmergencySecurityCouncilProposal( actionAddresses, actionValues, actionDatas, + actionTypes, predecessor ); From b320bfa605a66f915a6be7da7f88c1261bd50aa1 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Fri, 18 Apr 2025 11:28:27 -0500 Subject: [PATCH 12/29] route builder deployment script --- .../deployUpgradeExecRouteBuilder.ts | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 scripts/security-council-mgmt-deployment/deployUpgradeExecRouteBuilder.ts diff --git a/scripts/security-council-mgmt-deployment/deployUpgradeExecRouteBuilder.ts b/scripts/security-council-mgmt-deployment/deployUpgradeExecRouteBuilder.ts new file mode 100644 index 000000000..070c58928 --- /dev/null +++ b/scripts/security-council-mgmt-deployment/deployUpgradeExecRouteBuilder.ts @@ -0,0 +1,40 @@ +import { JsonRpcProvider } from "@ethersproject/providers"; +import { ethers, Wallet } from "ethers"; +import { UpgradeExecRouteBuilder__factory } from "../../typechain-types"; + +async function deployRouteBuilder() { + const signer = new Wallet(process.env.PRIVATE_KEY!, new JsonRpcProvider(process.env.ARB_URL!)); + + const newRouteBuilder = await new UpgradeExecRouteBuilder__factory(signer).deploy( + [ + { + chainId: 1, + location: { + inbox: ethers.constants.AddressZero, + upgradeExecutor: '0x3ffFbAdAF827559da092217e474760E2b2c3CeDd' + } + }, + { + chainId: 42161, + location: { + inbox: '0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f', + upgradeExecutor: '0xCF57572261c7c2BCF21ffD220ea7d1a27D40A827' + } + }, + { + chainId: 42170, + location: { + inbox: '0xc4448b71118c9071Bcb9734A0EAc55D18A153949', + upgradeExecutor: '0x86a02dD71363c440b21F4c0E5B2Ad01Ffe1A7482' + } + } + ], + '0xE6841D92B0C345144506576eC13ECf5103aC7f49', + 259200 + ) + + await newRouteBuilder.deployed() + console.log("UpgradeExecRouteBuilder deployed to:", newRouteBuilder.address); +} + +deployRouteBuilder() \ No newline at end of file From 8f1acb811186c21d16a9214a785e2eb27a238a27 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Fri, 18 Apr 2025 11:30:20 -0500 Subject: [PATCH 13/29] start generate script --- scripts/proposals/OmnibusApr25/README.md | 15 ++++ scripts/proposals/OmnibusApr25/data.json | 22 ++++++ scripts/proposals/OmnibusApr25/generate.bash | 74 ++++++++++++++++++++ 3 files changed, 111 insertions(+) create mode 100644 scripts/proposals/OmnibusApr25/README.md create mode 100644 scripts/proposals/OmnibusApr25/data.json create mode 100755 scripts/proposals/OmnibusApr25/generate.bash diff --git a/scripts/proposals/OmnibusApr25/README.md b/scripts/proposals/OmnibusApr25/README.md new file mode 100644 index 000000000..28b289b60 --- /dev/null +++ b/scripts/proposals/OmnibusApr25/README.md @@ -0,0 +1,15 @@ +# Omnibus Proposal of April 2025 + +This proposal generation script and payload includes several different governance proposals. + +## Upgrade Executor Update + +link to forum and snapshot, brief description + +## Disable USDT Gateway + +## Timeboost Beneficiary change + +## SC Key Rotation + +mention pr #315 \ No newline at end of file diff --git a/scripts/proposals/OmnibusApr25/data.json b/scripts/proposals/OmnibusApr25/data.json new file mode 100644 index 000000000..3a9382171 --- /dev/null +++ b/scripts/proposals/OmnibusApr25/data.json @@ -0,0 +1,22 @@ +{ + "actionChainIds": [ + 1, + 42161, + 42170, + 1, + 42161, + 42170 + ], + "actionAddresses": [ + "0xBB86bBd4871728938B30A54Cc08E0eb2bC75302d", + "0x734B78823c4d979045EC23F38B54A070df7769FF", + "0x7d91da41daf1c2e1c3dbc6143289e077e0dba1ef", + "0x8d3425f7039645223517F6F6e60Ef04C28f4188F", + "0x5fcb496a31b7AE91e7c9078Ec662bd7A55cd3079", + "0xa5aBADAF73DFcf5261C7f55420418736707Dc0db" + ], + "arbSysSendTxToL1Args": { + "l1Timelock": "0xE6841D92B0C345144506576eC13ECf5103aC7f49", + "calldata": "0x8f2a0bb000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000000be8c5d68a1cf0dc3dfd7c171bdf7de134dd516338cb5989a7a42555255ad9aca000000000000000000000000000000000000000000000000000000000003f48000000000000000000000000000000000000000000000000000000000000000060000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c0000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000005e00000000000000000000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000000000000000000092000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000bb86bbd4871728938b30a54cc08e0eb2bc75302d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e90000000000000000000000005613af0474eb9c528a34701a5b1662e3c8fa06780000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000de505e42d50abd07c8d39dcf692920d56cba35da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000734b78823c4d979045ec23f38b54a070df7769ff00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000db216562328215e010f819b5abe947bad4ca961e000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000012b1389fbf261e781bdc3094d28636abfb03c5b3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd0000000000000000000000007d91da41daf1c2e1c3dbc6143289e077e0dba1ef00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000f58ea15b20983116c21b05c876cc8e6cdae5c2b900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a7482000000000000000000000000ebb11bbd7d72165fac86bb5ab1b07a602540b286000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001441cff79cd0000000000000000000000008d3425f7039645223517f6f6e60ef04c28f4188f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c4a49870870000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b50000000000000000000000005fcb496a31b7ae91e7c9078ec662bd7a55cd3079000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000241c31f7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b5000000000000000000000000a5abadaf73dfcf5261c7f55420418736707dc0db000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000241c31f71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } +} \ No newline at end of file diff --git a/scripts/proposals/OmnibusApr25/generate.bash b/scripts/proposals/OmnibusApr25/generate.bash new file mode 100755 index 000000000..992b112a7 --- /dev/null +++ b/scripts/proposals/OmnibusApr25/generate.bash @@ -0,0 +1,74 @@ +#!/bin/bash + +# Upgrade Executor Update (PROP1) +PROP1_CHAIN_IDS=(1 42161 42170) +PROP1_ADDRESSES=( + 0xBB86bBd4871728938B30A54Cc08E0eb2bC75302d # Ethereum + 0x734B78823c4d979045EC23F38B54A070df7769FF # Arbitrum One + 0x7d91da41daf1c2e1c3dbc6143289e077e0dba1ef # Arbitrum Nova +) +PROP1_DATAS=( + $(cast calldata "perform(address,address,address)" 0x5613AF0474EB9c528A34701A5b1662E3C8FA0678 0x3ffFbAdAF827559da092217e474760E2b2c3CeDd 0xDE505e42D50abd07c8D39Dcf692920d56cBA35Da) + $(cast calldata "perform(address,address,address)" 0xdb216562328215E010F819B5aBe947bad4ca961e 0xCF57572261c7c2BCF21ffD220ea7d1a27D40A827 0x12B1389Fbf261E781bdc3094d28636Abfb03C5b3) + $(cast calldata "perform(address,address,address)" 0xf58eA15B20983116c21b05c876cc8e6CDAe5C2b9 0x86a02dD71363c440b21F4c0E5B2Ad01Ffe1A7482 0xebb11Bbd7d72165FaC86bb5AB1B07A602540b286) +) +PROP1_ACTION_TYPES=(0 0 0) +PROP1_VALUES=(0 0 0) + +# Disable USDT Gateway (PROP2) +PROP2_CHAIN_IDS=(1) +PROP2_ADDRESSES=( + 0x8d3425f7039645223517F6F6e60Ef04C28f4188F +) +PROP2_DATAS=( + $(cast calldata "perform(address[], uint, uint, uint)" "[0xdac17f958d2ee523a2206206994597c13d831ec7]" 0 0 $(cast to-wei 0.0005)) +) +PROP2_ACTION_TYPES=(0) +PROP2_VALUES=( + $(cast to-wei 0.0005) +) + +# Timeboost Fee Split (PROP3) +PROP3_CHAIN_IDS=(42161 42170) +PROP3_ADDRESSES=( + 0x5fcb496a31b7AE91e7c9078Ec662bd7A55cd3079 # Arbitrum One ELA + 0xa5aBADAF73DFcf5261C7f55420418736707Dc0db # Arbitrum Nova ELA +) +PROP3_DATAS=( + # TODO: DEPLOY REWARD DISTRIBUTORS + $(cast calldata "setBeneficiary(address)" 0x0000000000000000000000000000000000000000) + $(cast calldata "setBeneficiary(address)" 0x0000000000000000000000000000000000000000) +) +PROP3_ACTION_TYPES=(1 1) # executeCall +PROP3_VALUES=(0 0) + +# SC Key Rotation Upgrade (PROP4) + +yarn gen:proposalData \ + --routeBuilderAddress 0x20eBEE002d53dbC02eaD1C55Bd7E31FF67615Ce0 \ + --govChainProviderRPC http://localhost:8545 \ + --actionChainIds \ + ${PROP1_CHAIN_IDS[@]} \ + ${PROP2_CHAIN_IDS[@]} \ + ${PROP3_CHAIN_IDS[@]} \ + --actionAddresses \ + ${PROP1_ADDRESSES[@]} \ + ${PROP2_ADDRESSES[@]} \ + ${PROP3_ADDRESSES[@]} \ + --upgradeDatas \ + ${PROP1_DATAS[@]} \ + ${PROP2_DATAS[@]} \ + ${PROP3_DATAS[@]} \ + --actionTypes \ + ${PROP1_ACTION_TYPES[@]} \ + ${PROP2_ACTION_TYPES[@]} \ + ${PROP3_ACTION_TYPES[@]} \ + --upgradeValues \ + ${PROP1_VALUES[@]} \ + ${PROP2_VALUES[@]} \ + ${PROP3_VALUES[@]} \ + --predecessor \ + 0x0000000000000000000000000000000000000000000000000000000000000000 \ + --writeToJsonPath \ + ./scripts/proposals/OmnibusApr25/data.json + From 08b315c9a0a027f8156814f4b058aebc7d7e9bf2 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Fri, 18 Apr 2025 12:53:22 -0500 Subject: [PATCH 14/29] Some fixes for #337 (#338) * use 1.1.1 IUpgradeExecutor * use 1.1.1 UpgradeExecutor contract * add tests for executeCall * fix ci * route builder deployment script --- .gas-snapshot | 103 +++++++++--------- package.json | 1 + remappings.txt | 1 + .../deployUpgradeExecRouteBuilder.ts | 40 +++++++ src/L1GovernanceFactory.sol | 2 +- src/L2GovernanceFactory.sol | 2 +- src/UpgradeExecRouteBuilder.sol | 2 +- src/UpgradeExecutor.sol | 60 ---------- .../GovernanceChainSCMgmtActivationAction.sol | 2 +- .../L1SCMgmtActivationAction.sol | 2 +- .../SecurityCouncilMgmtUpgradeLib.sol | 3 +- src/interfaces/IUpgradeExecutor.sol | 13 --- .../SecurityCouncilManager.sol | 2 +- test/L2GovernanceFactory.t.sol | 2 +- test/UpgradeExecRouteBuilder.t.sol | 41 ++++++- test/UpgradeExecutor.t.sol | 2 +- .../gov-actions/AIPNovaFeeRoutingAction.t.sol | 2 +- test/gov-actions/ProxyAdminUpgrader.t.sol | 2 +- test/security-council-mgmt/E2E.t.sol | 2 +- .../SecurityCouncilMemberSyncAction.t.sol | 2 +- .../SecurityCouncilUpgradeAction.t.sol | 2 +- test/signatures/UpgradeExecutor | 27 ----- test/storage/UpgradeExecutor | 19 ---- test/util/ActionTestBase.sol | 2 +- yarn.lock | 8 ++ 25 files changed, 158 insertions(+), 186 deletions(-) create mode 100644 scripts/security-council-mgmt-deployment/deployUpgradeExecRouteBuilder.ts delete mode 100644 src/UpgradeExecutor.sol delete mode 100644 src/interfaces/IUpgradeExecutor.sol delete mode 100644 test/signatures/UpgradeExecutor delete mode 100644 test/storage/UpgradeExecutor diff --git a/.gas-snapshot b/.gas-snapshot index 63624daea..3d36547f9 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,4 +1,4 @@ -AIP1Point2ActionTest:testAction() (gas: 629328) +AIP1Point2ActionTest:testAction() (gas: 629373) AIPNovaFeeRoutingActionTest:testAction() (gas: 3074) ArbitrumDAOConstitutionTest:testConstructor() (gas: 259383) ArbitrumDAOConstitutionTest:testMonOwnerCannotSetHash() (gas: 262836) @@ -26,12 +26,12 @@ ArbitrumVestingWalletTest:testDelegateFailsForNonBeneficiary() (gas: 16008435) ArbitrumVestingWalletTest:testDoesDeploy() (gas: 15971342) ArbitrumVestingWalletTest:testReleaseAffordance() (gas: 16008649) ArbitrumVestingWalletTest:testVestedAmountStart() (gas: 16074917) -E2E:testE2E() (gas: 84923676) +E2E:testE2E() (gas: 85079428) FixedDelegateErc20WalletTest:testInit() (gas: 5822575) FixedDelegateErc20WalletTest:testInitZeroToken() (gas: 5816805) FixedDelegateErc20WalletTest:testTransfer() (gas: 5932218) FixedDelegateErc20WalletTest:testTransferNotOwner() (gas: 5897843) -InboxActionsTest:testPauseAndUpauseInbox() (gas: 370454) +InboxActionsTest:testPauseAndUpauseInbox() (gas: 370544) L1AddressRegistryTest:testAddressRegistryAddress() (gas: 47009) L1ArbitrumTimelockTest:testCancel() (gas: 5324642) L1ArbitrumTimelockTest:testCancelFailsBadSender() (gas: 5369529) @@ -56,9 +56,9 @@ L1ArbitrumTokenTest:testInitZeroNovaGateway() (gas: 3177301) L1ArbitrumTokenTest:testInitZeroNovaRouter() (gas: 3177235) L1ArbitrumTokenTest:testRegisterTokenOnL2() (gas: 4568612) L1ArbitrumTokenTest:testRegisterTokenOnL2NotEnoughVal() (gas: 4425799) -L1GovernanceFactoryTest:testL1GovernanceFactory() (gas: 10771109) -L1GovernanceFactoryTest:testSetMinDelay() (gas: 10746003) -L1GovernanceFactoryTest:testSetMinDelayRevertsForCoreAddress() (gas: 10798958) +L1GovernanceFactoryTest:testL1GovernanceFactory() (gas: 10771066) +L1GovernanceFactoryTest:testSetMinDelay() (gas: 10746048) +L1GovernanceFactoryTest:testSetMinDelayRevertsForCoreAddress() (gas: 10799003) L2AddressRegistryTest:testAddressRegistryAddress() (gas: 54658) L2ArbitrumGovernorTest:testCantReinit() (gas: 13669489) L2ArbitrumGovernorTest:testExecutorPermissions() (gas: 13706483) @@ -85,15 +85,15 @@ L2ArbitrumTokenTest:testDoesNotInitialiseZeroL1Token() (gas: 3800726) L2ArbitrumTokenTest:testDoesNotInitialiseZeroOwner() (gas: 3800739) L2ArbitrumTokenTest:testIsInitialised() (gas: 4072777) L2ArbitrumTokenTest:testNoLogicContractInit() (gas: 2693127) -L2GovernanceFactoryTest:testContractsDeployed() (gas: 28359365) -L2GovernanceFactoryTest:testContractsInitialized() (gas: 28396315) -L2GovernanceFactoryTest:testDeploySteps() (gas: 28370874) -L2GovernanceFactoryTest:testProxyAdminOwnership() (gas: 28368375) -L2GovernanceFactoryTest:testRoles() (gas: 28391450) -L2GovernanceFactoryTest:testSanityCheckValues() (gas: 28415658) -L2GovernanceFactoryTest:testSetMinDelay() (gas: 28364371) -L2GovernanceFactoryTest:testSetMinDelayRevertsForCoreAddress() (gas: 28417242) -L2GovernanceFactoryTest:testUpgraderCanCancel() (gas: 28657360) +L2GovernanceFactoryTest:testContractsDeployed() (gas: 28514933) +L2GovernanceFactoryTest:testContractsInitialized() (gas: 28551928) +L2GovernanceFactoryTest:testDeploySteps() (gas: 28526442) +L2GovernanceFactoryTest:testProxyAdminOwnership() (gas: 28523943) +L2GovernanceFactoryTest:testRoles() (gas: 28546930) +L2GovernanceFactoryTest:testSanityCheckValues() (gas: 28571182) +L2GovernanceFactoryTest:testSetMinDelay() (gas: 28519939) +L2GovernanceFactoryTest:testSetMinDelayRevertsForCoreAddress() (gas: 28572810) +L2GovernanceFactoryTest:testUpgraderCanCancel() (gas: 28812928) L2SecurityCouncilMgmtFactoryTest:testMemberElectionGovDeployment() (gas: 30766071) L2SecurityCouncilMgmtFactoryTest:testNomineeElectionGovDeployment() (gas: 30770302) L2SecurityCouncilMgmtFactoryTest:testOnlyOwnerCanDeploy() (gas: 25780656) @@ -101,7 +101,7 @@ L2SecurityCouncilMgmtFactoryTest:testRemovalGovDeployment() (gas: 30768302) L2SecurityCouncilMgmtFactoryTest:testSecurityCouncilManagerDeployment() (gas: 30787395) NomineeGovernorV2UpgradeActionTest:testAction() (gas: 8153) OfficeHoursActionTest:testConstructor() (gas: 9050) -OfficeHoursActionTest:testFuzzOfficeHoursDeployment(uint256,uint256,int256,uint256,uint256,uint256) (runs: 258, μ: 317064, ~: 317184) +OfficeHoursActionTest:testFuzzOfficeHoursDeployment(uint256,uint256,int256,uint256,uint256,uint256) (runs: 256, μ: 317070, ~: 317184) OfficeHoursActionTest:testInvalidConstructorParameters() (gas: 235740) OfficeHoursActionTest:testPerformBeforeMinimumTimestamp() (gas: 8646) OfficeHoursActionTest:testPerformDuringOfficeHours() (gas: 9140) @@ -109,13 +109,13 @@ OfficeHoursActionTest:testPerformFridayUTCSaturdayLocal() (gas: 304792) OfficeHoursActionTest:testPerformMondayUTCSundayLocal() (gas: 304780) OfficeHoursActionTest:testPerformOnWeekend() (gas: 9327) OfficeHoursActionTest:testPerformOutsideOfficeHours() (gas: 9537) -OutboxActionsTest:testAddOutbxesAction() (gas: 651398) -OutboxActionsTest:testCantAddEOA() (gas: 968968) -OutboxActionsTest:testCantReAddOutbox() (gas: 974344) -OutboxActionsTest:testRemoveAllOutboxes() (gas: 693007) -OutboxActionsTest:testRemoveOutboxes() (gas: 853882) -ProxyUpgradeAndCallActionTest:testUpgrade() (gas: 137095) -ProxyUpgradeAndCallActionTest:testUpgradeAndCall() (gas: 143042) +OutboxActionsTest:testAddOutbxesAction() (gas: 651443) +OutboxActionsTest:testCantAddEOA() (gas: 969058) +OutboxActionsTest:testCantReAddOutbox() (gas: 974434) +OutboxActionsTest:testRemoveAllOutboxes() (gas: 693079) +OutboxActionsTest:testRemoveOutboxes() (gas: 853972) +ProxyUpgradeAndCallActionTest:testUpgrade() (gas: 137140) +ProxyUpgradeAndCallActionTest:testUpgradeAndCall() (gas: 143087) SecurityCouncilManagerTest:testAddMemberAffordances() (gas: 250192) SecurityCouncilManagerTest:testAddMemberSpecialAddresses() (gas: 20795) SecurityCouncilManagerTest:testAddMemberToFirstCohort() (gas: 340846) @@ -153,7 +153,7 @@ SecurityCouncilMemberElectionGovernorTest:testOnlyNomineeElectionGovernorCanProp SecurityCouncilMemberElectionGovernorTest:testProperInitialization() (gas: 49388) SecurityCouncilMemberElectionGovernorTest:testProposeReverts() (gas: 32916) SecurityCouncilMemberElectionGovernorTest:testRelay() (gas: 42229) -SecurityCouncilMemberElectionGovernorTest:testSelectTopNominees(uint256) (runs: 258, μ: 340043, ~: 339909) +SecurityCouncilMemberElectionGovernorTest:testSelectTopNominees(uint256) (runs: 256, μ: 340075, ~: 339909) SecurityCouncilMemberElectionGovernorTest:testSelectTopNomineesFails() (gas: 273335) SecurityCouncilMemberElectionGovernorTest:testSetFullWeightDuration() (gas: 34951) SecurityCouncilMemberElectionGovernorTest:testVotesToWeight() (gas: 152898) @@ -173,19 +173,19 @@ SecurityCouncilMemberRemovalGovernorTest:testSetVoteSuccessNumeratorAffordance() SecurityCouncilMemberRemovalGovernorTest:testSuccessNumeratorInsufficientVotes() (gas: 358327) SecurityCouncilMemberRemovalGovernorTest:testSuccessNumeratorSufficientVotes() (gas: 361245) SecurityCouncilMemberRemovalGovernorTest:testSuccessfulProposalAndCantAbstain() (gas: 142674) -SecurityCouncilMemberSyncActionTest:testAddOne() (gas: 7938503) -SecurityCouncilMemberSyncActionTest:testAddOne() (gas: 7939341) -SecurityCouncilMemberSyncActionTest:testCantDropBelowThreshhold() (gas: 7965404) -SecurityCouncilMemberSyncActionTest:testCantDropBelowThreshhold() (gas: 7965411) -SecurityCouncilMemberSyncActionTest:testGetPrevOwner() (gas: 7929385) -SecurityCouncilMemberSyncActionTest:testGetPrevOwner() (gas: 7929385) -SecurityCouncilMemberSyncActionTest:testNonces() (gas: 8229875) -SecurityCouncilMemberSyncActionTest:testNoopUpdate() (gas: 7928439) -SecurityCouncilMemberSyncActionTest:testNoopUpdate() (gas: 7929365) -SecurityCouncilMemberSyncActionTest:testRemoveOne() (gas: 7929685) -SecurityCouncilMemberSyncActionTest:testRemoveOne() (gas: 7930546) -SecurityCouncilMemberSyncActionTest:testUpdateCohort() (gas: 8171934) -SecurityCouncilMemberSyncActionTest:testUpdateCohort() (gas: 8172795) +SecurityCouncilMemberSyncActionTest:testAddOne() (gas: 8094226) +SecurityCouncilMemberSyncActionTest:testAddOne() (gas: 8095064) +SecurityCouncilMemberSyncActionTest:testCantDropBelowThreshhold() (gas: 8121127) +SecurityCouncilMemberSyncActionTest:testCantDropBelowThreshhold() (gas: 8121134) +SecurityCouncilMemberSyncActionTest:testGetPrevOwner() (gas: 8085063) +SecurityCouncilMemberSyncActionTest:testGetPrevOwner() (gas: 8085063) +SecurityCouncilMemberSyncActionTest:testNonces() (gas: 8385778) +SecurityCouncilMemberSyncActionTest:testNoopUpdate() (gas: 8084162) +SecurityCouncilMemberSyncActionTest:testNoopUpdate() (gas: 8085088) +SecurityCouncilMemberSyncActionTest:testRemoveOne() (gas: 8085408) +SecurityCouncilMemberSyncActionTest:testRemoveOne() (gas: 8086269) +SecurityCouncilMemberSyncActionTest:testUpdateCohort() (gas: 8327657) +SecurityCouncilMemberSyncActionTest:testUpdateCohort() (gas: 8328518) SecurityCouncilMgmtUtilsTests:testIsInArray() (gas: 2102) SecurityCouncilNomineeElectionGovernorTest:testAddContender() (gas: 270750) SecurityCouncilNomineeElectionGovernorTest:testCastBySig() (gas: 333730) @@ -202,11 +202,11 @@ SecurityCouncilNomineeElectionGovernorTest:testProperInitialization() (gas: 7811 SecurityCouncilNomineeElectionGovernorTest:testProposeFails() (gas: 19740) SecurityCouncilNomineeElectionGovernorTest:testRelay() (gas: 42427) SecurityCouncilNomineeElectionGovernorTest:testSetNomineeVetter() (gas: 39905) -SequencerActionsTest:testAddAndRemoveSequencer() (gas: 483532) -SequencerActionsTest:testCantAddZeroAddress() (gas: 235614) -SetInitialGovParamsActionTest:testL1() (gas: 259904) -SetInitialGovParamsActionTest:testL2() (gas: 688888) -SetSequencerInboxMaxTimeVariationActionTest:testSetMaxTimeVariation() (gas: 374262) +SequencerActionsTest:testAddAndRemoveSequencer() (gas: 483622) +SequencerActionsTest:testCantAddZeroAddress() (gas: 235659) +SetInitialGovParamsActionTest:testL1() (gas: 259949) +SetInitialGovParamsActionTest:testL2() (gas: 688933) +SetSequencerInboxMaxTimeVariationActionTest:testSetMaxTimeVariation() (gas: 374307) SwitchManagerRolesActionTest:testAction() (gas: 6313) TokenDistributorTest:testClaim() (gas: 5742744) TokenDistributorTest:testClaimAndDelegate() (gas: 5850827) @@ -245,12 +245,13 @@ TokenDistributorTest:testZeroOwner() (gas: 4132646) TokenDistributorTest:testZeroReceiver() (gas: 4132675) TokenDistributorTest:testZeroToken() (gas: 71889) TopNomineesGasTest:testTopNomineesGas() (gas: 4502996) -UpgradeExecRouteBuilderTest:testAIP1Point2() (gas: 1444239) -UpgradeExecRouteBuilderTest:testRouteBuilderErrors() (gas: 1263265) -UpgradeExecutorTest:testAdminCanChangeExecutor() (gas: 2583801) -UpgradeExecutorTest:testCantExecuteEOA() (gas: 2439721) -UpgradeExecutorTest:testExecute() (gas: 2677995) -UpgradeExecutorTest:testExecuteFailsForAdmin() (gas: 2663614) -UpgradeExecutorTest:testExecuteFailsForNobody() (gas: 2665855) -UpgradeExecutorTest:testInit() (gas: 2427602) -UpgradeExecutorTest:testInitFailsZeroAdmin() (gas: 2288342) \ No newline at end of file +UpgradeExecRouteBuilderTest:testAIP1Point2() (gas: 1444246) +UpgradeExecRouteBuilderTest:testActionType() (gas: 1753432) +UpgradeExecRouteBuilderTest:testRouteBuilderErrors() (gas: 1263287) +UpgradeExecutorTest:testAdminCanChangeExecutor() (gas: 2739548) +UpgradeExecutorTest:testCantExecuteEOA() (gas: 2595534) +UpgradeExecutorTest:testExecute() (gas: 2833808) +UpgradeExecutorTest:testExecuteFailsForAdmin() (gas: 2819427) +UpgradeExecutorTest:testExecuteFailsForNobody() (gas: 2821668) +UpgradeExecutorTest:testInit() (gas: 2583172) +UpgradeExecutorTest:testInitFailsZeroAdmin() (gas: 2444110) \ No newline at end of file diff --git a/package.json b/package.json index 54acd0e9e..940763f1c 100644 --- a/package.json +++ b/package.json @@ -79,6 +79,7 @@ "@arbitrum/nitro-contracts": "1.1.1", "@arbitrum/token-bridge-contracts": "1.0.0-beta.0", "@gnosis.pm/safe-contracts": "1.3.0", + "@offchainlabs/upgrade-executor": "1.1.1", "@openzeppelin/contracts": "4.7.3", "@openzeppelin/contracts-upgradeable": "4.7.3", "@types/yargs": "^17.0.17", diff --git a/remappings.txt b/remappings.txt index aa38660ff..c2bc29377 100644 --- a/remappings.txt +++ b/remappings.txt @@ -5,4 +5,5 @@ solady/=lib/solady/src/ @openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/ @openzeppelin/contracts/=node_modules/@openzeppelin/contracts/ @gnosis.pm/safe-contracts/=node_modules/@gnosis.pm/safe-contracts/ +@offchainlabs/upgrade-executor=node_modules/@offchainlabs/upgrade-executor/ ds-test/=lib/forge-std/lib/ds-test/src/ diff --git a/scripts/security-council-mgmt-deployment/deployUpgradeExecRouteBuilder.ts b/scripts/security-council-mgmt-deployment/deployUpgradeExecRouteBuilder.ts new file mode 100644 index 000000000..070c58928 --- /dev/null +++ b/scripts/security-council-mgmt-deployment/deployUpgradeExecRouteBuilder.ts @@ -0,0 +1,40 @@ +import { JsonRpcProvider } from "@ethersproject/providers"; +import { ethers, Wallet } from "ethers"; +import { UpgradeExecRouteBuilder__factory } from "../../typechain-types"; + +async function deployRouteBuilder() { + const signer = new Wallet(process.env.PRIVATE_KEY!, new JsonRpcProvider(process.env.ARB_URL!)); + + const newRouteBuilder = await new UpgradeExecRouteBuilder__factory(signer).deploy( + [ + { + chainId: 1, + location: { + inbox: ethers.constants.AddressZero, + upgradeExecutor: '0x3ffFbAdAF827559da092217e474760E2b2c3CeDd' + } + }, + { + chainId: 42161, + location: { + inbox: '0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f', + upgradeExecutor: '0xCF57572261c7c2BCF21ffD220ea7d1a27D40A827' + } + }, + { + chainId: 42170, + location: { + inbox: '0xc4448b71118c9071Bcb9734A0EAc55D18A153949', + upgradeExecutor: '0x86a02dD71363c440b21F4c0E5B2Ad01Ffe1A7482' + } + } + ], + '0xE6841D92B0C345144506576eC13ECf5103aC7f49', + 259200 + ) + + await newRouteBuilder.deployed() + console.log("UpgradeExecRouteBuilder deployed to:", newRouteBuilder.address); +} + +deployRouteBuilder() \ No newline at end of file diff --git a/src/L1GovernanceFactory.sol b/src/L1GovernanceFactory.sol index c6292aad5..ebc99b841 100644 --- a/src/L1GovernanceFactory.sol +++ b/src/L1GovernanceFactory.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.16; import "./L1ArbitrumTimelock.sol"; -import "./UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; diff --git a/src/L2GovernanceFactory.sol b/src/L2GovernanceFactory.sol index 5a4ad6b9f..5528eb63c 100644 --- a/src/L2GovernanceFactory.sol +++ b/src/L2GovernanceFactory.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.16; import "./L2ArbitrumToken.sol"; import "./L2ArbitrumGovernor.sol"; import "./ArbitrumTimelock.sol"; -import "./UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "./FixedDelegateErc20Wallet.sol"; import "./ArbitrumDAOConstitution.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; diff --git a/src/UpgradeExecRouteBuilder.sol b/src/UpgradeExecRouteBuilder.sol index 4d330ad95..431e8a15f 100644 --- a/src/UpgradeExecRouteBuilder.sol +++ b/src/UpgradeExecRouteBuilder.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.16; import "@arbitrum/nitro-contracts/src/precompiles/ArbSys.sol"; -import "./interfaces/IUpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/IUpgradeExecutor.sol"; import "./L1ArbitrumTimelock.sol"; import "./security-council-mgmt/Common.sol"; diff --git a/src/UpgradeExecutor.sol b/src/UpgradeExecutor.sol deleted file mode 100644 index adaa6d830..000000000 --- a/src/UpgradeExecutor.sol +++ /dev/null @@ -1,60 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity 0.8.16; - -import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; -import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; -import "@openzeppelin/contracts/utils/Address.sol"; - -/// @title A root contract from which it execute upgrades -/// @notice Does not contain upgrade logic itself, only the means to call upgrade contracts and execute them -/// @dev We use these upgrade contracts as they allow multiple actions to take place in an upgrade -/// and for these actions to interact. However because we are delegatecalling into these upgrade -/// contracts, it's important that these upgrade contract do not touch or modify contract state. -contract UpgradeExecutor is Initializable, AccessControlUpgradeable, ReentrancyGuard { - using Address for address; - - bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE"); - bytes32 public constant EXECUTOR_ROLE = keccak256("EXECUTOR_ROLE"); - - /// @notice Emitted when an upgrade execution occurs - event UpgradeExecuted(address indexed upgrade, uint256 value, bytes data); - - constructor() { - _disableInitializers(); - } - - /// @notice Initialise the upgrade executor - /// @param admin The admin who can update other roles, and itself - ADMIN_ROLE - /// @param executors Can call the execute function - EXECUTOR_ROLE - function initialize(address admin, address[] memory executors) public initializer { - require(admin != address(0), "UpgradeExecutor: zero admin"); - - __AccessControl_init(); - - _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE); - _setRoleAdmin(EXECUTOR_ROLE, ADMIN_ROLE); - - _setupRole(ADMIN_ROLE, admin); - for (uint256 i = 0; i < executors.length; ++i) { - _setupRole(EXECUTOR_ROLE, executors[i]); - } - } - - /// @notice Execute an upgrade by delegate calling an upgrade contract - /// @dev Only executor can call this. Since we're using a delegatecall here the Upgrade contract - /// will have access to the state of this contract - including the roles. Only upgrade contracts - /// that do not touch local state should be used. - function execute(address upgrade, bytes memory upgradeCallData) - public - payable - onlyRole(EXECUTOR_ROLE) - nonReentrant - { - // OZ Address library check if the address is a contract and bubble up inner revert reason - address(upgrade).functionDelegateCall( - upgradeCallData, "UpgradeExecutor: inner delegate call failed without reason" - ); - - emit UpgradeExecuted(upgrade, msg.value, upgradeCallData); - } -} diff --git a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/GovernanceChainSCMgmtActivationAction.sol b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/GovernanceChainSCMgmtActivationAction.sol index fe798894c..85b106dd4 100644 --- a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/GovernanceChainSCMgmtActivationAction.sol +++ b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/GovernanceChainSCMgmtActivationAction.sol @@ -5,7 +5,7 @@ import "../../../security-council-mgmt/interfaces/IGnosisSafe.sol"; import "../../address-registries/L2AddressRegistryInterfaces.sol"; import "./SecurityCouncilMgmtUpgradeLib.sol"; import "../../../interfaces/IArbitrumDAOConstitution.sol"; -import "../../../interfaces/IUpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/IUpgradeExecutor.sol"; import "../../../interfaces/ICoreTimelock.sol"; import "@openzeppelin/contracts/utils/Address.sol"; diff --git a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/L1SCMgmtActivationAction.sol b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/L1SCMgmtActivationAction.sol index 602e149cf..e1cebc91f 100644 --- a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/L1SCMgmtActivationAction.sol +++ b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/L1SCMgmtActivationAction.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.16; import "../../../security-council-mgmt/interfaces/IGnosisSafe.sol"; -import "../../../interfaces/IUpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/IUpgradeExecutor.sol"; import "../../../interfaces/ICoreTimelock.sol"; import "./SecurityCouncilMgmtUpgradeLib.sol"; diff --git a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/SecurityCouncilMgmtUpgradeLib.sol b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/SecurityCouncilMgmtUpgradeLib.sol index d306f1677..7726c1dc5 100644 --- a/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/SecurityCouncilMgmtUpgradeLib.sol +++ b/src/gov-action-contracts/AIPs/SecurityCouncilMgmt/SecurityCouncilMgmtUpgradeLib.sol @@ -2,7 +2,8 @@ pragma solidity 0.8.16; import "../../../security-council-mgmt/interfaces/IGnosisSafe.sol"; -import "../../../interfaces/IUpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/IUpgradeExecutor.sol"; +import "@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol"; library SecurityCouncilMgmtUpgradeLib { function replaceEmergencySecurityCouncil( diff --git a/src/interfaces/IUpgradeExecutor.sol b/src/interfaces/IUpgradeExecutor.sol deleted file mode 100644 index 22f598911..000000000 --- a/src/interfaces/IUpgradeExecutor.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity 0.8.16; - -import "@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol"; - -// TODO: import from @offchainlabs/upgrade-executor@1.1.1 -interface IUpgradeExecutor { - function initialize(address admin, address[] memory executors) external; - function execute(address upgrade, bytes memory upgradeCallData) external payable; - function executeCall(address target, bytes memory targetCallData) external payable; - function ADMIN_ROLE() external view returns (bytes32); - function EXECUTOR_ROLE() external view returns (bytes32); -} diff --git a/src/security-council-mgmt/SecurityCouncilManager.sol b/src/security-council-mgmt/SecurityCouncilManager.sol index fb03bf742..c657401a5 100644 --- a/src/security-council-mgmt/SecurityCouncilManager.sol +++ b/src/security-council-mgmt/SecurityCouncilManager.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.16; import "../ArbitrumTimelock.sol"; -import "../UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "../L1ArbitrumTimelock.sol"; import "./SecurityCouncilMgmtUtils.sol"; import "./interfaces/ISecurityCouncilManager.sol"; diff --git a/test/L2GovernanceFactory.t.sol b/test/L2GovernanceFactory.t.sol index 13ad94051..6cbf64687 100644 --- a/test/L2GovernanceFactory.t.sol +++ b/test/L2GovernanceFactory.t.sol @@ -3,7 +3,7 @@ import "../src/L2GovernanceFactory.sol"; import "../src/L2ArbitrumGovernor.sol"; -import "../src/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "../src/ArbitrumTimelock.sol"; import "../src/ArbitrumDAOConstitution.sol"; diff --git a/test/UpgradeExecRouteBuilder.t.sol b/test/UpgradeExecRouteBuilder.t.sol index 22759e0dd..632d91115 100644 --- a/test/UpgradeExecRouteBuilder.t.sol +++ b/test/UpgradeExecRouteBuilder.t.sol @@ -13,6 +13,10 @@ contract UpgradeExecRouteBuilderTest is Test { bytes aipData = hex"8f2a0bb000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000067565fcc91c79be6e957056bdf0ed93287216afcc5ea02fec16f1900a177a3c5000000000000000000000000000000000000000000000000000000000003f4800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001800000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000841cff79cd0000000000000000000000006274106eedd4848371d2c09e0352d67b795ed51600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004b147f40c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + // same as aipData but execute selector replaced with executeCall + bytes aipDataExecuteCall = + hex"8f2a0bb000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000067565fcc91c79be6e957056bdf0ed93287216afcc5ea02fec16f1900a177a3c5000000000000000000000000000000000000000000000000000000000003f4800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001800000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000084bca8c7b50000000000000000000000006274106eedd4848371d2c09e0352d67b795ed51600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004b147f40c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + address aip1Point2ActionAddress = 0x6274106eedD4848371D2C09e0352d67B795ED516; bytes32 aip1Point2TimelockSalt = 0x67565fcc91c79be6e957056bdf0ed93287216afcc5ea02fec16f1900a177a3c5; @@ -49,6 +53,42 @@ contract UpgradeExecRouteBuilderTest is Test { ); } + function testActionType() public { + UpgradeExecRouteBuilder routeBuilder = deployRouteBuilder(); + + uint256[] memory chainIds = new uint256[](1); + chainIds[0] = 42_161; + address[] memory actionAddresses = new address[](1); + actionAddresses[0] = aip1Point2ActionAddress; + uint256[] memory actionValues = new uint256[](1); + actionValues[0] = 0; + bytes[] memory actionDatas = new bytes[](1); + actionDatas[0] = abi.encodeWithSignature("perform()"); + bytes32 predecessor = 0; + bytes32 salt = aip1Point2TimelockSalt; + + uint256[] memory actionTypes = new uint256[](1); + + // execute + (address to, bytes memory data) = routeBuilder.createActionRouteData2( + chainIds, actionAddresses, actionValues, actionDatas, actionTypes, predecessor, salt + ); + assertEq(to, arbSys); + assertEq( + data, abi.encodeWithSelector(ArbSys.sendTxToL1.selector, l1TimelockAddress, aipData) + ); + + // executeCall + actionTypes[0] = 1; + (address to2, bytes memory data2) = routeBuilder.createActionRouteData2( + chainIds, actionAddresses, actionValues, actionDatas, actionTypes, predecessor, salt + ); + assertEq(to2, arbSys); + assertEq( + data2, abi.encodeWithSelector(ArbSys.sendTxToL1.selector, l1TimelockAddress, aipDataExecuteCall) + ); + } + // test all the error conditions for the createActionRouteData funtion on the route builder function testRouteBuilderErrors() public { UpgradeExecRouteBuilder routeBuilder = deployRouteBuilder(); @@ -111,6 +151,5 @@ contract UpgradeExecRouteBuilderTest is Test { routeBuilder.createActionRouteData2( chainIds, actionAddresses, actionValues, actionDatas, badActionTypes, predecessor, salt ); - // TODO: more test for execute vs executeCall } } diff --git a/test/UpgradeExecutor.t.sol b/test/UpgradeExecutor.t.sol index f27e8047c..5213c1ee0 100644 --- a/test/UpgradeExecutor.t.sol +++ b/test/UpgradeExecutor.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.16; -import "../src/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "./util/TestUtil.sol"; import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; diff --git a/test/gov-actions/AIPNovaFeeRoutingAction.t.sol b/test/gov-actions/AIPNovaFeeRoutingAction.t.sol index 93b79753d..a1b09d66e 100644 --- a/test/gov-actions/AIPNovaFeeRoutingAction.t.sol +++ b/test/gov-actions/AIPNovaFeeRoutingAction.t.sol @@ -6,7 +6,7 @@ pragma solidity 0.8.16; import "forge-std/Test.sol"; import "../../src/gov-action-contracts/AIPs/AIPNovaFeeRoutingAction.sol"; -import "../../src/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; contract AIPNovaFeeRoutingActionTest is Test { UpgradeExecutor constant upExec = UpgradeExecutor(0x86a02dD71363c440b21F4c0E5B2Ad01Ffe1A7482); diff --git a/test/gov-actions/ProxyAdminUpgrader.t.sol b/test/gov-actions/ProxyAdminUpgrader.t.sol index 39b3f4244..605ef39b0 100644 --- a/test/gov-actions/ProxyAdminUpgrader.t.sol +++ b/test/gov-actions/ProxyAdminUpgrader.t.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.16; import "forge-std/Test.sol"; import "../util/TestUtil.sol"; -import "../../src/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "../../src/gov-action-contracts/gov-upgrade-contracts/upgrade-proxy/ProxyUpgradeAndCallAction.sol"; import "../../src/gov-action-contracts/gov-upgrade-contracts/upgrade-proxy/ProxyUpgradeAction.sol"; diff --git a/test/security-council-mgmt/E2E.t.sol b/test/security-council-mgmt/E2E.t.sol index d53809430..b3a649d55 100644 --- a/test/security-council-mgmt/E2E.t.sol +++ b/test/security-council-mgmt/E2E.t.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.16; import "forge-std/Test.sol"; -import "../../src/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "../../src/ArbitrumTimelock.sol"; import "../../src/L2ArbitrumGovernor.sol"; import "../../src/FixedDelegateErc20Wallet.sol"; diff --git a/test/security-council-mgmt/SecurityCouncilMemberSyncAction.t.sol b/test/security-council-mgmt/SecurityCouncilMemberSyncAction.t.sol index 1f9414743..710ceffb4 100644 --- a/test/security-council-mgmt/SecurityCouncilMemberSyncAction.t.sol +++ b/test/security-council-mgmt/SecurityCouncilMemberSyncAction.t.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.16; import "@gnosis.pm/safe-contracts/contracts/GnosisSafeL2.sol"; import "../util/TestUtil.sol"; import "../util/DeployGnosisWithModule.sol"; -import "../../src/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "../../src/security-council-mgmt/SecurityCouncilMemberSyncAction.sol"; import "../../src/security-council-mgmt/interfaces/IGnosisSafe.sol"; diff --git a/test/security-council-mgmt/SecurityCouncilUpgradeAction.t.sol b/test/security-council-mgmt/SecurityCouncilUpgradeAction.t.sol index aa67cd967..cdd397709 100644 --- a/test/security-council-mgmt/SecurityCouncilUpgradeAction.t.sol +++ b/test/security-council-mgmt/SecurityCouncilUpgradeAction.t.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.16; import "@gnosis.pm/safe-contracts/contracts/GnosisSafeL2.sol"; import "../util/TestUtil.sol"; import "../util/DeployGnosisWithModule.sol"; -import "../../src/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "../../src/security-council-mgmt/SecurityCouncilMemberSyncAction.sol"; import "../../src/security-council-mgmt/interfaces/IGnosisSafe.sol"; diff --git a/test/signatures/UpgradeExecutor b/test/signatures/UpgradeExecutor deleted file mode 100644 index 42683e764..000000000 --- a/test/signatures/UpgradeExecutor +++ /dev/null @@ -1,27 +0,0 @@ - -╭-------------------------------+------------╮ -| Method | Identifier | -+============================================+ -| ADMIN_ROLE() | 75b238fc | -|-------------------------------+------------| -| DEFAULT_ADMIN_ROLE() | a217fddf | -|-------------------------------+------------| -| EXECUTOR_ROLE() | 07bd0265 | -|-------------------------------+------------| -| execute(address,bytes) | 1cff79cd | -|-------------------------------+------------| -| getRoleAdmin(bytes32) | 248a9ca3 | -|-------------------------------+------------| -| grantRole(bytes32,address) | 2f2ff15d | -|-------------------------------+------------| -| hasRole(bytes32,address) | 91d14854 | -|-------------------------------+------------| -| initialize(address,address[]) | 946d9204 | -|-------------------------------+------------| -| renounceRole(bytes32,address) | 36568abe | -|-------------------------------+------------| -| revokeRole(bytes32,address) | d547741f | -|-------------------------------+------------| -| supportsInterface(bytes4) | 01ffc9a7 | -╰-------------------------------+------------╯ - diff --git a/test/storage/UpgradeExecutor b/test/storage/UpgradeExecutor deleted file mode 100644 index 17b41d91d..000000000 --- a/test/storage/UpgradeExecutor +++ /dev/null @@ -1,19 +0,0 @@ - -╭---------------+--------------------------------------------------------------+------+--------+-------+-----------------------------------------╮ -| Name | Type | Slot | Offset | Bytes | Contract | -+================================================================================================================================================+ -| _initialized | uint8 | 0 | 0 | 1 | src/UpgradeExecutor.sol:UpgradeExecutor | -|---------------+--------------------------------------------------------------+------+--------+-------+-----------------------------------------| -| _initializing | bool | 0 | 1 | 1 | src/UpgradeExecutor.sol:UpgradeExecutor | -|---------------+--------------------------------------------------------------+------+--------+-------+-----------------------------------------| -| __gap | uint256[50] | 1 | 0 | 1600 | src/UpgradeExecutor.sol:UpgradeExecutor | -|---------------+--------------------------------------------------------------+------+--------+-------+-----------------------------------------| -| __gap | uint256[50] | 51 | 0 | 1600 | src/UpgradeExecutor.sol:UpgradeExecutor | -|---------------+--------------------------------------------------------------+------+--------+-------+-----------------------------------------| -| _roles | mapping(bytes32 => struct AccessControlUpgradeable.RoleData) | 101 | 0 | 32 | src/UpgradeExecutor.sol:UpgradeExecutor | -|---------------+--------------------------------------------------------------+------+--------+-------+-----------------------------------------| -| __gap | uint256[49] | 102 | 0 | 1568 | src/UpgradeExecutor.sol:UpgradeExecutor | -|---------------+--------------------------------------------------------------+------+--------+-------+-----------------------------------------| -| _status | uint256 | 151 | 0 | 32 | src/UpgradeExecutor.sol:UpgradeExecutor | -╰---------------+--------------------------------------------------------------+------+--------+-------+-----------------------------------------╯ - diff --git a/test/util/ActionTestBase.sol b/test/util/ActionTestBase.sol index d82c7aa8e..5be3c1837 100644 --- a/test/util/ActionTestBase.sol +++ b/test/util/ActionTestBase.sol @@ -15,7 +15,7 @@ import "../../src/ArbitrumTimelock.sol"; import "../../src/L1ArbitrumTimelock.sol"; import "../../src/FixedDelegateErc20Wallet.sol"; import "../util/TestUtil.sol"; -import "../../src/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/UpgradeExecutor.sol"; import "../../src/ArbitrumDAOConstitution.sol"; import "../../src/gov-action-contracts/address-registries/L1AddressRegistry.sol" as _ar; import "../../src/gov-action-contracts/address-registries/L2AddressRegistry.sol" as _ar1; diff --git a/yarn.lock b/yarn.lock index 2ee098f38..24b340d80 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1183,6 +1183,14 @@ "@openzeppelin/contracts" "4.7.3" "@openzeppelin/contracts-upgradeable" "4.7.3" +"@offchainlabs/upgrade-executor@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@offchainlabs/upgrade-executor/-/upgrade-executor-1.1.1.tgz#ae3dfe4a183d88c0c3fd3b39ab6dd6508b371b53" + integrity sha512-/hnUblMbzXS4asPdTSWjFUn/N5+E71dVfDW1314j/r/847OIy1VHZDFhw+fOlUGL5/qrZu2UV34oZAwwrRV4tg== + dependencies: + "@openzeppelin/contracts" "4.7.3" + "@openzeppelin/contracts-upgradeable" "4.7.3" + "@openzeppelin/contracts-upgradeable@3.4.2": version "3.4.2" resolved "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-3.4.2.tgz" From 938b7fb011f22735aab69a152ef595ab852603de Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Fri, 18 Apr 2025 13:04:53 -0500 Subject: [PATCH 15/29] add sc upgrade --- scripts/proposals/OmnibusApr25/data.json | 8 +++++--- scripts/proposals/OmnibusApr25/generate.bash | 13 +++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/scripts/proposals/OmnibusApr25/data.json b/scripts/proposals/OmnibusApr25/data.json index 3a9382171..14e0ec330 100644 --- a/scripts/proposals/OmnibusApr25/data.json +++ b/scripts/proposals/OmnibusApr25/data.json @@ -5,7 +5,8 @@ 42170, 1, 42161, - 42170 + 42170, + 42161 ], "actionAddresses": [ "0xBB86bBd4871728938B30A54Cc08E0eb2bC75302d", @@ -13,10 +14,11 @@ "0x7d91da41daf1c2e1c3dbc6143289e077e0dba1ef", "0x8d3425f7039645223517F6F6e60Ef04C28f4188F", "0x5fcb496a31b7AE91e7c9078Ec662bd7A55cd3079", - "0xa5aBADAF73DFcf5261C7f55420418736707Dc0db" + "0xa5aBADAF73DFcf5261C7f55420418736707Dc0db", + "0x86E93E21AD108CaE7ADe482C34C230Bfd94D4A8B" ], "arbSysSendTxToL1Args": { "l1Timelock": "0xE6841D92B0C345144506576eC13ECf5103aC7f49", - "calldata": "0x8f2a0bb000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000000be8c5d68a1cf0dc3dfd7c171bdf7de134dd516338cb5989a7a42555255ad9aca000000000000000000000000000000000000000000000000000000000003f48000000000000000000000000000000000000000000000000000000000000000060000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c0000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000005e00000000000000000000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000000000000000000092000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000bb86bbd4871728938b30a54cc08e0eb2bc75302d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e90000000000000000000000005613af0474eb9c528a34701a5b1662e3c8fa06780000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000de505e42d50abd07c8d39dcf692920d56cba35da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000734b78823c4d979045ec23f38b54a070df7769ff00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000db216562328215e010f819b5abe947bad4ca961e000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000012b1389fbf261e781bdc3094d28636abfb03c5b3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd0000000000000000000000007d91da41daf1c2e1c3dbc6143289e077e0dba1ef00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000f58ea15b20983116c21b05c876cc8e6cdae5c2b900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a7482000000000000000000000000ebb11bbd7d72165fac86bb5ab1b07a602540b286000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001441cff79cd0000000000000000000000008d3425f7039645223517f6f6e60ef04c28f4188f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c4a49870870000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b50000000000000000000000005fcb496a31b7ae91e7c9078ec662bd7a55cd3079000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000241c31f7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b5000000000000000000000000a5abadaf73dfcf5261c7f55420418736707dc0db000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000241c31f71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "calldata": "0x8f2a0bb000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000007c31450fcb73ecf25ea2c9548c2d2970e4073bc6a0157c6026041d3107dbddab000000000000000000000000000000000000000000000000000000000003f48000000000000000000000000000000000000000000000000000000000000000070000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c0000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000bb86bbd4871728938b30a54cc08e0eb2bc75302d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e90000000000000000000000005613af0474eb9c528a34701a5b1662e3c8fa06780000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000de505e42d50abd07c8d39dcf692920d56cba35da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000734b78823c4d979045ec23f38b54a070df7769ff00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000db216562328215e010f819b5abe947bad4ca961e000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000012b1389fbf261e781bdc3094d28636abfb03c5b3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd0000000000000000000000007d91da41daf1c2e1c3dbc6143289e077e0dba1ef00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000f58ea15b20983116c21b05c876cc8e6cdae5c2b900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a7482000000000000000000000000ebb11bbd7d72165fac86bb5ab1b07a602540b286000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001441cff79cd0000000000000000000000008d3425f7039645223517f6f6e60ef04c28f4188f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c4a49870870000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b50000000000000000000000005fcb496a31b7ae91e7c9078ec662bd7a55cd3079000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000241c31f7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b5000000000000000000000000a5abadaf73dfcf5261c7f55420418736707dc0db000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000241c31f7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000841cff79cd00000000000000000000000086e93e21ad108cae7ade482c34c230bfd94d4a8b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004b147f40c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" } } \ No newline at end of file diff --git a/scripts/proposals/OmnibusApr25/generate.bash b/scripts/proposals/OmnibusApr25/generate.bash index 992b112a7..ffad79874 100755 --- a/scripts/proposals/OmnibusApr25/generate.bash +++ b/scripts/proposals/OmnibusApr25/generate.bash @@ -43,7 +43,15 @@ PROP3_ACTION_TYPES=(1 1) # executeCall PROP3_VALUES=(0 0) # SC Key Rotation Upgrade (PROP4) +PROP4_CHAIN_IDS=(42161) +PROP4_ADDRESSES=(0x86E93E21AD108CaE7ADe482C34C230Bfd94D4A8B) +PROP4_DATAS=( + $(cast calldata "perform()") +) +PROP4_ACTION_TYPES=(0) +PROP4_VALUES=(0) +# Generate proposal data yarn gen:proposalData \ --routeBuilderAddress 0x20eBEE002d53dbC02eaD1C55Bd7E31FF67615Ce0 \ --govChainProviderRPC http://localhost:8545 \ @@ -51,22 +59,27 @@ yarn gen:proposalData \ ${PROP1_CHAIN_IDS[@]} \ ${PROP2_CHAIN_IDS[@]} \ ${PROP3_CHAIN_IDS[@]} \ + ${PROP4_CHAIN_IDS[@]} \ --actionAddresses \ ${PROP1_ADDRESSES[@]} \ ${PROP2_ADDRESSES[@]} \ ${PROP3_ADDRESSES[@]} \ + ${PROP4_ADDRESSES[@]} \ --upgradeDatas \ ${PROP1_DATAS[@]} \ ${PROP2_DATAS[@]} \ ${PROP3_DATAS[@]} \ + ${PROP4_DATAS[@]} \ --actionTypes \ ${PROP1_ACTION_TYPES[@]} \ ${PROP2_ACTION_TYPES[@]} \ ${PROP3_ACTION_TYPES[@]} \ + ${PROP4_ACTION_TYPES[@]} \ --upgradeValues \ ${PROP1_VALUES[@]} \ ${PROP2_VALUES[@]} \ ${PROP3_VALUES[@]} \ + ${PROP4_VALUES[@]} \ --predecessor \ 0x0000000000000000000000000000000000000000000000000000000000000000 \ --writeToJsonPath \ From 3006b8b2d0e7d4f2fec1e75f17d682d6f7b93283 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Fri, 18 Apr 2025 13:06:28 -0500 Subject: [PATCH 16/29] fmt --- scripts/proposals/OmnibusApr25/generate.bash | 62 ++++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/scripts/proposals/OmnibusApr25/generate.bash b/scripts/proposals/OmnibusApr25/generate.bash index ffad79874..81f69aac1 100755 --- a/scripts/proposals/OmnibusApr25/generate.bash +++ b/scripts/proposals/OmnibusApr25/generate.bash @@ -53,35 +53,35 @@ PROP4_VALUES=(0) # Generate proposal data yarn gen:proposalData \ - --routeBuilderAddress 0x20eBEE002d53dbC02eaD1C55Bd7E31FF67615Ce0 \ - --govChainProviderRPC http://localhost:8545 \ - --actionChainIds \ - ${PROP1_CHAIN_IDS[@]} \ - ${PROP2_CHAIN_IDS[@]} \ - ${PROP3_CHAIN_IDS[@]} \ - ${PROP4_CHAIN_IDS[@]} \ - --actionAddresses \ - ${PROP1_ADDRESSES[@]} \ - ${PROP2_ADDRESSES[@]} \ - ${PROP3_ADDRESSES[@]} \ - ${PROP4_ADDRESSES[@]} \ - --upgradeDatas \ - ${PROP1_DATAS[@]} \ - ${PROP2_DATAS[@]} \ - ${PROP3_DATAS[@]} \ - ${PROP4_DATAS[@]} \ - --actionTypes \ - ${PROP1_ACTION_TYPES[@]} \ - ${PROP2_ACTION_TYPES[@]} \ - ${PROP3_ACTION_TYPES[@]} \ - ${PROP4_ACTION_TYPES[@]} \ - --upgradeValues \ - ${PROP1_VALUES[@]} \ - ${PROP2_VALUES[@]} \ - ${PROP3_VALUES[@]} \ - ${PROP4_VALUES[@]} \ - --predecessor \ - 0x0000000000000000000000000000000000000000000000000000000000000000 \ - --writeToJsonPath \ - ./scripts/proposals/OmnibusApr25/data.json + --routeBuilderAddress 0x20eBEE002d53dbC02eaD1C55Bd7E31FF67615Ce0 \ + --govChainProviderRPC http://localhost:8545 \ + --actionChainIds \ + ${PROP1_CHAIN_IDS[@]} \ + ${PROP2_CHAIN_IDS[@]} \ + ${PROP3_CHAIN_IDS[@]} \ + ${PROP4_CHAIN_IDS[@]} \ + --actionAddresses \ + ${PROP1_ADDRESSES[@]} \ + ${PROP2_ADDRESSES[@]} \ + ${PROP3_ADDRESSES[@]} \ + ${PROP4_ADDRESSES[@]} \ + --upgradeDatas \ + ${PROP1_DATAS[@]} \ + ${PROP2_DATAS[@]} \ + ${PROP3_DATAS[@]} \ + ${PROP4_DATAS[@]} \ + --actionTypes \ + ${PROP1_ACTION_TYPES[@]} \ + ${PROP2_ACTION_TYPES[@]} \ + ${PROP3_ACTION_TYPES[@]} \ + ${PROP4_ACTION_TYPES[@]} \ + --upgradeValues \ + ${PROP1_VALUES[@]} \ + ${PROP2_VALUES[@]} \ + ${PROP3_VALUES[@]} \ + ${PROP4_VALUES[@]} \ + --predecessor \ + 0x0000000000000000000000000000000000000000000000000000000000000000 \ + --writeToJsonPath \ + ./scripts/proposals/OmnibusApr25/data.json From 4f117204ee392fa71a1a7a0acfdc06638720cfc3 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Fri, 18 Apr 2025 13:57:47 -0500 Subject: [PATCH 17/29] deploy reward distributors --- scripts/proposals/OmnibusApr25/data.json | 2 +- scripts/proposals/OmnibusApr25/generate.bash | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/scripts/proposals/OmnibusApr25/data.json b/scripts/proposals/OmnibusApr25/data.json index 14e0ec330..8f6081238 100644 --- a/scripts/proposals/OmnibusApr25/data.json +++ b/scripts/proposals/OmnibusApr25/data.json @@ -19,6 +19,6 @@ ], "arbSysSendTxToL1Args": { "l1Timelock": "0xE6841D92B0C345144506576eC13ECf5103aC7f49", - "calldata": "0x8f2a0bb000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000007c31450fcb73ecf25ea2c9548c2d2970e4073bc6a0157c6026041d3107dbddab000000000000000000000000000000000000000000000000000000000003f48000000000000000000000000000000000000000000000000000000000000000070000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c0000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000bb86bbd4871728938b30a54cc08e0eb2bc75302d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e90000000000000000000000005613af0474eb9c528a34701a5b1662e3c8fa06780000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000de505e42d50abd07c8d39dcf692920d56cba35da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000734b78823c4d979045ec23f38b54a070df7769ff00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000db216562328215e010f819b5abe947bad4ca961e000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000012b1389fbf261e781bdc3094d28636abfb03c5b3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd0000000000000000000000007d91da41daf1c2e1c3dbc6143289e077e0dba1ef00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000f58ea15b20983116c21b05c876cc8e6cdae5c2b900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a7482000000000000000000000000ebb11bbd7d72165fac86bb5ab1b07a602540b286000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001441cff79cd0000000000000000000000008d3425f7039645223517f6f6e60ef04c28f4188f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c4a49870870000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b50000000000000000000000005fcb496a31b7ae91e7c9078ec662bd7a55cd3079000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000241c31f7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b5000000000000000000000000a5abadaf73dfcf5261c7f55420418736707dc0db000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000241c31f7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000841cff79cd00000000000000000000000086e93e21ad108cae7ade482c34c230bfd94d4a8b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004b147f40c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "calldata": "0x8f2a0bb000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000007c31450fcb73ecf25ea2c9548c2d2970e4073bc6a0157c6026041d3107dbddab000000000000000000000000000000000000000000000000000000000003f48000000000000000000000000000000000000000000000000000000000000000070000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c0000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000bb86bbd4871728938b30a54cc08e0eb2bc75302d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e90000000000000000000000005613af0474eb9c528a34701a5b1662e3c8fa06780000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000de505e42d50abd07c8d39dcf692920d56cba35da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000734b78823c4d979045ec23f38b54a070df7769ff00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000db216562328215e010f819b5abe947bad4ca961e000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000012b1389fbf261e781bdc3094d28636abfb03c5b3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd0000000000000000000000007d91da41daf1c2e1c3dbc6143289e077e0dba1ef00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000f58ea15b20983116c21b05c876cc8e6cdae5c2b900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a7482000000000000000000000000ebb11bbd7d72165fac86bb5ab1b07a602540b286000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001441cff79cd0000000000000000000000008d3425f7039645223517f6f6e60ef04c28f4188f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c4a49870870000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b50000000000000000000000005fcb496a31b7ae91e7c9078ec662bd7a55cd3079000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000241c31f710000000000000000000000000a4a8a4e2fe847af59d340926adcdef6e988bb1f1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b5000000000000000000000000a5abadaf73dfcf5261c7f55420418736707dc0db000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000241c31f7100000000000000000000000009d537c5519b05f58ccdde6d77aeda3b87f642bbf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000841cff79cd00000000000000000000000086e93e21ad108cae7ade482c34c230bfd94d4a8b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004b147f40c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" } } \ No newline at end of file diff --git a/scripts/proposals/OmnibusApr25/generate.bash b/scripts/proposals/OmnibusApr25/generate.bash index 81f69aac1..1e092edf1 100755 --- a/scripts/proposals/OmnibusApr25/generate.bash +++ b/scripts/proposals/OmnibusApr25/generate.bash @@ -35,9 +35,8 @@ PROP3_ADDRESSES=( 0xa5aBADAF73DFcf5261C7f55420418736707Dc0db # Arbitrum Nova ELA ) PROP3_DATAS=( - # TODO: DEPLOY REWARD DISTRIBUTORS - $(cast calldata "setBeneficiary(address)" 0x0000000000000000000000000000000000000000) - $(cast calldata "setBeneficiary(address)" 0x0000000000000000000000000000000000000000) + $(cast calldata "setBeneficiary(address)" 0xA4A8a4E2fe847Af59D340926aDCdeF6e988bB1f1) # Arbitrum One + $(cast calldata "setBeneficiary(address)" 0x9D537C5519B05f58CCddE6d77aEDa3B87F642Bbf) # Arbitrum Nova ) PROP3_ACTION_TYPES=(1 1) # executeCall PROP3_VALUES=(0 0) From ba4c358e52ddd9d97aaa6098f3b62c0d5aaafb65 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Mon, 21 Apr 2025 10:09:22 -0500 Subject: [PATCH 18/29] Update src/UpgradeExecRouteBuilder.sol --- src/UpgradeExecRouteBuilder.sol | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/UpgradeExecRouteBuilder.sol b/src/UpgradeExecRouteBuilder.sol index 431e8a15f..40c7b09a3 100644 --- a/src/UpgradeExecRouteBuilder.sol +++ b/src/UpgradeExecRouteBuilder.sol @@ -205,16 +205,12 @@ contract UpgradeExecRouteBuilder { bytes32 predecessor, bytes32 timelockSalt ) public view returns (address, bytes memory) { - uint256[] memory actionTypes = new uint256[](chainIds.length); - for (uint256 i = 0; i < chainIds.length; i++) { - actionTypes[i] = 0; // default is execute - } return createActionRouteData2( chainIds, actionAddresses, actionValues, actionDatas, - actionTypes, + new uint256[](chainIds.length), // action types, default to 0 for execute predecessor, timelockSalt ); From 21d69b05466351040b78014589d9a6cc917872a5 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Mon, 21 Apr 2025 14:25:18 -0500 Subject: [PATCH 19/29] deploy new route builder --- files/mainnet/scmDeployment.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/mainnet/scmDeployment.json b/files/mainnet/scmDeployment.json index 76a3703ac..a53240d72 100644 --- a/files/mainnet/scmDeployment.json +++ b/files/mainnet/scmDeployment.json @@ -28,6 +28,6 @@ "securityCouncilManagerLogic": "0x468dA0eE5570Bdb1Dd81bFd925BAf028A93Dce64", "securityCouncilMemberRemoverGov": "0x6f3a242cA91A119F872f0073BC14BC8a74a315Ad", "securityCouncilMemberRemoverGovLogic": "0x2F06643fc2CC18585Ae790b546388F0DE4Ec6635", - "upgradeExecRouteBuilder": "0x7481716f05E315Fc4C4a64E56DcD9bc1D6F24C0a", + "upgradeExecRouteBuilder": "0xEd89EFf4780D3467Ea7E888F0AB73c10273C6B04", "l2SecurityCouncilMgmtFactory": "0xe8e5DC1793d6fe39452DdCB90d12997FA39dE1de" } \ No newline at end of file From 860532b9afa198303587a729470d9cbf9a0018b7 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Mon, 21 Apr 2025 14:28:36 -0500 Subject: [PATCH 20/29] gas snapshot --- .gas-snapshot | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 3d36547f9..58e5d037f 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -26,7 +26,7 @@ ArbitrumVestingWalletTest:testDelegateFailsForNonBeneficiary() (gas: 16008435) ArbitrumVestingWalletTest:testDoesDeploy() (gas: 15971342) ArbitrumVestingWalletTest:testReleaseAffordance() (gas: 16008649) ArbitrumVestingWalletTest:testVestedAmountStart() (gas: 16074917) -E2E:testE2E() (gas: 85079428) +E2E:testE2E() (gas: 85050633) FixedDelegateErc20WalletTest:testInit() (gas: 5822575) FixedDelegateErc20WalletTest:testInitZeroToken() (gas: 5816805) FixedDelegateErc20WalletTest:testTransfer() (gas: 5932218) @@ -94,14 +94,14 @@ L2GovernanceFactoryTest:testSanityCheckValues() (gas: 28571182) L2GovernanceFactoryTest:testSetMinDelay() (gas: 28519939) L2GovernanceFactoryTest:testSetMinDelayRevertsForCoreAddress() (gas: 28572810) L2GovernanceFactoryTest:testUpgraderCanCancel() (gas: 28812928) -L2SecurityCouncilMgmtFactoryTest:testMemberElectionGovDeployment() (gas: 30766071) -L2SecurityCouncilMgmtFactoryTest:testNomineeElectionGovDeployment() (gas: 30770302) -L2SecurityCouncilMgmtFactoryTest:testOnlyOwnerCanDeploy() (gas: 25780656) -L2SecurityCouncilMgmtFactoryTest:testRemovalGovDeployment() (gas: 30768302) -L2SecurityCouncilMgmtFactoryTest:testSecurityCouncilManagerDeployment() (gas: 30787395) +L2SecurityCouncilMgmtFactoryTest:testMemberElectionGovDeployment() (gas: 30738821) +L2SecurityCouncilMgmtFactoryTest:testNomineeElectionGovDeployment() (gas: 30743052) +L2SecurityCouncilMgmtFactoryTest:testOnlyOwnerCanDeploy() (gas: 25767033) +L2SecurityCouncilMgmtFactoryTest:testRemovalGovDeployment() (gas: 30741052) +L2SecurityCouncilMgmtFactoryTest:testSecurityCouncilManagerDeployment() (gas: 30760145) NomineeGovernorV2UpgradeActionTest:testAction() (gas: 8153) OfficeHoursActionTest:testConstructor() (gas: 9050) -OfficeHoursActionTest:testFuzzOfficeHoursDeployment(uint256,uint256,int256,uint256,uint256,uint256) (runs: 256, μ: 317070, ~: 317184) +OfficeHoursActionTest:testFuzzOfficeHoursDeployment(uint256,uint256,int256,uint256,uint256,uint256) (runs: 256, μ: 317072, ~: 317184) OfficeHoursActionTest:testInvalidConstructorParameters() (gas: 235740) OfficeHoursActionTest:testPerformBeforeMinimumTimestamp() (gas: 8646) OfficeHoursActionTest:testPerformDuringOfficeHours() (gas: 9140) @@ -116,28 +116,28 @@ OutboxActionsTest:testRemoveAllOutboxes() (gas: 693079) OutboxActionsTest:testRemoveOutboxes() (gas: 853972) ProxyUpgradeAndCallActionTest:testUpgrade() (gas: 137140) ProxyUpgradeAndCallActionTest:testUpgradeAndCall() (gas: 143087) -SecurityCouncilManagerTest:testAddMemberAffordances() (gas: 250192) +SecurityCouncilManagerTest:testAddMemberAffordances() (gas: 249963) SecurityCouncilManagerTest:testAddMemberSpecialAddresses() (gas: 20795) -SecurityCouncilManagerTest:testAddMemberToFirstCohort() (gas: 340846) -SecurityCouncilManagerTest:testAddMemberToSecondCohort() (gas: 344142) +SecurityCouncilManagerTest:testAddMemberToFirstCohort() (gas: 340388) +SecurityCouncilManagerTest:testAddMemberToSecondCohort() (gas: 343684) SecurityCouncilManagerTest:testAddSC() (gas: 118567) SecurityCouncilManagerTest:testAddSCAffordances() (gas: 112083) SecurityCouncilManagerTest:testCantUpdateCohortWithADup() (gas: 123116) SecurityCouncilManagerTest:testCohortMethods() (gas: 136185) SecurityCouncilManagerTest:testInitialization() (gas: 193074) -SecurityCouncilManagerTest:testRemoveMember() (gas: 213570) +SecurityCouncilManagerTest:testRemoveMember() (gas: 213341) SecurityCouncilManagerTest:testRemoveMemberAffordances() (gas: 99074) SecurityCouncilManagerTest:testRemoveSCAffordances() (gas: 81253) SecurityCouncilManagerTest:testRemoveSeC() (gas: 38309) SecurityCouncilManagerTest:testReplaceMemberAffordances() (gas: 208560) -SecurityCouncilManagerTest:testReplaceMemberInFirstCohort() (gas: 259329) -SecurityCouncilManagerTest:testReplaceMemberInSecondCohort() (gas: 262846) -SecurityCouncilManagerTest:testRotateMember() (gas: 259333) +SecurityCouncilManagerTest:testReplaceMemberInFirstCohort() (gas: 259100) +SecurityCouncilManagerTest:testReplaceMemberInSecondCohort() (gas: 262617) +SecurityCouncilManagerTest:testRotateMember() (gas: 259104) SecurityCouncilManagerTest:testUpdateCohortAffordances() (gas: 83026) -SecurityCouncilManagerTest:testUpdateFirstCohort() (gas: 295852) +SecurityCouncilManagerTest:testUpdateFirstCohort() (gas: 295623) SecurityCouncilManagerTest:testUpdateRouter() (gas: 76296) SecurityCouncilManagerTest:testUpdateRouterAffordacnes() (gas: 112379) -SecurityCouncilManagerTest:testUpdateSecondCohort() (gas: 295857) +SecurityCouncilManagerTest:testUpdateSecondCohort() (gas: 295628) SecurityCouncilMemberElectionGovernorTest:testCannotUseMoreVotesThanAvailable() (gas: 246997) SecurityCouncilMemberElectionGovernorTest:testCastBySig() (gas: 302852) SecurityCouncilMemberElectionGovernorTest:testCastBySigTwice() (gas: 266244) @@ -153,7 +153,7 @@ SecurityCouncilMemberElectionGovernorTest:testOnlyNomineeElectionGovernorCanProp SecurityCouncilMemberElectionGovernorTest:testProperInitialization() (gas: 49388) SecurityCouncilMemberElectionGovernorTest:testProposeReverts() (gas: 32916) SecurityCouncilMemberElectionGovernorTest:testRelay() (gas: 42229) -SecurityCouncilMemberElectionGovernorTest:testSelectTopNominees(uint256) (runs: 256, μ: 340075, ~: 339909) +SecurityCouncilMemberElectionGovernorTest:testSelectTopNominees(uint256) (runs: 256, μ: 339988, ~: 339897) SecurityCouncilMemberElectionGovernorTest:testSelectTopNomineesFails() (gas: 273335) SecurityCouncilMemberElectionGovernorTest:testSetFullWeightDuration() (gas: 34951) SecurityCouncilMemberElectionGovernorTest:testVotesToWeight() (gas: 152898) @@ -245,9 +245,9 @@ TokenDistributorTest:testZeroOwner() (gas: 4132646) TokenDistributorTest:testZeroReceiver() (gas: 4132675) TokenDistributorTest:testZeroToken() (gas: 71889) TopNomineesGasTest:testTopNomineesGas() (gas: 4502996) -UpgradeExecRouteBuilderTest:testAIP1Point2() (gas: 1444246) -UpgradeExecRouteBuilderTest:testActionType() (gas: 1753432) -UpgradeExecRouteBuilderTest:testRouteBuilderErrors() (gas: 1263287) +UpgradeExecRouteBuilderTest:testAIP1Point2() (gas: 1430390) +UpgradeExecRouteBuilderTest:testActionType() (gas: 1739813) +UpgradeExecRouteBuilderTest:testRouteBuilderErrors() (gas: 1248533) UpgradeExecutorTest:testAdminCanChangeExecutor() (gas: 2739548) UpgradeExecutorTest:testCantExecuteEOA() (gas: 2595534) UpgradeExecutorTest:testExecute() (gas: 2833808) From b5969e5e0d8712e48a9721d50cc93a3636c664fa Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Mon, 21 Apr 2025 14:33:33 -0500 Subject: [PATCH 21/29] update greneration command to use default builder --- scripts/proposals/OmnibusApr25/generate.bash | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/proposals/OmnibusApr25/generate.bash b/scripts/proposals/OmnibusApr25/generate.bash index 1e092edf1..968c0aa1a 100755 --- a/scripts/proposals/OmnibusApr25/generate.bash +++ b/scripts/proposals/OmnibusApr25/generate.bash @@ -52,8 +52,7 @@ PROP4_VALUES=(0) # Generate proposal data yarn gen:proposalData \ - --routeBuilderAddress 0x20eBEE002d53dbC02eaD1C55Bd7E31FF67615Ce0 \ - --govChainProviderRPC http://localhost:8545 \ + --govChainProviderRPC https://arb1.arbitrum.io/rpc \ --actionChainIds \ ${PROP1_CHAIN_IDS[@]} \ ${PROP2_CHAIN_IDS[@]} \ From f0c17919a1b71df34ce4b5cbd33ccf502b742f21 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Mon, 16 Jun 2025 10:17:34 -0600 Subject: [PATCH 22/29] create2 up exec impls --- scripts/proposals/OmnibusApr25/data.json | 2 +- scripts/proposals/OmnibusApr25/generate.bash | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/proposals/OmnibusApr25/data.json b/scripts/proposals/OmnibusApr25/data.json index 8f6081238..292941919 100644 --- a/scripts/proposals/OmnibusApr25/data.json +++ b/scripts/proposals/OmnibusApr25/data.json @@ -19,6 +19,6 @@ ], "arbSysSendTxToL1Args": { "l1Timelock": "0xE6841D92B0C345144506576eC13ECf5103aC7f49", - "calldata": "0x8f2a0bb000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000007c31450fcb73ecf25ea2c9548c2d2970e4073bc6a0157c6026041d3107dbddab000000000000000000000000000000000000000000000000000000000003f48000000000000000000000000000000000000000000000000000000000000000070000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c0000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000bb86bbd4871728938b30a54cc08e0eb2bc75302d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e90000000000000000000000005613af0474eb9c528a34701a5b1662e3c8fa06780000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000de505e42d50abd07c8d39dcf692920d56cba35da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000734b78823c4d979045ec23f38b54a070df7769ff00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000db216562328215e010f819b5abe947bad4ca961e000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000012b1389fbf261e781bdc3094d28636abfb03c5b3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd0000000000000000000000007d91da41daf1c2e1c3dbc6143289e077e0dba1ef00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000f58ea15b20983116c21b05c876cc8e6cdae5c2b900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a7482000000000000000000000000ebb11bbd7d72165fac86bb5ab1b07a602540b286000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001441cff79cd0000000000000000000000008d3425f7039645223517f6f6e60ef04c28f4188f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c4a49870870000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b50000000000000000000000005fcb496a31b7ae91e7c9078ec662bd7a55cd3079000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000241c31f710000000000000000000000000a4a8a4e2fe847af59d340926adcdef6e988bb1f1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b5000000000000000000000000a5abadaf73dfcf5261c7f55420418736707dc0db000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000241c31f7100000000000000000000000009d537c5519b05f58ccdde6d77aeda3b87f642bbf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000841cff79cd00000000000000000000000086e93e21ad108cae7ade482c34c230bfd94d4a8b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004b147f40c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "calldata": "0x8f2a0bb000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000007c31450fcb73ecf25ea2c9548c2d2970e4073bc6a0157c6026041d3107dbddab000000000000000000000000000000000000000000000000000000000003f48000000000000000000000000000000000000000000000000000000000000000070000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c0000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000bb86bbd4871728938b30a54cc08e0eb2bc75302d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e90000000000000000000000005613af0474eb9c528a34701a5b1662e3c8fa06780000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd0000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000734b78823c4d979045ec23f38b54a070df7769ff00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000db216562328215e010f819b5abe947bad4ca961e000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a8270000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd0000000000000000000000007d91da41daf1c2e1c3dbc6143289e077e0dba1ef00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000f58ea15b20983116c21b05c876cc8e6cdae5c2b900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a74820000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001441cff79cd0000000000000000000000008d3425f7039645223517f6f6e60ef04c28f4188f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c4a49870870000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b50000000000000000000000005fcb496a31b7ae91e7c9078ec662bd7a55cd3079000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000241c31f710000000000000000000000000a4a8a4e2fe847af59d340926adcdef6e988bb1f1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b5000000000000000000000000a5abadaf73dfcf5261c7f55420418736707dc0db000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000241c31f7100000000000000000000000009d537c5519b05f58ccdde6d77aeda3b87f642bbf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000841cff79cd00000000000000000000000086e93e21ad108cae7ade482c34c230bfd94d4a8b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004b147f40c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" } } \ No newline at end of file diff --git a/scripts/proposals/OmnibusApr25/generate.bash b/scripts/proposals/OmnibusApr25/generate.bash index 968c0aa1a..5dc89b8a4 100755 --- a/scripts/proposals/OmnibusApr25/generate.bash +++ b/scripts/proposals/OmnibusApr25/generate.bash @@ -8,9 +8,9 @@ PROP1_ADDRESSES=( 0x7d91da41daf1c2e1c3dbc6143289e077e0dba1ef # Arbitrum Nova ) PROP1_DATAS=( - $(cast calldata "perform(address,address,address)" 0x5613AF0474EB9c528A34701A5b1662E3C8FA0678 0x3ffFbAdAF827559da092217e474760E2b2c3CeDd 0xDE505e42D50abd07c8D39Dcf692920d56cBA35Da) - $(cast calldata "perform(address,address,address)" 0xdb216562328215E010F819B5aBe947bad4ca961e 0xCF57572261c7c2BCF21ffD220ea7d1a27D40A827 0x12B1389Fbf261E781bdc3094d28636Abfb03C5b3) - $(cast calldata "perform(address,address,address)" 0xf58eA15B20983116c21b05c876cc8e6CDAe5C2b9 0x86a02dD71363c440b21F4c0E5B2Ad01Ffe1A7482 0xebb11Bbd7d72165FaC86bb5AB1B07A602540b286) + $(cast calldata "perform(address,address,address)" 0x5613AF0474EB9c528A34701A5b1662E3C8FA0678 0x3ffFbAdAF827559da092217e474760E2b2c3CeDd 0x3d745b8815F9be5BF053858165f8aB1F58c77932) + $(cast calldata "perform(address,address,address)" 0xdb216562328215E010F819B5aBe947bad4ca961e 0xCF57572261c7c2BCF21ffD220ea7d1a27D40A827 0x3d745b8815F9be5BF053858165f8aB1F58c77932) + $(cast calldata "perform(address,address,address)" 0xf58eA15B20983116c21b05c876cc8e6CDAe5C2b9 0x86a02dD71363c440b21F4c0E5B2Ad01Ffe1A7482 0x3d745b8815F9be5BF053858165f8aB1F58c77932) ) PROP1_ACTION_TYPES=(0 0 0) PROP1_VALUES=(0 0 0) From 6e641c252c28ff852d35f154b04c1c2a64c2bc22 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Wed, 13 Aug 2025 11:56:23 -0700 Subject: [PATCH 23/29] remove timeboost beneficiary change and sc management upgrade --- scripts/proposals/OmnibusApr25/README.md | 6 ---- scripts/proposals/OmnibusApr25/data.json | 12 ++------ scripts/proposals/OmnibusApr25/generate.bash | 31 -------------------- 3 files changed, 3 insertions(+), 46 deletions(-) diff --git a/scripts/proposals/OmnibusApr25/README.md b/scripts/proposals/OmnibusApr25/README.md index 28b289b60..bccf53745 100644 --- a/scripts/proposals/OmnibusApr25/README.md +++ b/scripts/proposals/OmnibusApr25/README.md @@ -7,9 +7,3 @@ This proposal generation script and payload includes several different governanc link to forum and snapshot, brief description ## Disable USDT Gateway - -## Timeboost Beneficiary change - -## SC Key Rotation - -mention pr #315 \ No newline at end of file diff --git a/scripts/proposals/OmnibusApr25/data.json b/scripts/proposals/OmnibusApr25/data.json index 292941919..4672326f7 100644 --- a/scripts/proposals/OmnibusApr25/data.json +++ b/scripts/proposals/OmnibusApr25/data.json @@ -3,22 +3,16 @@ 1, 42161, 42170, - 1, - 42161, - 42170, - 42161 + 1 ], "actionAddresses": [ "0xBB86bBd4871728938B30A54Cc08E0eb2bC75302d", "0x734B78823c4d979045EC23F38B54A070df7769FF", "0x7d91da41daf1c2e1c3dbc6143289e077e0dba1ef", - "0x8d3425f7039645223517F6F6e60Ef04C28f4188F", - "0x5fcb496a31b7AE91e7c9078Ec662bd7A55cd3079", - "0xa5aBADAF73DFcf5261C7f55420418736707Dc0db", - "0x86E93E21AD108CaE7ADe482C34C230Bfd94D4A8B" + "0x8d3425f7039645223517F6F6e60Ef04C28f4188F" ], "arbSysSendTxToL1Args": { "l1Timelock": "0xE6841D92B0C345144506576eC13ECf5103aC7f49", - "calldata": "0x8f2a0bb000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000007c31450fcb73ecf25ea2c9548c2d2970e4073bc6a0157c6026041d3107dbddab000000000000000000000000000000000000000000000000000000000003f48000000000000000000000000000000000000000000000000000000000000000070000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c0000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000bb86bbd4871728938b30a54cc08e0eb2bc75302d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e90000000000000000000000005613af0474eb9c528a34701a5b1662e3c8fa06780000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd0000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000734b78823c4d979045ec23f38b54a070df7769ff00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000db216562328215e010f819b5abe947bad4ca961e000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a8270000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd0000000000000000000000007d91da41daf1c2e1c3dbc6143289e077e0dba1ef00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000f58ea15b20983116c21b05c876cc8e6cdae5c2b900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a74820000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001441cff79cd0000000000000000000000008d3425f7039645223517f6f6e60ef04c28f4188f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c4a49870870000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b50000000000000000000000005fcb496a31b7ae91e7c9078ec662bd7a55cd3079000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000241c31f710000000000000000000000000a4a8a4e2fe847af59d340926adcdef6e988bb1f1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b5000000000000000000000000a5abadaf73dfcf5261c7f55420418736707dc0db000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000241c31f7100000000000000000000000009d537c5519b05f58ccdde6d77aeda3b87f642bbf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000841cff79cd00000000000000000000000086e93e21ad108cae7ade482c34c230bfd94d4a8b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004b147f40c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "calldata": "0x8f2a0bb000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000d1d04654d91c0a13019562c1b9af73b011b98069bf7f075011bac940a742a84d000000000000000000000000000000000000000000000000000000000003f48000000000000000000000000000000000000000000000000000000000000000040000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c0000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000bb86bbd4871728938b30a54cc08e0eb2bc75302d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e90000000000000000000000005613af0474eb9c528a34701a5b1662e3c8fa06780000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd0000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000734b78823c4d979045ec23f38b54a070df7769ff00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000db216562328215e010f819b5abe947bad4ca961e000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a8270000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd0000000000000000000000007d91da41daf1c2e1c3dbc6143289e077e0dba1ef00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000f58ea15b20983116c21b05c876cc8e6cdae5c2b900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a74820000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001441cff79cd0000000000000000000000008d3425f7039645223517f6f6e60ef04c28f4188f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c4a49870870000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" } } \ No newline at end of file diff --git a/scripts/proposals/OmnibusApr25/generate.bash b/scripts/proposals/OmnibusApr25/generate.bash index 5dc89b8a4..69572e108 100755 --- a/scripts/proposals/OmnibusApr25/generate.bash +++ b/scripts/proposals/OmnibusApr25/generate.bash @@ -28,27 +28,6 @@ PROP2_VALUES=( $(cast to-wei 0.0005) ) -# Timeboost Fee Split (PROP3) -PROP3_CHAIN_IDS=(42161 42170) -PROP3_ADDRESSES=( - 0x5fcb496a31b7AE91e7c9078Ec662bd7A55cd3079 # Arbitrum One ELA - 0xa5aBADAF73DFcf5261C7f55420418736707Dc0db # Arbitrum Nova ELA -) -PROP3_DATAS=( - $(cast calldata "setBeneficiary(address)" 0xA4A8a4E2fe847Af59D340926aDCdeF6e988bB1f1) # Arbitrum One - $(cast calldata "setBeneficiary(address)" 0x9D537C5519B05f58CCddE6d77aEDa3B87F642Bbf) # Arbitrum Nova -) -PROP3_ACTION_TYPES=(1 1) # executeCall -PROP3_VALUES=(0 0) - -# SC Key Rotation Upgrade (PROP4) -PROP4_CHAIN_IDS=(42161) -PROP4_ADDRESSES=(0x86E93E21AD108CaE7ADe482C34C230Bfd94D4A8B) -PROP4_DATAS=( - $(cast calldata "perform()") -) -PROP4_ACTION_TYPES=(0) -PROP4_VALUES=(0) # Generate proposal data yarn gen:proposalData \ @@ -56,28 +35,18 @@ yarn gen:proposalData \ --actionChainIds \ ${PROP1_CHAIN_IDS[@]} \ ${PROP2_CHAIN_IDS[@]} \ - ${PROP3_CHAIN_IDS[@]} \ - ${PROP4_CHAIN_IDS[@]} \ --actionAddresses \ ${PROP1_ADDRESSES[@]} \ ${PROP2_ADDRESSES[@]} \ - ${PROP3_ADDRESSES[@]} \ - ${PROP4_ADDRESSES[@]} \ --upgradeDatas \ ${PROP1_DATAS[@]} \ ${PROP2_DATAS[@]} \ - ${PROP3_DATAS[@]} \ - ${PROP4_DATAS[@]} \ --actionTypes \ ${PROP1_ACTION_TYPES[@]} \ ${PROP2_ACTION_TYPES[@]} \ - ${PROP3_ACTION_TYPES[@]} \ - ${PROP4_ACTION_TYPES[@]} \ --upgradeValues \ ${PROP1_VALUES[@]} \ ${PROP2_VALUES[@]} \ - ${PROP3_VALUES[@]} \ - ${PROP4_VALUES[@]} \ --predecessor \ 0x0000000000000000000000000000000000000000000000000000000000000000 \ --writeToJsonPath \ From 8fcf9a41c840865ca15212ef4a3da0f00a9edd9d Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Wed, 13 Aug 2025 12:29:53 -0700 Subject: [PATCH 24/29] add nova cost cap --- scripts/proposals/OmnibusApr25/README.md | 2 ++ scripts/proposals/OmnibusApr25/data.json | 8 +++++--- scripts/proposals/OmnibusApr25/generate.bash | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/scripts/proposals/OmnibusApr25/README.md b/scripts/proposals/OmnibusApr25/README.md index bccf53745..348629930 100644 --- a/scripts/proposals/OmnibusApr25/README.md +++ b/scripts/proposals/OmnibusApr25/README.md @@ -7,3 +7,5 @@ This proposal generation script and payload includes several different governanc link to forum and snapshot, brief description ## Disable USDT Gateway + +## SetAmortizedCostCapBips diff --git a/scripts/proposals/OmnibusApr25/data.json b/scripts/proposals/OmnibusApr25/data.json index 4672326f7..4fccc972d 100644 --- a/scripts/proposals/OmnibusApr25/data.json +++ b/scripts/proposals/OmnibusApr25/data.json @@ -3,16 +3,18 @@ 1, 42161, 42170, - 1 + 1, + 42170 ], "actionAddresses": [ "0xBB86bBd4871728938B30A54Cc08E0eb2bC75302d", "0x734B78823c4d979045EC23F38B54A070df7769FF", "0x7d91da41daf1c2e1c3dbc6143289e077e0dba1ef", - "0x8d3425f7039645223517F6F6e60Ef04C28f4188F" + "0x8d3425f7039645223517F6F6e60Ef04C28f4188F", + "0x0000000000000000000000000000000000000070" ], "arbSysSendTxToL1Args": { "l1Timelock": "0xE6841D92B0C345144506576eC13ECf5103aC7f49", - "calldata": "0x8f2a0bb000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000d1d04654d91c0a13019562c1b9af73b011b98069bf7f075011bac940a742a84d000000000000000000000000000000000000000000000000000000000003f48000000000000000000000000000000000000000000000000000000000000000040000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c0000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000bb86bbd4871728938b30a54cc08e0eb2bc75302d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e90000000000000000000000005613af0474eb9c528a34701a5b1662e3c8fa06780000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd0000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000734b78823c4d979045ec23f38b54a070df7769ff00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000db216562328215e010f819b5abe947bad4ca961e000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a8270000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd0000000000000000000000007d91da41daf1c2e1c3dbc6143289e077e0dba1ef00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000f58ea15b20983116c21b05c876cc8e6cdae5c2b900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a74820000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001441cff79cd0000000000000000000000008d3425f7039645223517f6f6e60ef04c28f4188f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c4a49870870000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "calldata": "0x8f2a0bb000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000f41c3662a97e6a43b2140f5e93bb91daf08cf98bdea3cdbfdc68b338428ec127000000000000000000000000000000000000000000000000000000000003f48000000000000000000000000000000000000000000000000000000000000000050000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c0000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000005c0000000000000000000000000000000000000000000000000000000000000074000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000bb86bbd4871728938b30a54cc08e0eb2bc75302d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e90000000000000000000000005613af0474eb9c528a34701a5b1662e3c8fa06780000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd0000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000734b78823c4d979045ec23f38b54a070df7769ff00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000db216562328215e010f819b5abe947bad4ca961e000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a8270000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd0000000000000000000000007d91da41daf1c2e1c3dbc6143289e077e0dba1ef00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000f58ea15b20983116c21b05c876cc8e6cdae5c2b900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a74820000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001441cff79cd0000000000000000000000008d3425f7039645223517f6f6e60ef04c28f4188f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c4a49870870000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b500000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002456191cc300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" } } \ No newline at end of file diff --git a/scripts/proposals/OmnibusApr25/generate.bash b/scripts/proposals/OmnibusApr25/generate.bash index 69572e108..aadd0d752 100755 --- a/scripts/proposals/OmnibusApr25/generate.bash +++ b/scripts/proposals/OmnibusApr25/generate.bash @@ -28,6 +28,16 @@ PROP2_VALUES=( $(cast to-wei 0.0005) ) +# SetAmortizedCostCapBips (PROP3) +PROP3_CHAIN_IDS=(42170) +PROP3_ADDRESSES=( + 0x0000000000000000000000000000000000000070 # ArbOwner +) +PROP3_DATAS=( + $(cast calldata "setAmortizedCostCapBips(uint64 cap)" 0) +) +PROP3_ACTION_TYPES=(1) # executeCall +PROP3_VALUES=(0) # Generate proposal data yarn gen:proposalData \ @@ -35,18 +45,23 @@ yarn gen:proposalData \ --actionChainIds \ ${PROP1_CHAIN_IDS[@]} \ ${PROP2_CHAIN_IDS[@]} \ + ${PROP3_CHAIN_IDS[@]} \ --actionAddresses \ ${PROP1_ADDRESSES[@]} \ ${PROP2_ADDRESSES[@]} \ + ${PROP3_ADDRESSES[@]} \ --upgradeDatas \ ${PROP1_DATAS[@]} \ ${PROP2_DATAS[@]} \ + ${PROP3_DATAS[@]} \ --actionTypes \ ${PROP1_ACTION_TYPES[@]} \ ${PROP2_ACTION_TYPES[@]} \ + ${PROP3_ACTION_TYPES[@]} \ --upgradeValues \ ${PROP1_VALUES[@]} \ ${PROP2_VALUES[@]} \ + ${PROP3_VALUES[@]} \ --predecessor \ 0x0000000000000000000000000000000000000000000000000000000000000000 \ --writeToJsonPath \ From 0f3b9c76b92a7fd3b554c8e2dab490ddb570e2ef Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Wed, 13 Aug 2025 12:31:54 -0700 Subject: [PATCH 25/29] update readme --- scripts/proposals/OmnibusApr25/README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/proposals/OmnibusApr25/README.md b/scripts/proposals/OmnibusApr25/README.md index 348629930..0aebbf581 100644 --- a/scripts/proposals/OmnibusApr25/README.md +++ b/scripts/proposals/OmnibusApr25/README.md @@ -1,11 +1,12 @@ -# Omnibus Proposal of April 2025 +# Omnibus Proposal of August 2025 This proposal generation script and payload includes several different governance proposals. ## Upgrade Executor Update - -link to forum and snapshot, brief description +https://snapshot.box/#/s:arbitrumfoundation.eth/proposal/0xc08147e229fa642ee7da2e5180f225122b8c517024902f21cdcd02b376179b8d ## Disable USDT Gateway +https://snapshot.box/#/s:arbitrumfoundation.eth/proposal/0xd5a66f784523841511f7ffec4171b9c14404fdbf7c205086312084d19c95c193 ## SetAmortizedCostCapBips +https://snapshot.box/#/s:arbitrumfoundation.eth/proposal/0xeb044e3bdeba71e74dea02abeab4c33fe4bf5ab9def50082863702d5e2112b93 From f8d4c230fe509dd3a09bfa63d7540cc5a21f6bbf Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Wed, 13 Aug 2025 13:03:24 -0700 Subject: [PATCH 26/29] use create2 for prop1 actions --- scripts/proposals/OmnibusApr25/data.json | 8 ++++---- scripts/proposals/OmnibusApr25/generate.bash | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/proposals/OmnibusApr25/data.json b/scripts/proposals/OmnibusApr25/data.json index 4fccc972d..3beef9245 100644 --- a/scripts/proposals/OmnibusApr25/data.json +++ b/scripts/proposals/OmnibusApr25/data.json @@ -7,14 +7,14 @@ 42170 ], "actionAddresses": [ - "0xBB86bBd4871728938B30A54Cc08E0eb2bC75302d", - "0x734B78823c4d979045EC23F38B54A070df7769FF", - "0x7d91da41daf1c2e1c3dbc6143289e077e0dba1ef", + "0xE03E930D661a729595EcC77f9e692a32BEed4260", + "0xE03E930D661a729595EcC77f9e692a32BEed4260", + "0xE03E930D661a729595EcC77f9e692a32BEed4260", "0x8d3425f7039645223517F6F6e60Ef04C28f4188F", "0x0000000000000000000000000000000000000070" ], "arbSysSendTxToL1Args": { "l1Timelock": "0xE6841D92B0C345144506576eC13ECf5103aC7f49", - "calldata": "0x8f2a0bb000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000f41c3662a97e6a43b2140f5e93bb91daf08cf98bdea3cdbfdc68b338428ec127000000000000000000000000000000000000000000000000000000000003f48000000000000000000000000000000000000000000000000000000000000000050000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c0000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000005c0000000000000000000000000000000000000000000000000000000000000074000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000bb86bbd4871728938b30a54cc08e0eb2bc75302d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e90000000000000000000000005613af0474eb9c528a34701a5b1662e3c8fa06780000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd0000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000734b78823c4d979045ec23f38b54a070df7769ff00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000db216562328215e010f819b5abe947bad4ca961e000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a8270000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd0000000000000000000000007d91da41daf1c2e1c3dbc6143289e077e0dba1ef00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000f58ea15b20983116c21b05c876cc8e6cdae5c2b900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a74820000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001441cff79cd0000000000000000000000008d3425f7039645223517f6f6e60ef04c28f4188f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c4a49870870000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b500000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002456191cc300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "calldata": "0x8f2a0bb000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000c5ff9861695a76cf2a5e13e763525e6354e6ad949c4704d32dc4950bb63b6938000000000000000000000000000000000000000000000000000000000003f48000000000000000000000000000000000000000000000000000000000000000050000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c0000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd000000000000000000000000a723c008e76e379c55599d2e4d93879beafda79c00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000005c0000000000000000000000000000000000000000000000000000000000000074000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000e03e930d661a729595ecc77f9e692a32beed426000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e90000000000000000000000005613af0474eb9c528a34701a5b1662e3c8fa06780000000000000000000000003fffbadaf827559da092217e474760e2b2c3cedd0000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000e03e930d661a729595ecc77f9e692a32beed426000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000db216562328215e010f819b5abe947bad4ca961e000000000000000000000000cf57572261c7c2bcf21ffd220ea7d1a27d40a8270000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e41cff79cd000000000000000000000000e03e930d661a729595ecc77f9e692a32beed426000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064e17f52e9000000000000000000000000f58ea15b20983116c21b05c876cc8e6cdae5c2b900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a74820000000000000000000000003d745b8815f9be5bf053858165f8ab1f58c77932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001441cff79cd0000000000000000000000008d3425f7039645223517f6f6e60ef04c28f4188f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c4a49870870000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000c4448b71118c9071bcb9734a0eac55d18a15394900000000000000000000000086a02dd71363c440b21f4c0e5b2ad01ffe1a748200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000a4bca8c7b500000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002456191cc300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" } } \ No newline at end of file diff --git a/scripts/proposals/OmnibusApr25/generate.bash b/scripts/proposals/OmnibusApr25/generate.bash index aadd0d752..b473db894 100755 --- a/scripts/proposals/OmnibusApr25/generate.bash +++ b/scripts/proposals/OmnibusApr25/generate.bash @@ -3,9 +3,9 @@ # Upgrade Executor Update (PROP1) PROP1_CHAIN_IDS=(1 42161 42170) PROP1_ADDRESSES=( - 0xBB86bBd4871728938B30A54Cc08E0eb2bC75302d # Ethereum - 0x734B78823c4d979045EC23F38B54A070df7769FF # Arbitrum One - 0x7d91da41daf1c2e1c3dbc6143289e077e0dba1ef # Arbitrum Nova + 0xE03E930D661a729595EcC77f9e692a32BEed4260 # Ethereum + 0xE03E930D661a729595EcC77f9e692a32BEed4260 # Arbitrum One + 0xE03E930D661a729595EcC77f9e692a32BEed4260 # Arbitrum Nova ) PROP1_DATAS=( $(cast calldata "perform(address,address,address)" 0x5613AF0474EB9c528A34701A5b1662E3C8FA0678 0x3ffFbAdAF827559da092217e474760E2b2c3CeDd 0x3d745b8815F9be5BF053858165f8aB1F58c77932) From ca9464776e0aa985ed4207e7ac0e38d4c8ac482c Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Wed, 13 Aug 2025 13:10:56 -0700 Subject: [PATCH 27/29] add var names to calldata generation --- scripts/proposals/OmnibusApr25/generate.bash | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/scripts/proposals/OmnibusApr25/generate.bash b/scripts/proposals/OmnibusApr25/generate.bash index b473db894..3ed0cda0d 100755 --- a/scripts/proposals/OmnibusApr25/generate.bash +++ b/scripts/proposals/OmnibusApr25/generate.bash @@ -1,5 +1,7 @@ #!/bin/bash +set -euo pipefail + # Upgrade Executor Update (PROP1) PROP1_CHAIN_IDS=(1 42161 42170) PROP1_ADDRESSES=( @@ -8,9 +10,9 @@ PROP1_ADDRESSES=( 0xE03E930D661a729595EcC77f9e692a32BEed4260 # Arbitrum Nova ) PROP1_DATAS=( - $(cast calldata "perform(address,address,address)" 0x5613AF0474EB9c528A34701A5b1662E3C8FA0678 0x3ffFbAdAF827559da092217e474760E2b2c3CeDd 0x3d745b8815F9be5BF053858165f8aB1F58c77932) - $(cast calldata "perform(address,address,address)" 0xdb216562328215E010F819B5aBe947bad4ca961e 0xCF57572261c7c2BCF21ffD220ea7d1a27D40A827 0x3d745b8815F9be5BF053858165f8aB1F58c77932) - $(cast calldata "perform(address,address,address)" 0xf58eA15B20983116c21b05c876cc8e6CDAe5C2b9 0x86a02dD71363c440b21F4c0E5B2Ad01Ffe1A7482 0x3d745b8815F9be5BF053858165f8aB1F58c77932) + $(cast calldata "perform(address admin, address target, address newLogic)" 0x5613AF0474EB9c528A34701A5b1662E3C8FA0678 0x3ffFbAdAF827559da092217e474760E2b2c3CeDd 0x3d745b8815F9be5BF053858165f8aB1F58c77932) + $(cast calldata "perform(address admin, address target, address newLogic)" 0xdb216562328215E010F819B5aBe947bad4ca961e 0xCF57572261c7c2BCF21ffD220ea7d1a27D40A827 0x3d745b8815F9be5BF053858165f8aB1F58c77932) + $(cast calldata "perform(address admin, address target, address newLogic)" 0xf58eA15B20983116c21b05c876cc8e6CDAe5C2b9 0x86a02dD71363c440b21F4c0E5B2Ad01Ffe1A7482 0x3d745b8815F9be5BF053858165f8aB1F58c77932) ) PROP1_ACTION_TYPES=(0 0 0) PROP1_VALUES=(0 0 0) @@ -21,7 +23,7 @@ PROP2_ADDRESSES=( 0x8d3425f7039645223517F6F6e60Ef04C28f4188F ) PROP2_DATAS=( - $(cast calldata "perform(address[], uint, uint, uint)" "[0xdac17f958d2ee523a2206206994597c13d831ec7]" 0 0 $(cast to-wei 0.0005)) + $(cast calldata "perform(address[] _tokens, uint256 _maxGas, uint256 _gasPriceBid, uint256 _maxSubmissionCost)" "[0xdac17f958d2ee523a2206206994597c13d831ec7]" 0 0 $(cast to-wei 0.0005)) ) PROP2_ACTION_TYPES=(0) PROP2_VALUES=( From fe225f3b929b72d59a894ae7fdae85ca107cc94d Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Wed, 13 Aug 2025 13:22:17 -0700 Subject: [PATCH 28/29] rename to august --- scripts/proposals/{OmnibusApr25 => OmnibusAug25}/README.md | 0 scripts/proposals/{OmnibusApr25 => OmnibusAug25}/data.json | 0 scripts/proposals/{OmnibusApr25 => OmnibusAug25}/generate.bash | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename scripts/proposals/{OmnibusApr25 => OmnibusAug25}/README.md (100%) rename scripts/proposals/{OmnibusApr25 => OmnibusAug25}/data.json (100%) rename scripts/proposals/{OmnibusApr25 => OmnibusAug25}/generate.bash (100%) diff --git a/scripts/proposals/OmnibusApr25/README.md b/scripts/proposals/OmnibusAug25/README.md similarity index 100% rename from scripts/proposals/OmnibusApr25/README.md rename to scripts/proposals/OmnibusAug25/README.md diff --git a/scripts/proposals/OmnibusApr25/data.json b/scripts/proposals/OmnibusAug25/data.json similarity index 100% rename from scripts/proposals/OmnibusApr25/data.json rename to scripts/proposals/OmnibusAug25/data.json diff --git a/scripts/proposals/OmnibusApr25/generate.bash b/scripts/proposals/OmnibusAug25/generate.bash similarity index 100% rename from scripts/proposals/OmnibusApr25/generate.bash rename to scripts/proposals/OmnibusAug25/generate.bash From 47582832ceb69ae02e666ee645f092ff6318c314 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Thu, 14 Aug 2025 07:28:56 -0700 Subject: [PATCH 29/29] fix output dir --- scripts/proposals/OmnibusAug25/generate.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/proposals/OmnibusAug25/generate.bash b/scripts/proposals/OmnibusAug25/generate.bash index 3ed0cda0d..141bf6cb2 100755 --- a/scripts/proposals/OmnibusAug25/generate.bash +++ b/scripts/proposals/OmnibusAug25/generate.bash @@ -67,5 +67,5 @@ yarn gen:proposalData \ --predecessor \ 0x0000000000000000000000000000000000000000000000000000000000000000 \ --writeToJsonPath \ - ./scripts/proposals/OmnibusApr25/data.json + ./scripts/proposals/OmnibusAug25/data.json