Skip to content

Commit

Permalink
feat: add checker, improve configs, cleanup
Browse files Browse the repository at this point in the history
- add Current_Config_Check.s.sol that checks the active governance config

- fix configs by adding more addresses + renaming for clarity

- delete (apparently) unused files
  • Loading branch information
MinisculeTarantula committed Oct 3, 2024
1 parent 4bf3249 commit 114d1ec
Show file tree
Hide file tree
Showing 17 changed files with 293 additions and 1,085 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"bEIGENImpl": "0x3Ef8CcaD64043A57eeDEcC3900b819E6c80f5419",
"eigenStrategy": "0xdcCF401fD121d8C542E96BC1d0078884422aFAD2",
"eigenStrategyImpl": "0x59D13E7Fb0bC0e57c1fc6594ff701592A6e4dD2B",
"tokenProxyAdmin": "0x1BEF05C7303d44e0E2FCD2A19d993eDEd4c51b5B"
"eigenTokenProxyAdmin": "0x1BEF05C7303d44e0E2FCD2A19d993eDEd4c51b5B"
}
},
"chainInfo": {
Expand Down
10 changes: 7 additions & 3 deletions script/configs/holesky/eigenlayer_addresses_testnet.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,16 @@
"strategyFactoryBeacon": "0xd3c6C6BA4E40dB9288c6a2077e5635344F8aFA4F",
"strategyFactoryBeaconImplementation": "0xb637caeedfCBf88e0d019E7AE4691b554c994A1e",
"token": {
"tokenProxyAdmin": "0x67482666771e82C9a73BB9e9A22B2B597f448BBf",
"eigenTokenProxyAdmin": "0x67482666771e82C9a73BB9e9A22B2B597f448BBf",
"beigenTokenProxyAdmin": "0x6B04F84780CdD42d02b079d1e7a36887bBff8679",
"EIGEN": "0x3B78576F7D6837500bA3De27A60c7f594934027E",
"bEIGEN": "0x275cCf9Be51f4a6C94aBa6114cdf2a4c45B9cb27",
"EIGENImpl": "0x01cbB2ae8eFE46EEdB9f7575D91cA1EB38823050",
"bEIGENImpl": "0x05adA1C66DdDD7c36705bC23a4d50dBa72E4E05c",
"eigenStrategy": "0x43252609bff8a13dFe5e057097f2f45A24387a84",
"eigenStrategyImpl": "0x94650e09a471CEF96e7966cabf26718FBf352697"
"eigenStrategyImpl": "0x94650e09a471CEF96e7966cabf26718FBf352697",
"eigenTokenTimelockController": "0xf74BAF5e332D4B5F65cB85F863466d745a74918e",
"beigenTokenTimelockController": "0x1554003905e391d99126fF6b9f4ef6A425D8004a"
}
},
"chainInfo": {
Expand All @@ -70,7 +73,8 @@
"executorMultisig": "0x28Ade60640fdBDb2609D8d8734D1b5cBeFc0C348",
"operationsMultisig": "0xfaEF7338b7490b9E272d80A1a39f4657cAf2b97d",
"pauserMultisig": "0x53410249ec7d3a3F9F1ba3912D50D6A3Df6d10A7",
"timelock": "0xcF19CE0561052a7A7Ff21156730285997B350A7D"
"timelock": "0xcF19CE0561052a7A7Ff21156730285997B350A7D",
"foundationMultisig": "0x7Cb5d96A8D67304E51E022979Eb9C63a17484076"
}
}

