2025-04-11 23:54:20 +00:00
|
|
|
// SPDX-License-Identifier: UNLICENSED
|
|
|
|
|
pragma solidity ^0.8.27;
|
|
|
|
|
|
|
|
|
|
// Testing imports
|
|
|
|
|
import {Script} from "forge-std/Script.sol";
|
|
|
|
|
|
|
|
|
|
// EigenLayer imports
|
|
|
|
|
import {RewardsCoordinator} from "eigenlayer-contracts/src/contracts/core/RewardsCoordinator.sol";
|
2025-10-20 08:20:59 +00:00
|
|
|
import {
|
|
|
|
|
PermissionController
|
|
|
|
|
} from "eigenlayer-contracts/src/contracts/permissions/PermissionController.sol";
|
2025-04-11 23:54:20 +00:00
|
|
|
import {AllocationManager} from "eigenlayer-contracts/src/contracts/core/AllocationManager.sol";
|
|
|
|
|
import {DelegationManager} from "eigenlayer-contracts/src/contracts/core/DelegationManager.sol";
|
|
|
|
|
import {StrategyManager} from "eigenlayer-contracts/src/contracts/core/StrategyManager.sol";
|
|
|
|
|
import {AVSDirectory} from "eigenlayer-contracts/src/contracts/core/AVSDirectory.sol";
|
|
|
|
|
import {EigenPodManager} from "eigenlayer-contracts/src/contracts/pods/EigenPodManager.sol";
|
|
|
|
|
import {UpgradeableBeacon} from "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol";
|
|
|
|
|
import {EigenPod} from "eigenlayer-contracts/src/contracts/pods/EigenPod.sol";
|
2025-10-20 08:20:59 +00:00
|
|
|
import {
|
|
|
|
|
StrategyBaseTVLLimits
|
|
|
|
|
} from "eigenlayer-contracts/src/contracts/strategies/StrategyBaseTVLLimits.sol";
|
2025-04-11 23:54:20 +00:00
|
|
|
import {IETHPOSDeposit} from "eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol";
|
|
|
|
|
|
2025-04-22 19:49:51 +00:00
|
|
|
// Struct used in the deployment JSON file to store detailed strategy information
|
|
|
|
|
struct DeployedStrategyJson {
|
|
|
|
|
address strategyAddress;
|
|
|
|
|
address strategyUnderlyingToken;
|
|
|
|
|
address strategyTokenCreator;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Struct used here to store strategy information
|
|
|
|
|
struct DeployedStrategyInfo {
|
|
|
|
|
StrategyBaseTVLLimits strategy;
|
|
|
|
|
address strategyTokenCreator;
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-11 23:54:20 +00:00
|
|
|
/**
|
|
|
|
|
* @title ELScriptStorage
|
|
|
|
|
* @notice This contract is a utility for scripts that need to interact with EigenLayer contracts.
|
|
|
|
|
*/
|
|
|
|
|
contract ELScriptStorage is Script {
|
|
|
|
|
// EigenLayer Contract declarations
|
|
|
|
|
RewardsCoordinator public rewardsCoordinator;
|
|
|
|
|
PermissionController public permissionController;
|
|
|
|
|
AllocationManager public allocationManager;
|
|
|
|
|
DelegationManager public delegation;
|
|
|
|
|
StrategyManager public strategyManager;
|
|
|
|
|
EigenPodManager public eigenPodManager;
|
|
|
|
|
EigenPod public eigenPodBeacon;
|
|
|
|
|
StrategyBaseTVLLimits public baseStrategy;
|
2025-04-22 19:49:51 +00:00
|
|
|
DeployedStrategyInfo[] public deployedStrategies;
|
2025-04-11 23:54:20 +00:00
|
|
|
IETHPOSDeposit public ethPOSDeposit;
|
|
|
|
|
|
|
|
|
|
// EigenLayer required semver
|
|
|
|
|
string public constant SEMVER = "v1.0.0";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @notice Loads the EigenLayer contracts from the deployment file.
|
|
|
|
|
*/
|
|
|
|
|
function _loadELContracts(
|
|
|
|
|
string memory network
|
|
|
|
|
) internal {
|
|
|
|
|
// Load the deployment file
|
|
|
|
|
string memory deploymentFile =
|
|
|
|
|
vm.readFile(string.concat("./deployments/", network, ".json"));
|
|
|
|
|
|
|
|
|
|
// Store the contract addresses
|
|
|
|
|
rewardsCoordinator =
|
|
|
|
|
RewardsCoordinator(vm.parseJsonAddress(deploymentFile, ".RewardsCoordinator"));
|
|
|
|
|
permissionController =
|
|
|
|
|
PermissionController(vm.parseJsonAddress(deploymentFile, ".PermissionController"));
|
|
|
|
|
allocationManager =
|
|
|
|
|
AllocationManager(vm.parseJsonAddress(deploymentFile, ".AllocationManager"));
|
|
|
|
|
delegation = DelegationManager(vm.parseJsonAddress(deploymentFile, ".DelegationManager"));
|
|
|
|
|
strategyManager = StrategyManager(vm.parseJsonAddress(deploymentFile, ".StrategyManager"));
|
|
|
|
|
eigenPodManager = EigenPodManager(vm.parseJsonAddress(deploymentFile, ".EigenPodManager"));
|
|
|
|
|
eigenPodBeacon = EigenPod(payable(vm.parseJsonAddress(deploymentFile, ".EigenPodBeacon")));
|
|
|
|
|
baseStrategy = StrategyBaseTVLLimits(
|
|
|
|
|
vm.parseJsonAddress(deploymentFile, ".BaseStrategyImplementation")
|
|
|
|
|
);
|
|
|
|
|
ethPOSDeposit = IETHPOSDeposit(vm.parseJsonAddress(deploymentFile, ".ETHPOSDeposit"));
|
2025-04-22 19:49:51 +00:00
|
|
|
bytes memory deployedStrategiesArrayData =
|
|
|
|
|
vm.parseJson(deploymentFile, ".DeployedStrategies");
|
|
|
|
|
DeployedStrategyJson[] memory strategies =
|
|
|
|
|
abi.decode(deployedStrategiesArrayData, (DeployedStrategyJson[]));
|
|
|
|
|
for (uint256 i = 0; i < strategies.length; i++) {
|
|
|
|
|
address strategyAddress = strategies[i].strategyAddress;
|
|
|
|
|
address strategyTokenCreator = strategies[i].strategyTokenCreator;
|
|
|
|
|
DeployedStrategyInfo memory strategyInfo;
|
|
|
|
|
strategyInfo.strategy = StrategyBaseTVLLimits(strategyAddress);
|
|
|
|
|
strategyInfo.strategyTokenCreator = strategyTokenCreator;
|
|
|
|
|
deployedStrategies.push(strategyInfo);
|
2025-04-11 23:54:20 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|