Skip to content

Commit

Permalink
Scripts to deploy PufferModuleManager, RestakingOperator, PufferModule (
Browse files Browse the repository at this point in the history
#28)

* Update mainnet deployment scripts

* remove unused imports, formatting

* forge fmt

---------

Co-authored-by: bxmmm1 <bxmmm1@users.noreply.github.com>
  • Loading branch information
bxmmm1 and bxmmm1 authored Aug 7, 2024
1 parent 29f8bb6 commit 6909cf6
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 57 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@
pragma solidity >=0.8.0 <0.9.0;

import "forge-std/Script.sol";
import { BaseScript } from "script/BaseScript.s.sol";
import { PufferProtocol } from "../../src/PufferProtocol.sol";
import { UpgradeableBeacon } from "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol";
import { AccessManager } from "@openzeppelin/contracts/access/manager/AccessManager.sol";
import { BaseScript } from "script/BaseScript.s.sol";
import { stdJson } from "forge-std/StdJson.sol";
import { PufferModuleManager } from "../../src/PufferModuleManager.sol";
import { PufferModule } from "../../src/PufferModule.sol";
Expand All @@ -15,34 +13,30 @@ import { IDelegationManager } from "eigenlayer/interfaces/IDelegationManager.sol
import { IRewardsCoordinator } from "../../src/interface/EigenLayer/IRewardsCoordinator.sol";

/**
* @title UpgradePufferModule
* @author Puffer Finance
* @notice Upgrades PufferModuleManager
* @dev
* Use either -account or --private-key to sign the transaction
*
* NOTE:
* To run the simulation run:
* forge script script/MainnetContractMigrations/UpgradePufferModule.s.sol:UpgradePufferModule -vvvv --rpc-url=$RPC_URL
*
* If you ran the deployment script, but did not `--broadcast` the transaction, it will still update your local chainId-deployment.json file.
* Other scripts will fail because addresses will be updated in deployments file, but the deployment never happened.
*
* BaseScript.sol holds the private key logic, if you don't have `PK` ENV variable, it will use the default one PK from `makeAddr("pufferDeployer")`
*
* PK=${deployer_pk} forge script script/MainnetContractMigrations/UpgradePufferModule.s.sol:UpgradePufferModule -vvvv --rpc-url=$RPC_URL --account puffer
* To run the deployment add --broadcast --verify
*/
contract UpgradePufferModule is BaseScript {
contract UpgradePufferModule is Script {
PufferProtocol pufferProtocol = PufferProtocol(payable(0xf7b6B32492c2e13799D921E84202450131bd238B));
address ACCESS_MANAGER = 0x8c1686069474410E6243425f4a10177a94EBEE11;
address PUFFER_MODULE_BEACON = 0xdd38A5a7789C74fc7F64556fc772343658EEBb04;
PufferModuleManager pufferModuleManager = PufferModuleManager(0x9E1E4fCb49931df5743e659ad910d331735C3860);

// https://github.com/Layr-Labs/eigenlayer-contracts?tab=readme-ov-file#deployments
address eigenPodManager = 0x91E677b07F7AF907ec9a428aafA9fc14a0d3A338;
IDelayedWithdrawalRouter eigenWithdrawalRouter =
IDelayedWithdrawalRouter(0x7Fe7E9CC0F274d2435AD5d56D5fa73E47F6A23D8);
IDelegationManager delegationManager = IDelegationManager(0x39053D51B77DC0d36036Fc1fCc8Cb819df8Ef37A);
IRewardsCoordinator rewardsCoordinator = IRewardsCoordinator(address(0)); // no address found on https://github.com/Layr-Labs/eigenlayer-contracts?tab=readme-ov-file#deployments
IRewardsCoordinator rewardsCoordinator = IRewardsCoordinator(0x7750d328b314EfFa365A0402CcfD489B80B0adda);

function run() public broadcast {
function run() public {
require(block.chainid == 1, "This script is only for Puffer Mainnet");
vm.startBroadcast();

PufferModule newImplementation = new PufferModule({
protocol: pufferProtocol,
eigenPodManager: eigenPodManager,
Expand All @@ -58,6 +52,7 @@ contract UpgradePufferModule is BaseScript {
console.logBytes(calldataForAM);

bytes memory calldataToExecute = abi.encodeCall(AccessManager.execute, (PUFFER_MODULE_BEACON, calldataForAM));
console.log("From Timelock queue a tx to accessManager");
console.logBytes(calldataToExecute);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,39 +4,34 @@ pragma solidity >=0.8.0 <0.9.0;
import "forge-std/Script.sol";
import { BaseScript } from "script/BaseScript.s.sol";
import { PufferProtocol } from "../../src/PufferProtocol.sol";
import { UpgradeableBeacon } from "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol";
import { AccessManager } from "@openzeppelin/contracts/access/manager/AccessManager.sol";
import { BaseScript } from "script/BaseScript.s.sol";
import { stdJson } from "forge-std/StdJson.sol";
import { PufferModuleManager } from "../../src/PufferModuleManager.sol";
import { AVSContractsRegistry } from "../../src/AVSContractsRegistry.sol";
import { UUPSUpgradeable } from "@openzeppelin-contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
import { GenerateAccessManagerCalldata2 } from "script/AccessManagerMigrations/GenerateAccessManagerCalldata2.s.sol";

/**
* @title UpgradePufferModuleManager
* @author Puffer Finance
* @notice Upgrades PufferModuleManager
* @dev
* Use either -account or --private-key to sign the transaction
*
* NOTE:
* To run the simulation run:
* forge script script/MainnetContractMigrations/UpgradePufferModuleManager.s.sol:UpgradePufferModuleManager -vvvv --rpc-url=$RPC_URL
*
* If you ran the deployment script, but did not `--broadcast` the transaction, it will still update your local chainId-deployment.json file.
* Other scripts will fail because addresses will be updated in deployments file, but the deployment never happened.
*
* BaseScript.sol holds the private key logic, if you don't have `PK` ENV variable, it will use the default one PK from `makeAddr("pufferDeployer")`
*
* PK=${deployer_pk} forge script script/MainnetContractMigrations/UpgradePufferModuleManager.s.sol:UpgradePufferModuleManager -vvvv --rpc-url=$RPC_URL --account puffer --broadcast
* To run the deployment add --broadcast --verify
*/
contract UpgradePufferModuleManager is BaseScript {
contract UpgradePufferModuleManager is Script {
address pufferModuleBeacon = address(0xdd38A5a7789C74fc7F64556fc772343658EEBb04);
address restakingOperatorBeacon = address(0x6756B856Dd3843C84249a6A31850cB56dB824c4B);
PufferProtocol pufferProtocol = PufferProtocol(0xf7b6B32492c2e13799D921E84202450131bd238B);
AVSContractsRegistry avsContractsRegistry = AVSContractsRegistry(0x1565E55B63675c703fcC3778BD33eA97F7bE882F);
address ACCESS_MANAGER = 0x8c1686069474410E6243425f4a10177a94EBEE11;
address PufferModuleManagerProxy = 0x9E1E4fCb49931df5743e659ad910d331735C3860;

function run() public broadcast {
function run() public {
require(block.chainid == 1, "This script is only for Puffer mainnet");
vm.startBroadcast();

PufferModuleManager newImplementation = new PufferModuleManager({
pufferModuleBeacon: address(pufferModuleBeacon),
restakingOperatorBeacon: address(restakingOperatorBeacon),
Expand All @@ -50,6 +45,13 @@ contract UpgradePufferModuleManager is BaseScript {

bytes memory calldataToExecute =
abi.encodeCall(AccessManager.execute, (PufferModuleManagerProxy, calldataForAM));

bytes memory cd = new GenerateAccessManagerCalldata2().run(PufferModuleManagerProxy);

console.log("From Timelock queue a tx to accessManager");
console.logBytes(calldataToExecute);

console.log("From Timelock queue a tx to accessManager");
console.logBytes(cd);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,10 @@ pragma solidity >=0.8.0 <0.9.0;

import "forge-std/Script.sol";
import { BaseScript } from "script/BaseScript.s.sol";
import { PufferProtocol } from "../../src/PufferProtocol.sol";
import { AccessManager } from "@openzeppelin/contracts/access/manager/AccessManager.sol";
import { BaseScript } from "script/BaseScript.s.sol";
import { stdJson } from "forge-std/StdJson.sol";
import { PufferModuleManager } from "../../src/PufferModuleManager.sol";
import { AVSContractsRegistry } from "../../src/AVSContractsRegistry.sol";
import { UUPSUpgradeable } from "@openzeppelin-contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
import { UpgradeableBeacon } from "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol";
import { RestakingOperator } from "../../src/RestakingOperator.sol";
import { IDelegationManager } from "eigenlayer/interfaces/IDelegationManager.sol";
Expand All @@ -18,14 +15,19 @@ import { GenerateAccessManagerCalldata1 } from "script/AccessManagerMigrations/G
import { IRewardsCoordinator } from "../../src/interface/EigenLayer/IRewardsCoordinator.sol";

/**
* forge script script/MainnetContractMigrations/UpgradeRestakingOperator.s.sol:UpgradeRestakingOperator --rpc-url=$RPC_URL --private-key $PK
* Use either -account or --private-key to sign the transaction
*
* To run the simulation run:
* forge script script/MainnetContractMigrations/UpgradePufferModule.s.sol:UpgradePufferModule -vvvv --rpc-url=$RPC_URL
*
* To run the deployment add --broadcast --verify
*/
contract UpgradeRestakingOperator is Script {
address DELEGATION_MANAGER = 0x39053D51B77DC0d36036Fc1fCc8Cb819df8Ef37A;
address EIGEN_SLASHER = 0xD92145c07f8Ed1D392c1B88017934E301CC1c3Cd;
address MODULE_MANAGER_PROXY = 0x9E1E4fCb49931df5743e659ad910d331735C3860;
address MODULE_BEACON = 0xdd38A5a7789C74fc7F64556fc772343658EEBb04;
address REWARDS_COORDINATOR = 0xAcc1fb458a1317E886dB376Fc8141540537E68fE;
address REWARDS_COORDINATOR = 0x7750d328b314EfFa365A0402CcfD489B80B0adda;
address RESTAKING_OPERATOR_BEACON = 0x6756B856Dd3843C84249a6A31850cB56dB824c4B;
address PUFFER_PROTOCOL = 0xf7b6B32492c2e13799D921E84202450131bd238B;
address DAO = 0xC0896ab1A8cae8c2C1d27d011eb955Cca955580d;
Expand All @@ -35,37 +37,21 @@ contract UpgradeRestakingOperator is Script {
require(block.chainid == 1, "This script is only for Puffer Mainnet");
vm.startBroadcast();

AVSContractsRegistry avsRegistry = new AVSContractsRegistry(address(ACCESS_MANAGER));

PufferModuleManager pufferModuleManagerImpl = new PufferModuleManager({
pufferModuleBeacon: MODULE_BEACON,
restakingOperatorBeacon: RESTAKING_OPERATOR_BEACON,
pufferProtocol: PUFFER_PROTOCOL,
avsContractsRegistry: avsRegistry
});

RestakingOperator restakingOperatorImpl = new RestakingOperator({
delegationManager: IDelegationManager(DELEGATION_MANAGER),
slasher: ISlasher(EIGEN_SLASHER),
moduleManager: PufferModuleManager(MODULE_MANAGER_PROXY),
rewardsCoordinator: IRewardsCoordinator(REWARDS_COORDINATOR)
});

bytes memory accessCd =
new GenerateAccessManagerCalldata1().run(MODULE_MANAGER_PROXY, address(avsRegistry), DAO);
// bytes memory accessCd =
// new GenerateAccessManagerCalldata1().run(MODULE_MANAGER_PROXY, address(avsRegistry), DAO);

bytes memory cd1 = abi.encodeCall(UUPSUpgradeable.upgradeToAndCall, (address(pufferModuleManagerImpl), ""));
bytes memory cd2 = abi.encodeCall(UpgradeableBeacon.upgradeTo, address(restakingOperatorImpl));
bytes memory cd3 = abi.encodeCall(AccessManager.execute, (MODULE_MANAGER_PROXY, cd1));
bytes memory cd4 = abi.encodeCall(AccessManager.execute, (RESTAKING_OPERATOR_BEACON, cd2));
bytes memory cd1 = abi.encodeCall(UpgradeableBeacon.upgradeTo, address(restakingOperatorImpl));
bytes memory cd2 = abi.encodeCall(AccessManager.execute, (RESTAKING_OPERATOR_BEACON, cd1));

// calldata to execute using the timelock contract. setting the target as the Access Manager
console.logBytes(cd3);
console.logBytes(cd4);
console.logBytes(accessCd);

// AccessManager is the owner of upgradeable beacon for restaking operator & module manager
// AccessManager(ACCESS_MANAGER).execute(MODULE_MANAGER_PROXY, cd1);
// AccessManager(ACCESS_MANAGER).execute(RESTAKING_OPERATOR_BEACON, cd2);
console.log("From Timelock queue a tx to accessManager");
console.logBytes(cd2);
}
}

0 comments on commit 6909cf6

Please sign in to comment.