1 change: 1 addition & 0 deletions script/configs/holesky/eigenlayer_testnet.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"communityMultisig": "0xCb8d2f9e55Bc7B1FA9d089f9aC80C583D2BDD5F7",
"operationsMultisig": "0xfaEF7338b7490b9E272d80A1a39f4657cAf2b97d",
"executorMultisig": "0x28Ade60640fdBDb2609D8d8734D1b5cBeFc0C348",
"foundationMultisig": "0x7Cb5d96A8D67304E51E022979Eb9C63a17484076",
"timelock": "0xcF19CE0561052a7A7Ff21156730285997B350A7D"
},
"strategies": {
Expand Down
10 changes: 7 additions & 3 deletions script/configs/mainnet/mainnet-addresses.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,16 @@
"0x298aFB19A105D59E74658C4C334Ff360BadE6dd2"
],
"token": {
"tokenProxyAdmin": "0x3f5Ab2D4418d38568705bFd6672630fCC3435CC9",
"eigenTokenProxyAdmin": "0x3f5Ab2D4418d38568705bFd6672630fCC3435CC9",
"beigenTokenProxyAdmin": "0x3f5Ab2D4418d38568705bFd6672630fCC3435CC9",
"EIGEN": "0xec53bf9167f50cdeb3ae105f56099aaab9061f83",
"bEIGEN": "0x83E9115d334D248Ce39a6f36144aEaB5b3456e75",
"EIGENImpl": "0x17f56E911C279bad67eDC08acbC9cf3DC4eF26A0",
"bEIGENImpl": "0xF2b225815F70c9b327DC9db758A36c92A4279b17",
"eigenStrategy": "0xaCB55C530Acdb2849e6d4f36992Cd8c9D50ED8F7",
"eigenStrategyImpl": "0x27e7a3a81741b9fcc5ad7edcbf9f8a72a5c00428"
"eigenStrategyImpl": "0x27e7a3a81741b9fcc5ad7edcbf9f8a72a5c00428",
"eigenTokenTimelockController": "0x2520C6b2C1FBE1813AB5c7c1018CDa39529e9FF2",
"beigenTokenTimelockController": "0xd6EC41E453C5E7dA5494f4d51A053Ab571712E6f"
}
},
"numStrategies": 12,
Expand All @@ -75,6 +78,7 @@
"executorMultisig": "0x369e6F597e22EaB55fFb173C6d9cD234BD699111",
"operationsMultisig": "0xBE1685C81aA44FF9FB319dD389addd9374383e90",
"pauserMultisig": "0x5050389572f2d220ad927CcbeA0D406831012390",
"timelock": "0xA6Db1A8C5a981d1536266D2a393c5F8dDb210EAF"
"timelock": "0xA6Db1A8C5a981d1536266D2a393c5F8dDb210EAF",
"foundationMultisig": "0xbb00DDa2832850a43840A3A86515E3Fe226865F2"
}
}
22 changes: 11 additions & 11 deletions script/deploy/holesky/Eigen_Token_Deploy.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ contract Eigen_Token_Deploy is Script, Test {
address operationsMultisig = 0xfaEF7338b7490b9E272d80A1a39f4657cAf2b97d;
EmptyContract public emptyContract = EmptyContract(0x9690d52B1Ce155DB2ec5eCbF5a262ccCc7B3A6D2);

ProxyAdmin public tokenProxyAdmin;
ProxyAdmin public eigenTokenProxyAdmin;
Eigen public EIGENImpl;
Eigen public EIGEN;
BackingEigen public bEIGENImpl;
Expand All @@ -38,7 +38,7 @@ contract Eigen_Token_Deploy is Script, Test {

emit log_string("====Deployed Contracts====");

emit log_named_address("ProxyAdmin", address(tokenProxyAdmin));
emit log_named_address("ProxyAdmin", address(eigenTokenProxyAdmin));
emit log_named_address("EIGEN", address(EIGEN));
emit log_named_address("bEIGEN", address(bEIGEN));
emit log_named_address("EIGENImpl", address(EIGENImpl));
Expand All @@ -47,14 +47,14 @@ contract Eigen_Token_Deploy is Script, Test {

function _deployToken() internal {
// Deploy ProxyAdmin, later set admins for all proxies to be executorMultisig
tokenProxyAdmin = new ProxyAdmin();
eigenTokenProxyAdmin = new ProxyAdmin();

EIGEN = Eigen(
address(new TransparentUpgradeableProxy(address(emptyContract), address(tokenProxyAdmin), ""))
address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenTokenProxyAdmin), ""))
);

bEIGEN = BackingEigen(
address(new TransparentUpgradeableProxy(address(emptyContract), address(tokenProxyAdmin), ""))
address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenTokenProxyAdmin), ""))
);

