Skip to content

Commit

Permalink
Merge pull request #171 from yieldnest/deploy-holesky/danoctavian/sc-…
Browse files Browse the repository at this point in the history
…1162/implement-generalized-withdrawal-queue-manager

holesky withdrawals deployment
  • Loading branch information
danoctavian authored Sep 30, 2024
2 parents 04e507d + b6118a1 commit f6c2fed
Show file tree
Hide file tree
Showing 4 changed files with 732 additions and 5 deletions.
622 changes: 622 additions & 0 deletions broadcast/DeployYnETHWithdrawals.s.sol/17000/run-latest.json

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions deployments/ynETHWithdrawals-17000.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"DEPLOYER": "0xd7d4A7f14265B0A69AE482b85B0a8496c3F99fb9",
"implementation-stakingNodesManager": "0xC9cf6740282617f3B392f900De0449E687Ce05e3",
"implementation-withdrawalQueueManager": "0x28732d8061D35B77dC2997926e0449dAdc3Ef3DD",
"implementation-ynETH": "0x090D67d3C97712f6C17a037515CbB8502561EE57",
"implementation-ynETHRedemptionAssetsVault": "0x7eBE6EAC9AD9B5e4D637c8f05191b273b009461a",
"proxy-withdrawalQueueManager": "0x141aAb320857145fB42240C979b800f48CE5B678",
"proxy-ynETHRedemptionAssetsVault": "0x3a2DD2f0f5A20768110a52fC4f091AB9d8631b58",
"proxyAdmin-withdrawalQueueManager": "0x26425968beb4bD9c09b02C433996Cd05B1Fd4f07",
"proxyAdmin-ynETHRedemptionAssetsVault": "0xd4d8E80d1c959CdC4601Cc6A0cc1EC18aBeB1888",
"stakingNodeImplementation": "0xf07861349Ed0cB4603590B47D2269768Ed6E2821"
}
8 changes: 4 additions & 4 deletions script/DeployYnETHWithdrawals.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ contract DeployYnETHWithdrawals is BaseYnETHScript {
withdrawalQueueManager: ynETHWithdrawalQueueManager,
stakingNodesManagerImplementation: stakingNodesManagerImplementation,
stakingNodeImplementation: stakingNodeImplementation,
ynETHImplementation: ynETH(payable(address(yneth)))
ynETHImplementation: ynETHImplementation
});

