Skip to content

Commit

Permalink
feat: improve deployment script
Browse files Browse the repository at this point in the history
  • Loading branch information
jac18281828 committed Aug 13, 2024
1 parent 9ec2763 commit 130a0ab
Show file tree
Hide file tree
Showing 5 changed files with 303 additions and 153 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ script/output/M1_deployment_data.json
/docs/docgen/

script/misc
script/output

test.sh

Expand Down
16 changes: 12 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,6 @@ surya mdreport surya_report.md ./src/contracts/**/*.sol
make bindings
```


## Deploy EigenLayer Contracts

### Deploy to Anvil
Expand Down Expand Up @@ -137,9 +136,18 @@ $ cast balance ${PUBLIC_KEY} --rpc-url ${RPC_URL}
```bash
$ forge script script/deploy/devnet/M2_Deploy_From_Scratch.s.sol --rpc-url ${RPC_URL} \
--private-key ${PRIVATE_KEY} --broadcast \
--sig "run(string memory configFileName)" -- M2_deploy_from_scratch.anvil.config.json
--sig "run(string)" -- M2_deploy_from_scratch.anvil.config.json
```

6\. Upgrade M2 Contracts

```bash
$ forge script script/deploy/devnet/M2_Deploy_From_Scratch.s.sol --rpc-url ${RPC_URL} \
--private-key ${PRIVATE_KEY} --broadcast \
--sig "upgrade(string,string)" -- M2_deploy_from_scratch.anvil.config.json M2_deploy_from_scratch_deployment_data.json
```


Contracts deployment information is saved in `script/output/devnet/M2_from_scratch_deployment_data.json`

### Deploy to DevNet
Expand Down Expand Up @@ -170,14 +178,14 @@ $ cast balance ${PUBLIC_KEY} --rpc-url ${RPC_URL}
```bash
$ forge script script/deploy/devnet/M2_Deploy_From_Scratch.s.sol --rpc-url ${RPC_URL} \
--private-key ${PRIVATE_KEY} --broadcast \
--sig "run(string memory configFileName)" -- M2_deploy_from_scratch.devnet.config.json
--sig "run(string)" -- M2_deploy_from_scratch.devnet.config.json
```

6\. Upgrade Contracts
```bash
$ forge script script/deploy/devnet/M2_Deploy_From_Scratch.s.sol --rpc-url ${RPC_URL} \
--private-key ${PRIVATE_KEY} --broadcast \
--sig "upgrade(string memory configFileName)" -- M2_deploy_from_scratch.devnet.config.json
--sig "upgrade(string,string)" -- M2_deploy_from_scratch.devnet.config.json M2_deploy_from_scratch.devnet.config.json
```

Contracts deployment information is saved in `script/output/devnet/M2_from_scratch_deployment_data.json`
Expand Down
117 changes: 85 additions & 32 deletions script/deploy/devnet/DeploymentDetails.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,8 @@ struct ContractDeployment {
address avsDirectory;
address avsDirectoryImplementation;
address baseStrategyImplementation;
address delayedWithdrawalRouter;
address delayedWithdrawalRouterImplementation;
address delegation;
address delegationImplementation;
address delegationManager;
address delegationManagerImplementation;
address eigenPodBeacon;
address eigenPodImplementation;
address eigenPodManager;
Expand All @@ -24,9 +22,9 @@ struct ContractDeployment {
address rewardsCoordinatorImplementation;
address slasher;
address slasherImplementation;
address strategies;
address strategyManager;
address strategyManagerImplementation;
address ethDepositAddress;
}

library DeploymentDetails {
Expand All @@ -35,64 +33,119 @@ library DeploymentDetails {
function write(
ContractDeployment calldata deploymentDetails,
address executorMultisig,
address operationsMultisig
address operationsMultisig,
address nilContract
) external {
// WRITE JSON DATA
string memory parent_object = "parent object";
string memory parentObject = "parent object";

string memory deployedAddresses = "addresses";
string memory deployedAddresses = "address";
vm.serializeAddress(deployedAddresses, "proxyAdmin", deploymentDetails.proxyAdmin);
vm.serializeAddress(deployedAddresses, "eigenLayerPauserReg", deploymentDetails.pauserRegistry);
vm.serializeAddress(deployedAddresses, "pauserRegistry", deploymentDetails.pauserRegistry);
vm.serializeAddress(deployedAddresses, "slasher", deploymentDetails.slasher);
vm.serializeAddress(deployedAddresses, "slasherImplementation", deploymentDetails.slasherImplementation);
vm.serializeAddress(deployedAddresses, "delegation", deploymentDetails.delegation);
vm.serializeAddress(deployedAddresses, "delegationImplementation", deploymentDetails.delegationImplementation);
vm.serializeAddress(deployedAddresses, "delegationManager", deploymentDetails.delegationManager);
vm.serializeAddress(
deployedAddresses,
"delegationManagerImplementation",
deploymentDetails.delegationManagerImplementation
);
vm.serializeAddress(deployedAddresses, "avsDirectory", deploymentDetails.avsDirectory);
vm.serializeAddress(
deployedAddresses, "avsDirectoryImplementation", deploymentDetails.avsDirectoryImplementation
deployedAddresses,
"avsDirectoryImplementation",
deploymentDetails.avsDirectoryImplementation
);
vm.serializeAddress(deployedAddresses, "strategyManager", deploymentDetails.strategyManager);
vm.serializeAddress(
deployedAddresses, "strategyManagerImplementation", deploymentDetails.strategyManagerImplementation
deployedAddresses,
"strategyManagerImplementation",
deploymentDetails.strategyManagerImplementation
);
vm.serializeAddress(deployedAddresses, "eigenPodManager", deploymentDetails.eigenPodManager);
vm.serializeAddress(
deployedAddresses, "eigenPodManagerImplementation", deploymentDetails.eigenPodManagerImplementation
);
vm.serializeAddress(deployedAddresses, "delayedWithdrawalRouter", deploymentDetails.delayedWithdrawalRouter);
vm.serializeAddress(
deployedAddresses,
"delayedWithdrawalRouterImplementation",
deploymentDetails.delayedWithdrawalRouterImplementation
"eigenPodManagerImplementation",
deploymentDetails.eigenPodManagerImplementation
);
vm.serializeAddress(deployedAddresses, "rewardsCoordinator", deploymentDetails.rewardsCoordinator);
vm.serializeAddress(
deployedAddresses, "rewardsCoordinatorImplementation", deploymentDetails.rewardsCoordinatorImplementation
deployedAddresses,
"rewardsCoordinatorImplementation",
deploymentDetails.rewardsCoordinatorImplementation
);
vm.serializeAddress(deployedAddresses, "eigenPodBeacon", deploymentDetails.eigenPodBeacon);
vm.serializeAddress(deployedAddresses, "eigenPodImplementation", deploymentDetails.eigenPodImplementation);
vm.serializeAddress(
deployedAddresses, "baseStrategyImplementation", deploymentDetails.baseStrategyImplementation
deployedAddresses,
"baseStrategyImplementation",
deploymentDetails.baseStrategyImplementation
);
vm.serializeAddress(deployedAddresses, "emptyContract", deploymentDetails.emptyContract);
vm.serializeAddress(deployedAddresses, "emptyContract", nilContract);
vm.serializeAddress(deployedAddresses, "ethDepositAddress", deploymentDetails.ethDepositAddress);

string memory deployedAddressesOutput = "";
string memory deployedAddressesOutput = vm.serializeString(deployedAddresses, "strategies", "");

string memory parameters = "parameters";
vm.serializeAddress(parameters, "executorMultisig", executorMultisig);
string memory parameters_output = vm.serializeAddress(parameters, "operationsMultisig", operationsMultisig);
string memory parametersOutput = vm.serializeAddress(parameters, "operationsMultisig", operationsMultisig);

string memory chain_info = "chainInfo";
vm.serializeUint(chain_info, "deploymentBlock", block.number);
string memory chain_info_output = vm.serializeUint(chain_info, "chainId", block.chainid);
string memory chainInfo = "chainInfo";
vm.serializeUint(chainInfo, "deploymentBlock", block.number);
string memory chainInfo_output = vm.serializeUint(chainInfo, "chainId", block.chainid);

// serialize all the data
vm.serializeString(parent_object, deployedAddresses, deployedAddressesOutput);
vm.serializeString(parent_object, chain_info, chain_info_output);
string memory finalJson = vm.serializeString(parent_object, parameters, parameters_output);
vm.serializeString(parentObject, deployedAddresses, deployedAddressesOutput);
vm.serializeString(parentObject, chainInfo, chainInfo_output);
string memory finalJson = vm.serializeString(parentObject, parameters, parametersOutput);
// TODO: should output to different file depending on configFile passed to run()
// so that we don't override mainnet output by deploying to goerli for eg.
vm.writeJson(finalJson, "script/output/devnet/M2_from_scratch_deployment_data.json");
console2.log("Deployment data written to script/output/devnet/M2_from_scratch_deployment_data.json");
vm.writeJson(finalJson, "script/output/devnet/M2_deploy_from_scratch_deployment_data.json");
console2.log("Deployment data written to script/output/devnet/M2_deploy_from_scratch_deployment_data.json");
}

function read(string memory deploymentFileName) external returns (ContractDeployment memory) {
string memory deployDetailsPath = string(bytes(string.concat("script/output/devnet/", deploymentFileName)));
string memory deployData = vm.readFile(deployDetailsPath);
ContractDeployment memory deploymentDetails;
deploymentDetails.avsDirectory = stdJson.readAddress(deployData, ".address.avsDirectory");
deploymentDetails.avsDirectoryImplementation = stdJson.readAddress(
deployData,
".address.avsDirectoryImplementation"
);
deploymentDetails.baseStrategyImplementation = stdJson.readAddress(
deployData,
".address.baseStrategyImplementation"
);
deploymentDetails.delegationManager = stdJson.readAddress(deployData, ".address.delegationManager");
deploymentDetails.delegationManagerImplementation = stdJson.readAddress(
deployData,
".address.delegationManagerImplementation"
);
deploymentDetails.eigenPodBeacon = stdJson.readAddress(deployData, ".address.eigenPodBeacon");
deploymentDetails.eigenPodImplementation = stdJson.readAddress(deployData, ".address.eigenPodImplementation");
deploymentDetails.eigenPodManager = stdJson.readAddress(deployData, ".address.eigenPodManager");
deploymentDetails.eigenPodManagerImplementation = stdJson.readAddress(
deployData,
".address.eigenPodManagerImplementation"
);
deploymentDetails.emptyContract = stdJson.readAddress(deployData, ".address.emptyContract");
deploymentDetails.pauserRegistry = stdJson.readAddress(deployData, ".address.pauserRegistry");
deploymentDetails.proxyAdmin = stdJson.readAddress(deployData, ".address.proxyAdmin");
deploymentDetails.rewardsCoordinator = stdJson.readAddress(deployData, ".address.rewardsCoordinator");
deploymentDetails.rewardsCoordinatorImplementation = stdJson.readAddress(
deployData,
".address.rewardsCoordinatorImplementation"
);
deploymentDetails.slasher = stdJson.readAddress(deployData, ".address.slasher");
deploymentDetails.slasherImplementation = stdJson.readAddress(deployData, ".address.slasherImplementation");
deploymentDetails.strategyManager = stdJson.readAddress(deployData, ".address.strategyManager");
deploymentDetails.strategyManagerImplementation = stdJson.readAddress(
deployData,
".address.strategyManagerImplementation"
);
deploymentDetails.ethDepositAddress = stdJson.readAddress(deployData, ".address.ethDepositAddress");

return deploymentDetails;
}
}
Loading

0 comments on commit 130a0ab

Please sign in to comment.