2
2
pragma solidity ^ 0.8.24 ;
3
3
4
4
import {IStrategy} from "lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol " ;
5
+ import {IDelegationManagerTypes} from "lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol " ;
6
+ import {ISignatureUtils} from "lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol " ;
5
7
import {IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol " ;
6
- import {
7
- TransparentUpgradeableProxy,
8
- ITransparentUpgradeableProxy
9
- } from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol " ;
8
+ import {TransparentUpgradeableProxy,ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol " ;
10
9
import {UpgradeableBeacon} from "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol " ;
11
10
12
11
import {ITokenStakingNodesManager} from "src/interfaces/ITokenStakingNodesManager.sol " ;
@@ -20,45 +19,55 @@ import {WithdrawalQueueManager} from "src/WithdrawalQueueManager.sol";
20
19
import {IWithdrawalQueueManager} from "src/interfaces/IWithdrawalQueueManager.sol " ;
21
20
import {IwstETH} from "src/external/lido/IwstETH.sol " ;
22
21
import {IDelegationManagerExtended} from "src/external/eigenlayer/IDelegationManagerExtended.sol " ;
23
- import {IDelegationManagerTypes} from "lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol " ;
24
22
25
23
import "./ynLSDeScenarioBaseTest.sol " ;
26
24
27
25
contract YnEigenDelegationScenarioTest is ynLSDeScenarioBaseTest {
26
+ ITokenStakingNode internal tokenStakingNode;
27
+
28
+ function setUp () public override {
29
+ super .setUp ();
28
30
29
- function test_undelegate_Scenario_undelegateByOperator1 () public {
30
31
updateTokenStakingNodesBalancesForAllAssets ();
31
32
33
+ vm.prank (actors.ops.TOKEN_STAKING_NODE_OPERATOR);
34
+ delegationManager.registerAsOperator (address (0 ), 0 , "ipfs://some-ipfs-hash " );
35
+
36
+ tokenStakingNode = tokenStakingNodesManager.nodes (0 );
37
+
38
+ vm.prank (actors.admin.TOKEN_STAKING_NODES_DELEGATOR);
39
+ tokenStakingNode.delegate (actors.ops.TOKEN_STAKING_NODE_OPERATOR, ISignatureUtils.SignatureWithExpiry ({signature: "" , expiry: 0 }), bytes32 (0 ));
40
+ }
41
+
42
+ function test_undelegate_Scenario_undelegateByOperator1 () public {
32
43
// Log total assets before undelegation
33
44
uint256 totalAssetsBefore = yneigen.totalAssets ();
34
45
35
- ITokenStakingNode stakingNode = tokenStakingNodesManager.nodes (0 );
36
-
37
46
// Get operator for node 0
38
- address operator = delegationManager.delegatedTo (address (stakingNode ));
47
+ address operator = delegationManager.delegatedTo (address (tokenStakingNode ));
39
48
40
49
uint32 blockNumberBefore = uint32 (block .number );
41
- uint256 nonceBefore = delegationManager.cumulativeWithdrawalsQueued (address (stakingNode ));
50
+ uint256 nonceBefore = delegationManager.cumulativeWithdrawalsQueued (address (tokenStakingNode ));
42
51
43
52
// Get strategies and shares before undelegating
44
- (IStrategy[] memory strategies ,) = delegationManager.getDepositedShares (address (stakingNode ));
45
- (uint256 [] memory shares ,) = delegationManager.getWithdrawableShares (address (stakingNode ), strategies);
53
+ (IStrategy[] memory strategies ,) = delegationManager.getDepositedShares (address (tokenStakingNode ));
54
+ (uint256 [] memory shares ,) = delegationManager.getWithdrawableShares (address (tokenStakingNode ), strategies);
46
55
47
56
uint256 [] memory queuedSharesBefore = new uint256 [](strategies.length );
48
57
for (uint256 i = 0 ; i < strategies.length ; i++ ) {
49
- queuedSharesBefore[i] = stakingNode .queuedShares (strategies[i]);
58
+ queuedSharesBefore[i] = tokenStakingNode .queuedShares (strategies[i]);
50
59
}
51
60
52
61
// Call undelegate from operator
53
62
vm.startPrank (operator);
54
- bytes32 [] memory withdrawalRoots = delegationManager.undelegate (address (stakingNode ));
63
+ bytes32 [] memory withdrawalRoots = delegationManager.undelegate (address (tokenStakingNode ));
55
64
vm.stopPrank ();
56
65
57
- uint256 nonceAfter = delegationManager.cumulativeWithdrawalsQueued (address (stakingNode ));
66
+ uint256 nonceAfter = delegationManager.cumulativeWithdrawalsQueued (address (tokenStakingNode ));
58
67
59
68
// Assert node is no longer delegated after undelegation
60
69
assertEq (
61
- delegationManager.delegatedTo (address (stakingNode )),
70
+ delegationManager.delegatedTo (address (tokenStakingNode )),
62
71
address (0 ),
63
72
"Node should not be delegated after undelegation "
64
73
);
@@ -67,15 +76,15 @@ contract YnEigenDelegationScenarioTest is ynLSDeScenarioBaseTest {
67
76
assertEq (totalAssetsBefore, yneigen.totalAssets (), "Total assets should not change after undelegation " );
68
77
69
78
// Assert node is not synchronized after undelegation
70
- assertFalse (stakingNode .isSynchronized (), "Node should not be synchronized after undelegation " );
79
+ assertFalse (tokenStakingNode .isSynchronized (), "Node should not be synchronized after undelegation " );
71
80
72
81
//Call synchronize after verifying not synchronized
73
- vm.prank (actors.admin.STAKING_NODES_DELEGATOR );
74
- stakingNode .synchronize (shares, blockNumberBefore, strategies);
82
+ vm.prank (actors.admin.TOKEN_STAKING_NODES_DELEGATOR );
83
+ tokenStakingNode .synchronize (shares, blockNumberBefore, strategies);
75
84
76
85
for (uint256 i = 0 ; i < strategies.length ; i++ ) {
77
86
assertEq (
78
- stakingNode .queuedShares (strategies[i]) - queuedSharesBefore[i],
87
+ tokenStakingNode .queuedShares (strategies[i]) - queuedSharesBefore[i],
79
88
shares[i],
80
89
"Queued shares should be equal to shares "
81
90
);
@@ -93,7 +102,7 @@ contract YnEigenDelegationScenarioTest is ynLSDeScenarioBaseTest {
93
102
singleStrategy[0 ] = strategies[i];
94
103
uint256 [] memory singleShare = new uint256 [](1 );
95
104
singleShare[0 ] = shares[i];
96
- address _Staker = address (stakingNode );
105
+ address _Staker = address (tokenStakingNode );
97
106
withdrawals[i] = IDelegationManagerTypes.Withdrawal ({
98
107
staker: _Staker,
99
108
delegatedTo: operator,
@@ -108,12 +117,12 @@ contract YnEigenDelegationScenarioTest is ynLSDeScenarioBaseTest {
108
117
// advance time to allow completion
109
118
vm.roll (block .number + delegationManager.minWithdrawalDelayBlocks () + 1 );
110
119
111
- vm.prank (actors.admin.STAKING_NODES_DELEGATOR );
112
- stakingNode .completeQueuedWithdrawalsAsShares (withdrawals, middlewareTimesIndexes);
120
+ vm.prank (actors.admin.TOKEN_STAKING_NODES_DELEGATOR );
121
+ tokenStakingNode .completeQueuedWithdrawalsAsShares (withdrawals, middlewareTimesIndexes);
113
122
114
123
for (uint256 i = 0 ; i < strategies.length ; i++ ) {
115
124
assertEq (
116
- stakingNode .queuedShares (strategies[i]),
125
+ tokenStakingNode .queuedShares (strategies[i]),
117
126
queuedSharesBefore[i],
118
127
"Queued shares should be reinvested after completion of withdrawals "
119
128
);
@@ -124,15 +133,14 @@ contract YnEigenDelegationScenarioTest is ynLSDeScenarioBaseTest {
124
133
}
125
134
126
135
function test_undelegate_Scenario_undelegateByDelegator () public {
127
- updateTokenStakingNodesBalancesForAllAssets ();
128
136
uint256 totalAssetsBefore = yneigen.totalAssets ();
129
137
130
138
ITokenStakingNode tokenStakingNode = tokenStakingNodesManager.nodes (0 );
131
139
132
140
uint256 undelegateBlockNumber = uint32 (block .number );
133
141
134
142
// Call undelegate from delegator
135
- vm.startPrank (actors.admin.STAKING_NODES_DELEGATOR );
143
+ vm.startPrank (actors.admin.TOKEN_STAKING_NODES_DELEGATOR );
136
144
tokenStakingNode.undelegate ();
137
145
vm.stopPrank ();
138
146
@@ -149,7 +157,7 @@ contract YnEigenDelegationScenarioTest is ynLSDeScenarioBaseTest {
149
157
150
158
// Call synchronize after verifying synchronized
151
159
vm.expectRevert (TokenStakingNode.AlreadySynchronized.selector );
152
- vm.prank (actors.admin.STAKING_NODES_DELEGATOR );
160
+ vm.prank (actors.admin.TOKEN_STAKING_NODES_DELEGATOR );
153
161
tokenStakingNode.synchronize (new uint256 [](0 ), uint32 (block .number ), new IStrategy [](0 ));
154
162
}
155
163
0 commit comments