saveDeployment(deployment);
Expand Down Expand Up @@ -198,10 +198,10 @@ contract DeployYnETHWithdrawals is BaseYnETHScript {

// contract addresses
serializeProxyElements(json, "withdrawalQueueManager", address(deployment.withdrawalQueueManager));
serializeProxyElements(json, "ynETRewardsRedemptionVault", address(deployment.ynETHRedemptionAssetsVault));
serializeProxyElements(json, "ynETHRedemptionAssetsVault", address(deployment.ynETHRedemptionAssetsVault));
vm.serializeAddress(json, "stakingNodeImplementation", address(deployment.stakingNodeImplementation));
vm.serializeAddress(json, "implementation-stakingNodesManager", address(deployment.stakingNodeImplementation));
vm.serializeAddress(json, "implementation-ynETH", address(deployment.stakingNodeImplementation));
vm.serializeAddress(json, "implementation-stakingNodesManager", address(deployment.stakingNodesManagerImplementation));
vm.serializeAddress(json, "implementation-ynETH", address(deployment.ynETHImplementation));


string memory finalJson = vm.serializeAddress(json, "DEPLOYER", deployer);
Expand Down
95 changes: 94 additions & 1 deletion test/integration/M3/Base.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,10 @@ contract Base is Test, Utils {
}

function upgradeYnToM3() internal {
// if (block.chainid != 17000) return;
if (block.chainid == 17000) {
upgradeYnToM3OnHolesky();
return;
}


uint256 totalAssets = yneth.totalAssets();
Expand Down Expand Up @@ -284,6 +287,96 @@ contract Base is Test, Utils {
runUpgradeIntegrityInvariants(preUpgradeState);
}

function upgradeYnToM3OnHolesky() internal {


uint256 totalAssets = yneth.totalAssets();
uint256 totalSupply = yneth.totalSupply();

// Capture the upgrade state before making any changes
UpgradeState memory preUpgradeState = captureUpgradeState();

preUpgradeState.stakingNodesManagerTotalDeposited = 0;
for (uint256 i = 0; i < preUpgradeState.stakingNodeBalances.length; i++) {
preUpgradeState.stakingNodesManagerTotalDeposited += preUpgradeState.stakingNodeBalances[i];
}

{
address stakinNodesManagerImplementation = 0xC9cf6740282617f3B392f900De0449E687Ce05e3;

vm.startPrank(actors.admin.PROXY_ADMIN_OWNER);
ProxyAdmin(
getTransparentUpgradeableProxyAdminAddress(address(stakingNodesManager))
).upgradeAndCall(
ITransparentUpgradeableProxy(address(stakingNodesManager)),
address(stakinNodesManagerImplementation),
""
);
vm.stopPrank();
}

runUpgradeIntegrityInvariants(preUpgradeState);

// upgrade ynETH
{
vm.startPrank(actors.admin.PROXY_ADMIN_OWNER);
ProxyAdmin(
getTransparentUpgradeableProxyAdminAddress(address(yneth))
).upgradeAndCall(
ITransparentUpgradeableProxy(address(yneth)),
address(0x090D67d3C97712f6C17a037515CbB8502561EE57),
""
);
vm.stopPrank();
}

runUpgradeIntegrityInvariants(preUpgradeState);

// upgrade StakingNodeImplementation
{
stakingNodeImplementation = new StakingNode();
vm.prank(actors.admin.STAKING_ADMIN);
stakingNodesManager.upgradeStakingNodeImplementation(0xf07861349Ed0cB4603590B47D2269768Ed6E2821);
}

{
runUpgradeIntegrityInvariants(preUpgradeState);
// Assert that the redemptionAssetsVault is initially set to the zero address in the StakingNodesManager
assertEq(address(stakingNodesManager.redemptionAssetsVault()), address(0), "redemptionAssetsVault should initially be set to the zero address in StakingNodesManager");
// Assert that previewRedeem returns a non-zero value
uint256 previewRedeemAmount = yneth.previewRedeem(1 ether);
assertGt(previewRedeemAmount, 0, "previewRedeem should return a non-zero value");
}

ynETHWithdrawalQueueManager = WithdrawalQueueManager(0x141aAb320857145fB42240C979b800f48CE5B678);
ynETHRedemptionAssetsVaultInstance = ynETHRedemptionAssetsVault(payable(0x3a2DD2f0f5A20768110a52fC4f091AB9d8631b58));

// ---------------------------------------------------------------
// STAGE 3 - Initialize StakingNodesManager with Init2 and add BURNER_ROLE for WithdrawalQueueManager
// ---------------------------------------------------------------
{
StakingNodesManager.Init2 memory initParams = StakingNodesManager.Init2({
redemptionAssetsVault: ynETHRedemptionAssetsVaultInstance,
withdrawalManager: actors.ops.WITHDRAWAL_MANAGER,
stakingNodesWithdrawer: actors.ops.STAKING_NODES_WITHDRAWER
});

vm.prank(actors.admin.ADMIN);
stakingNodesManager.initializeV2(initParams);
}

runUpgradeIntegrityInvariants(preUpgradeState);

// grant burner role
{
vm.startPrank(actors.admin.STAKING_ADMIN);
yneth.grantRole(yneth.BURNER_ROLE(), address(ynETHWithdrawalQueueManager));
vm.stopPrank();
}

runUpgradeIntegrityInvariants(preUpgradeState);
}

function createValidators(uint256[] memory nodeIds, uint256 count) public returns (uint40[] memory) {
uint40[] memory validatorIndices = new uint40[](count * nodeIds.length);
uint256 index = 0;
Expand Down

0 comments on commit f6c2fed

Please sign in to comment.