1+ // SPDX-License-Identifier: BUSL-1.1
2+ pragma solidity ^ 0.8.12 ;
3+
4+ import "../Env.sol " ;
5+ import {Queue} from "./2-multisig.s.sol " ;
6+
7+ import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol " ;
8+ import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol " ;
9+
10+ contract Execute is Queue {
11+ using Env for * ;
12+
13+ function _runAsMultisig () prank (Env.protocolCouncilMultisig ()) internal override (Queue) {
14+ bytes memory calldata_to_executor = _getCalldataToExecutor ();
15+
16+ TimelockController timelock = Env.timelockController ();
17+ timelock.execute ({
18+ target: Env.executorMultisig (),
19+ value: 0 ,
20+ payload: calldata_to_executor,
21+ predecessor: 0 ,
22+ salt: 0
23+ });
24+ }
25+
26+ function testScript () public virtual override (Queue){
27+ // 0. Deploy Impls
28+ runAsEOA ();
29+
30+ TimelockController timelock = Env.timelockController ();
31+ bytes memory calldata_to_executor = _getCalldataToExecutor ();
32+ bytes32 txHash = timelock.hashOperation ({
33+ target: Env.executorMultisig (),
34+ value: 0 ,
35+ data: calldata_to_executor,
36+ predecessor: 0 ,
37+ salt: 0
38+ });
39+ assertFalse (timelock.isOperationPending (txHash), "Transaction should NOT be queued. " );
40+
41+ // 1. Queue Upgrade
42+ Queue._runAsMultisig ();
43+ _unsafeResetHasPranked (); // reset hasPranked so we can use it again
44+
45+ // 2. Warp past delay
46+ vm.warp (block .timestamp + timelock.getMinDelay ()); // 1 tick after ETA
47+ assertEq (timelock.isOperationReady (txHash), true , "Transaction should be executable. " );
48+
49+ // 3- execute
50+ execute ();
51+
52+ assertTrue (timelock.isOperationDone (txHash), "Transaction should be complete. " );
53+
54+ // 4. Validate
55+ _validateNewImplAddresses (true );
56+ _validateProxyConstructors ();
57+ }
58+
59+ function _validateProxyConstructors () internal view {
60+ AllocationManager allocationManager = Env.proxy.allocationManager ();
61+ assertTrue (allocationManager.delegation () == Env.proxy.delegationManager (), "alm.dm invalid " );
62+ assertTrue (allocationManager.pauserRegistry () == Env.impl.pauserRegistry (), "alm.pR invalid " );
63+ assertTrue (allocationManager.permissionController () == Env.proxy.permissionController (), "alm.pc invalid " );
64+ assertTrue (allocationManager.DEALLOCATION_DELAY () == Env.MIN_WITHDRAWAL_DELAY (), "alm.deallocDelay invalid " );
65+ assertTrue (allocationManager.ALLOCATION_CONFIGURATION_DELAY () == Env.ALLOCATION_CONFIGURATION_DELAY (), "alm.configDelay invalid " );
66+
67+ DelegationManager delegation = Env.proxy.delegationManager ();
68+ assertTrue (delegation.strategyManager () == Env.proxy.strategyManager (), "dm.sm invalid " );
69+ assertTrue (delegation.eigenPodManager () == Env.proxy.eigenPodManager (), "dm.epm invalid " );
70+ assertTrue (delegation.allocationManager () == Env.proxy.allocationManager (), "dm.alm invalid " );
71+ assertTrue (delegation.pauserRegistry () == Env.impl.pauserRegistry (), "dm.pR invalid " );
72+ assertTrue (delegation.permissionController () == Env.proxy.permissionController (), "dm.pc invalid " );
73+ assertTrue (delegation.minWithdrawalDelayBlocks () == Env.MIN_WITHDRAWAL_DELAY (), "dm.withdrawalDelay invalid " );
74+ }
75+ }
0 commit comments