// deploy impls
Expand All @@ -70,7 +70,7 @@ contract Eigen_Token_Deploy is Script, Test {
uint256[] memory mintAllowedAfters = new uint256[](1);

// upgrade and initialize proxies
tokenProxyAdmin.upgradeAndCall(
eigenTokenProxyAdmin.upgradeAndCall(
TransparentUpgradeableProxy(payable(address(EIGEN))),
address(EIGENImpl),
abi.encodeWithSelector(
Expand All @@ -84,7 +84,7 @@ contract Eigen_Token_Deploy is Script, Test {

EIGEN.mint();

tokenProxyAdmin.upgradeAndCall(
eigenTokenProxyAdmin.upgradeAndCall(
TransparentUpgradeableProxy(payable(address(bEIGEN))),
address(bEIGENImpl),
abi.encodeWithSelector(
Expand All @@ -93,7 +93,7 @@ contract Eigen_Token_Deploy is Script, Test {
)
);

tokenProxyAdmin.transferOwnership(operationsMultisig);
eigenTokenProxyAdmin.transferOwnership(operationsMultisig);
}

function _verifyDeployment() internal view {
Expand All @@ -106,9 +106,9 @@ contract Eigen_Token_Deploy is Script, Test {
require(EIGEN.owner() == msg.sender, "Eigen_Token_Deploy: EIGEN owner mismatch");
require(bEIGEN.owner() == msg.sender, "Eigen_Token_Deploy: bEIGEN owner mismatch");

require(tokenProxyAdmin.getProxyImplementation(TransparentUpgradeableProxy(payable(address(EIGEN)))) == address(EIGENImpl), "Eigen_Token_Deploy: EIGEN implementation mismatch");
require(tokenProxyAdmin.getProxyImplementation(TransparentUpgradeableProxy(payable(address(bEIGEN)))) == address(bEIGENImpl), "Eigen_Token_Deploy: bEIGEN implementation mismatch");
require(eigenTokenProxyAdmin.getProxyImplementation(TransparentUpgradeableProxy(payable(address(EIGEN)))) == address(EIGENImpl), "Eigen_Token_Deploy: EIGEN implementation mismatch");
require(eigenTokenProxyAdmin.getProxyImplementation(TransparentUpgradeableProxy(payable(address(bEIGEN)))) == address(bEIGENImpl), "Eigen_Token_Deploy: bEIGEN implementation mismatch");

require(tokenProxyAdmin.owner() == operationsMultisig, "Eigen_Token_Deploy: ProxyAdmin owner mismatch");
require(eigenTokenProxyAdmin.owner() == operationsMultisig, "Eigen_Token_Deploy: ProxyAdmin owner mismatch");
}
}
2 changes: 1 addition & 1 deletion script/deploy/local/Deploy_From_Scratch.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,7 @@ contract DeployFromScratch is Script, Test {

{
// dummy token data
string memory token = '{"tokenProxyAdmin": "0x0000000000000000000000000000000000000000", "EIGEN": "0x0000000000000000000000000000000000000000","bEIGEN": "0x0000000000000000000000000000000000000000","EIGENImpl": "0x0000000000000000000000000000000000000000","bEIGENImpl": "0x0000000000000000000000000000000000000000","eigenStrategy": "0x0000000000000000000000000000000000000000","eigenStrategyImpl": "0x0000000000000000000000000000000000000000"}';
string memory token = '{"eigenTokenProxyAdmin": "0x0000000000000000000000000000000000000000", "EIGEN": "0x0000000000000000000000000000000000000000","bEIGEN": "0x0000000000000000000000000000000000000000","EIGENImpl": "0x0000000000000000000000000000000000000000","bEIGENImpl": "0x0000000000000000000000000000000000000000","eigenStrategy": "0x0000000000000000000000000000000000000000","eigenStrategyImpl": "0x0000000000000000000000000000000000000000"}';
deployed_addresses_output = vm.serializeString(deployed_addresses, "token", token);
}

Expand Down
113 changes: 113 additions & 0 deletions script/upgrade/holesky/Current_Config_Check.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.12;

import "../../utils/ExistingDeploymentParser.sol";
import "../../utils/TimelockEncoding.sol";

/**
* forge script script/upgrade/holesky/Current_Config_Check.s.sol:Current_Config_Check -vvv
*
*/
contract Current_Config_Check is ExistingDeploymentParser, TimelockEncoding {
string deployedContractsConfig = "script/configs/holesky/eigenlayer_addresses_testnet.config.json";
string intialDeploymentParams = "script/configs/holesky/eigenlayer_testnet.config.json";
function run() external virtual {
string memory forkUrl = vm.envString("RPC_HOLESKY");
uint256 forkId = vm.createFork(forkUrl);
vm.selectFork(forkId);

// read and log the chainID
uint256 currentChainId = block.chainid;
emit log_named_uint("You are parsing on ChainID", currentChainId);
require(currentChainId == 17000, "script is only for mainnet");

_parseDeployedContracts(deployedContractsConfig);
_parseInitialDeploymentParams(intialDeploymentParams);

// Sanity Checks
_verifyContractPointers();
_verifyImplementations();
_verifyContractsInitialized(false);
_verifyInitializationParams();

// bytes memory data = abi.encodeWithSelector(strategyFactory.transferOwnership.selector, operationsMultisig);
// bytes memory callToExecutor = encodeForExecutor({
// from: communityMultisig,
// to: address(strategyFactory),
// value: 0,
// data: data,
// operation: ISafe.Operation.Call
// });

// vm.prank(communityMultisig);
// (bool success, /*bytes memory returndata*/) = executorMultisig.call(callToExecutor);
// require(success, "call to executorMultisig failed");

checkDesiredGovernanceConfiguration();
}

// check governance configuration
function checkDesiredGovernanceConfiguration() public {
assertEq(eigenLayerProxyAdmin.owner(), executorMultisig,
"eigenLayerProxyAdmin.owner() != executorMultisig");
assertEq(delegationManager.owner(), executorMultisig,
"delegationManager.owner() != executorMultisig");
assertEq(strategyManager.owner(), executorMultisig,
"strategyManager.owner() != executorMultisig");
assertEq(strategyManager.strategyWhitelister(), address(strategyFactory),
"strategyManager.strategyWhitelister() != address(strategyFactory)");
assertEq(strategyFactory.owner(), operationsMultisig,
"strategyFactory.owner() != operationsMultisig");
assertEq(avsDirectory.owner(), executorMultisig,
"avsDirectory.owner() != executorMultisig");
assertEq(rewardsCoordinator.owner(), operationsMultisig,
"rewardsCoordinator.owner() != operationsMultisig");
assertEq(eigenLayerPauserReg.unpauser(), executorMultisig,
"eigenLayerPauserReg.unpauser() != operationsMultisig");
require(eigenLayerPauserReg.isPauser(operationsMultisig),
"operationsMultisig does not have pausing permissions");
require(eigenLayerPauserReg.isPauser(executorMultisig),
"executorMultisig does not have pausing permissions");
require(eigenLayerPauserReg.isPauser(pauserMultisig),
"pauserMultisig does not have pausing permissions");

(bool success, bytes memory returndata) = timelock.staticcall(abi.encodeWithSignature("admin()"));
require(success, "call to timelock.admin() failed");
address timelockAdmin = abi.decode(returndata, (address));
assertEq(timelockAdmin, operationsMultisig,
"timelockAdmin != operationsMultisig");

(success, returndata) = executorMultisig.staticcall(abi.encodeWithSignature("getOwners()"));
require(success, "call to executorMultisig.getOwners() failed");
address[] memory executorMultisigOwners = abi.decode(returndata, (address[]));
require(executorMultisigOwners.length == 2,
"executorMultisig owners wrong length");
bool timelockInOwners;
bool communityMultisigInOwners;
for (uint256 i = 0; i < 2; ++i) {
if (executorMultisigOwners[i] == timelock) {
timelockInOwners = true;
}
if (executorMultisigOwners[i] == communityMultisig) {
communityMultisigInOwners = true;
}
}
require(timelockInOwners, "timelock not in executorMultisig owners");
require(communityMultisigInOwners, "communityMultisig not in executorMultisig owners");

require(eigenTokenProxyAdmin != beigenTokenProxyAdmin,
"tokens must have different proxy admins to allow different timelock controllers");
require(eigenTokenTimelockController != beigenTokenTimelockController,
"tokens must have different timelock controllers");

// note that proxy admin owners are different but _token_ owners are the same
assertEq(Ownable(address(EIGEN)).owner(), address(eigenTokenTimelockController),
"EIGEN.owner() != eigenTokenTimelockController");
assertEq(Ownable(address(bEIGEN)).owner(), address(eigenTokenTimelockController),
"bEIGEN.owner() != eigenTokenTimelockController");
assertEq(eigenTokenProxyAdmin.owner(), address(eigenTokenTimelockController),
"eigenTokenProxyAdmin.owner() != eigenTokenTimelockController");
assertEq(beigenTokenProxyAdmin.owner(), address(beigenTokenTimelockController),
"beigenTokenProxyAdmin.owner() != beigenTokenTimelockController");
}
}
Loading

0 comments on commit 114d1ec

Please sign in to comment.