Skip to content

Commit

Permalink
update deployment scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
danoctavian committed Mar 24, 2024
1 parent e0f759f commit 7a9ed71
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 36 deletions.
7 changes: 6 additions & 1 deletion scripts/forge/BaseScript.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import "../../src/StakingNode.sol";
import "../../src/RewardsReceiver.sol";
import "../../src/ynLSD.sol";
import "../../src/YieldNestOracle.sol";
import "../../src/ynViewer.sol";
import "../../src/LSDStakingNode.sol";
import "../../src/RewardsDistributor.sol";
import "../../src/external/tokens/WETH.sol";
Expand All @@ -27,6 +28,7 @@ abstract contract BaseScript is Script, Utils {
RewardsReceiver consensusLayerReceiver;
RewardsDistributor rewardsDistributor;
StakingNode stakingNodeImplementation;
ynViewer ynViewer;
}

struct ynLSDDeployment {
Expand All @@ -49,6 +51,7 @@ abstract contract BaseScript is Script, Utils {
vm.serializeAddress(json, "consensusLayerReceiver", address(deployment.consensusLayerReceiver));
vm.serializeAddress(json, "rewardsDistributor", address(deployment.rewardsDistributor));
vm.serializeAddress(json, "stakingNodeImplementation", address(deployment.stakingNodeImplementation));
vm.serializeAddress(json, "ynViewer", address(deployment.ynViewer));

string memory finalJson = vm.serializeString(json, "object", "dummy");
vm.writeJson(finalJson, getDeploymentFile());
Expand All @@ -59,6 +62,7 @@ abstract contract BaseScript is Script, Utils {
string memory jsonContent = vm.readFile(deploymentFile);
Deployment memory deployment;
deployment.ynETH = ynETH(payable(jsonContent.readAddress(".ynETH")));
deployment.ynViewer = ynViewer(payable(jsonContent.readAddress(".ynViewer")));
deployment.stakingNodesManager = StakingNodesManager(payable(jsonContent.readAddress(".stakingNodesManager")));
deployment.executionLayerReceiver = RewardsReceiver(payable(jsonContent.readAddress(".executionLayerReceiver")));
deployment.consensusLayerReceiver = RewardsReceiver(payable(jsonContent.readAddress(".consensusLayerReceiver")));
Expand Down Expand Up @@ -103,7 +107,8 @@ abstract contract BaseScript is Script, Utils {
LSD_RESTAKING_MANAGER: vm.envAddress("LSD_RESTAKING_MANAGER_ADDRESS"),
STAKING_NODE_CREATOR: vm.envAddress("LSD_STAKING_NODE_CREATOR_ADDRESS"),
ORACLE_MANAGER: vm.envAddress("YIELDNEST_ORACLE_MANAGER_ADDRESS"),
DEPOSIT_BOOTSTRAPER: vm.envAddress("DEPOSIT_BOOTSTRAPER_ADDRESS")
DEPOSIT_BOOTSTRAPER: vm.envAddress("DEPOSIT_BOOTSTRAPER_ADDRESS"),
VALIDATOR_REMOVER_MANAGER: vm.envAddress("VALIDATOR_REMOVER_MANAGER_ADDRESS")
});
}

Expand Down
27 changes: 23 additions & 4 deletions scripts/forge/DeployYieldNest.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import "../../src/StakingNodesManager.sol";
import "../../src/RewardsReceiver.sol";
import "../../src/RewardsDistributor.sol";
import "../../src/ynETH.sol";
import "../../src/StakingNodeV2.sol";
import "../../src/interfaces/IStakingNode.sol";
import "../../src/external/ethereum/IDepositContract.sol";
import "../../src/interfaces/IRewardsDistributor.sol";
Expand Down Expand Up @@ -81,9 +82,22 @@ contract DeployYieldNest is BaseScript {
// Deploy implementations
yneth = new ynETH();
stakingNodesManager = new StakingNodesManager();
executionLayerReceiver = new RewardsReceiver();
consensusLayerReceiver = new RewardsReceiver(); // Instantiating consensusLayerReceiver
stakingNodeImplementation = new StakingNode();

{
RewardsReceiver rewardsReceiverImplementation = new RewardsReceiver();
TransparentUpgradeableProxy executionLayerReceiverProxy = new TransparentUpgradeableProxy(address(rewardsReceiverImplementation), actors.PROXY_ADMIN_OWNER, "");
executionLayerReceiver = RewardsReceiver(payable(executionLayerReceiverProxy));

TransparentUpgradeableProxy consensusLayerReceiverProxy = new TransparentUpgradeableProxy(address(rewardsReceiverImplementation), actors.PROXY_ADMIN_OWNER, "");
consensusLayerReceiver = RewardsReceiver(payable(consensusLayerReceiverProxy));
}

if (block.chainid == 17000) { // holeksy
stakingNodeImplementation = new StakingNode();
} else {
stakingNodeImplementation = new StakingNodeV2();
}

yieldNestOracle = new YieldNestOracle();
ynlsd = new ynLSD();

Expand Down Expand Up @@ -119,13 +133,13 @@ contract DeployYieldNest is BaseScript {
});
yneth.initialize(ynethInit);


// Initialize StakingNodesManager with example parameters
StakingNodesManager.Init memory stakingNodesManagerInit = StakingNodesManager.Init({
admin: actors.ADMIN,
stakingAdmin: actors.STAKING_ADMIN,
stakingNodesAdmin: actors.STAKING_NODES_ADMIN,
validatorManager: actors.VALIDATOR_MANAGER,
validatorRemoverManager: actors.VALIDATOR_REMOVER_MANAGER,
stakingNodeCreatorRole: actors.STAKING_NODE_CREATOR,
maxNodeCount: 10,
depositContract: depositContract,
Expand Down Expand Up @@ -157,6 +171,8 @@ contract DeployYieldNest is BaseScript {
executionLayerReceiver.initialize(rewardsReceiverInit);
consensusLayerReceiver.initialize(rewardsReceiverInit); // Initializing consensusLayerReceiver

ynViewer ynviewer = new ynViewer(IynETH(address(yneth)), IStakingNodesManager(address(stakingNodesManager)));

vm.stopBroadcast();

Deployment memory deployment = Deployment({
Expand All @@ -165,8 +181,11 @@ contract DeployYieldNest is BaseScript {
executionLayerReceiver: executionLayerReceiver,
consensusLayerReceiver: consensusLayerReceiver, // Adding consensusLayerReceiver to the deployment
rewardsDistributor: rewardsDistributor,
ynViewer: ynviewer,
stakingNodeImplementation: stakingNodeImplementation
});



saveDeployment(deployment);
}
Expand Down
76 changes: 45 additions & 31 deletions scripts/forge/DeployYnLSD.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -61,17 +61,54 @@ contract DeployYnLSD is BaseScript {
}

IERC20[] memory assets = new IERC20[](2);
assets[0] = IERC20(chainAddresses.lsd.RETH_ADDRESS);
assets[1] = IERC20(chainAddresses.lsd.STETH_ADDRESS);
assets[0] = IERC20(chainAddresses.lsd.STETH_ADDRESS);
assets[1] = IERC20(chainAddresses.lsd.RETH_ADDRESS);


IStrategy[] memory strategies = new IStrategy[](2);
strategies[0] = IStrategy(chainAddresses.lsd.RETH_STRATEGY_ADDRESS);
strategies[1] = IStrategy(chainAddresses.lsd.STETH_STRATEGY_ADDRESS);
strategies[0] = IStrategy(chainAddresses.lsd.STETH_STRATEGY_ADDRESS);
strategies[1] = IStrategy(chainAddresses.lsd.RETH_STRATEGY_ADDRESS);

{
uint256[] memory maxAgesArray = new uint256[](assets.length);
address[] memory priceFeedAddresses = new address[](assets.length);
for (uint256 i = 0; i < assets.length; i++) {
maxAgesArray[i] = type(uint256).max;
if (assets[i] == IERC20(chainAddresses.lsd.RETH_ADDRESS)) {
priceFeedAddresses[i] = chainAddresses.lsd.RETH_FEED_ADDRESS;
} else if (assets[i] == IERC20(chainAddresses.lsd.STETH_ADDRESS)) {
priceFeedAddresses[i] = chainAddresses.lsd.STETH_FEED_ADDRESS;
}
}
{
address[] memory assetsAddresses = new address[](assets.length);
for (uint256 i = 0; i < assets.length; i++) {
assetsAddresses[i] = address(assets[i]);
}
YieldNestOracle.Init memory yieldNestOracleInit = YieldNestOracle.Init({
assets: assetsAddresses,
priceFeedAddresses: priceFeedAddresses,
maxAges: maxAgesArray,
admin: actors.ORACLE_MANAGER,
oracleManager: actors.ORACLE_MANAGER
});
yieldNestOracle.initialize(yieldNestOracleInit);
}


}

// Initialize ynLSD with example parameters
{
address[] memory lsdPauseWhitelist = new address[](1);
lsdPauseWhitelist[0] = _broadcaster;

IERC20 stETH = IERC20(chainAddresses.lsd.STETH_ADDRESS);
uint256 mintAmount = 1.0001 ether;
(bool success, ) = address(stETH).call{value: mintAmount}("");
require(success, "ETH to stETH mint failed");
stETH.approve(address(ynlsd), mintAmount);

ynLSD.Init memory ynlsdInit = ynLSD.Init({
assets: assets,
strategies: strategies,
Expand All @@ -84,37 +121,12 @@ contract DeployYnLSD is BaseScript {
stakingAdmin: actors.STAKING_ADMIN,
lsdRestakingManager: actors.LSD_RESTAKING_MANAGER, // Assuming no restaking manager is set initially
lsdStakingNodeCreatorRole: actors.STAKING_NODE_CREATOR, // Assuming no staking node creator role is set initially
pauseWhitelist: lsdPauseWhitelist
pauseWhitelist: lsdPauseWhitelist,
depositBootstrapper: actors.DEPOSIT_BOOTSTRAPER
});
ynlsd.initialize(ynlsdInit);
}

uint256[] memory maxAgesArray = new uint256[](assets.length);
address[] memory priceFeedAddresses = new address[](assets.length);
for (uint256 i = 0; i < assets.length; i++) {
maxAgesArray[i] = type(uint256).max;
if (assets[i] == IERC20(chainAddresses.lsd.RETH_ADDRESS)) {
priceFeedAddresses[i] = chainAddresses.lsd.RETH_FEED_ADDRESS;
} else if (assets[i] == IERC20(chainAddresses.lsd.STETH_ADDRESS)) {
priceFeedAddresses[i] = chainAddresses.lsd.STETH_FEED_ADDRESS;
}
}

{
address[] memory assetsAddresses = new address[](assets.length);
for (uint256 i = 0; i < assets.length; i++) {
assetsAddresses[i] = address(assets[i]);
}
YieldNestOracle.Init memory yieldNestOracleInit = YieldNestOracle.Init({
assets: assetsAddresses,
priceFeedAddresses: priceFeedAddresses,
maxAges: maxAgesArray,
admin: actors.ORACLE_MANAGER,
oracleManager: actors.ORACLE_MANAGER
});
yieldNestOracle.initialize(yieldNestOracleInit);
}

{
LSDStakingNode lsdStakingNodeImplementation = new LSDStakingNode();
ynlsd.registerLSDStakingNodeImplementationContract(address(lsdStakingNodeImplementation));
Expand All @@ -127,5 +139,7 @@ contract DeployYnLSD is BaseScript {

saveynLSDDeployment(deployment);
}

vm.stopBroadcast();
}
}

0 comments on commit 7a9ed71

Please sign in to comment.