1
1
// SPDX-License-Identifier: MIT
2
2
pragma solidity ^ 0.8.21 ;
3
3
4
- import {EthMultiVault} from "src/EthMultiVault.sol " ;
5
4
import "forge-std/Test.sol " ;
6
5
7
- contract EthMultiVaultActor is Test {
6
+ import {EthMultiVault} from "src/EthMultiVault.sol " ;
7
+ import {EthMultiVaultHelpers} from "../../helpers/EthMultiVaultHelpers.sol " ;
8
+
9
+ contract EthMultiVaultActor is Test , EthMultiVaultHelpers {
8
10
// actor arrays
9
11
uint256 [] public actorPks;
10
12
address [] public actors;
@@ -36,14 +38,6 @@ contract EthMultiVaultActor is Test {
36
38
//actors.push(msg.sender);
37
39
}
38
40
39
- function getAtomCost () public view returns (uint256 atomCost ) {
40
- (atomCost,) = actEthMultiVault.atomConfig ();
41
- }
42
-
43
- function getMinDeposit () public view returns (uint256 minDeposit ) {
44
- (,,, minDeposit,,,,) = actEthMultiVault.generalConfig ();
45
- }
46
-
47
41
function getVaultTotalAssets (uint256 vaultId ) public view returns (uint256 totalAssets ) {
48
42
(totalAssets,) = actEthMultiVault.vaults (vaultId);
49
43
}
@@ -57,6 +51,12 @@ contract EthMultiVaultActor is Test {
57
51
return shares;
58
52
}
59
53
54
+ function getAssetsForReceiverBeforeFees (uint256 shares , uint256 vaultId ) public view returns (uint256 ) {
55
+ (, uint256 calculatedAssetsForReceiver , uint256 protocolFees , uint256 exitFees ) =
56
+ actEthMultiVault.getRedeemAssetsAndFees (shares, vaultId);
57
+ return calculatedAssetsForReceiver + protocolFees + exitFees;
58
+ }
59
+
60
60
function createAtom (bytes calldata _data , uint256 msgValue , uint256 actorIndexSeed )
61
61
public
62
62
useActor (actorIndexSeed)
@@ -87,8 +87,22 @@ contract EthMultiVaultActor is Test {
87
87
}
88
88
emit log_named_uint ("msg.sender.balance Right before create " , currentActor.balance);
89
89
emit log_named_address ("msg.sender----- " , currentActor);
90
+
91
+ uint256 totalAssetsBefore = vaultTotalAssets (ethMultiVault.count () + 1 );
92
+ uint256 totalSharesBefore = vaultTotalShares (ethMultiVault.count () + 1 );
93
+
94
+ uint256 protocolVaultBalanceBefore = address (getProtocolVault ()).balance;
95
+
90
96
// create atom
91
97
uint256 id = actEthMultiVault.createAtom {value: msgValue}(_data);
98
+ assertEq (id, actEthMultiVault.count ());
99
+
100
+ checkDepositOnAtomVaultCreation (id, msgValue, totalAssetsBefore, totalSharesBefore);
101
+
102
+ uint256 userDeposit = msgValue - getAtomCost ();
103
+
104
+ checkProtocolVaultBalanceOnVaultCreation (id, userDeposit, protocolVaultBalanceBefore);
105
+
92
106
// logs
93
107
emit log_named_uint (
94
108
"------------------------------------ POST STATE ------------------------------------------ " , 6000000009
@@ -130,7 +144,19 @@ contract EthMultiVaultActor is Test {
130
144
msgValue = bound (msgValue, getMinDeposit (), 10 ether);
131
145
vm.deal (currentActor, msgValue);
132
146
emit log_named_uint ("|||||||||||||||||||||||||||||||||||BRANCH 1||||||||||||||||||||||||||||||||||| " , 1 );
147
+
148
+ uint256 totalAssetsBefore = vaultTotalAssets (_vaultId);
149
+ uint256 totalSharesBefore = vaultTotalShares (_vaultId);
150
+
151
+ uint256 protocolVaultBalanceBefore = address (getProtocolVault ()).balance;
152
+
133
153
shares = actEthMultiVault.depositAtom {value: msgValue}(_receiver, _vaultId);
154
+
155
+ checkDepositIntoVault (
156
+ msgValue - getProtocolFeeAmount (msgValue, _vaultId), _vaultId, totalAssetsBefore, totalSharesBefore
157
+ );
158
+
159
+ checkProtocolVaultBalance (_vaultId, msgValue, protocolVaultBalanceBefore);
134
160
} else {
135
161
// deposit on existing vault
136
162
// bound _vaultId between 1 and count()
@@ -144,7 +170,19 @@ contract EthMultiVaultActor is Test {
144
170
msgValue = bound (msgValue, getAtomCost (), 10 ether);
145
171
vm.deal (currentActor, msgValue);
146
172
emit log_named_uint ("|||||||||||||||||||||||||||||||||||BRANCH 2||||||||||||||||||||||||||||||||||| " , 2 );
173
+
174
+ uint256 totalAssetsBefore = vaultTotalAssets (_vaultId);
175
+ uint256 totalSharesBefore = vaultTotalShares (_vaultId);
176
+
177
+ uint256 protocolVaultBalanceBefore = address (getProtocolVault ()).balance;
178
+
147
179
shares = actEthMultiVault.depositAtom {value: msgValue}(_receiver, _vaultId);
180
+
181
+ checkDepositIntoVault (
182
+ msgValue - getProtocolFeeAmount (msgValue, _vaultId), _vaultId, totalAssetsBefore, totalSharesBefore
183
+ );
184
+
185
+ checkProtocolVaultBalance (_vaultId, msgValue, protocolVaultBalanceBefore);
148
186
}
149
187
// deposit atom
150
188
emit log_named_uint ("balance currentActor " , currentActor.balance);
@@ -201,7 +239,7 @@ contract EthMultiVaultActor is Test {
201
239
emit log_named_uint ("vaultTAssets-- " , getVaultTotalShares (_vaultId));
202
240
emit log_named_uint ("vaultBalanceOf " , getVaultBalanceForAddress (_vaultId, currentActor));
203
241
msgValue = bound (msgValue, getAtomCost (), 10 ether);
204
- emit log_named_uint ("REEEEgetVaultTotalAssets (_vaultId) " , getVaultTotalAssets (_vaultId));
242
+ emit log_named_uint ("REEEE getVaultTotalAssets (_vaultId) " , getVaultTotalAssets (_vaultId));
205
243
emit log_named_uint ("REEEE getVaultTotalShares(_vaultId) " , getVaultTotalShares (_vaultId));
206
244
emit log_named_uint ("|||||||||||||||||||||||||||||||BRANCH 2|||||||||||||||||||||||||||||||||||| " , 2 );
207
245
_shares2Redeem = actEthMultiVault.depositAtom {value: msgValue}(currentActor, _vaultId);
@@ -220,8 +258,20 @@ contract EthMultiVaultActor is Test {
220
258
emit log_named_uint ("before vaultTAssets------ " , getVaultTotalShares (_vaultId));
221
259
emit log_named_uint ("before vaultBalanceOf---- " , getVaultBalanceForAddress (_vaultId, currentActor));
222
260
261
+ // snapshots before redeem
262
+ uint256 protocolVaultBalanceBefore = address (getProtocolVault ()).balance;
263
+ uint256 userSharesBeforeRedeem = getSharesInVault (_vaultId, _receiver);
264
+ uint256 userBalanceBeforeRedeem = address (_receiver).balance;
265
+
266
+ uint256 assetsForReceiverBeforeFees = getAssetsForReceiverBeforeFees (userSharesBeforeRedeem, _vaultId);
267
+
223
268
// redeem atom
224
- uint256 assets = actEthMultiVault.redeemAtom (_shares2Redeem, _receiver, _vaultId);
269
+ uint256 assetsForReceiver = actEthMultiVault.redeemAtom (_shares2Redeem, _receiver, _vaultId);
270
+
271
+ checkProtocolVaultBalance (_vaultId, assetsForReceiverBeforeFees, protocolVaultBalanceBefore);
272
+
273
+ assertEq (getSharesInVault (_vaultId, _receiver), userSharesBeforeRedeem - _shares2Redeem);
274
+ assertEq (address (_receiver).balance - userBalanceBeforeRedeem, assetsForReceiver);
225
275
226
276
// logs
227
277
emit log_named_uint (
@@ -231,9 +281,10 @@ contract EthMultiVaultActor is Test {
231
281
emit log_named_uint ("vaultTAssets------ " , getVaultTotalShares (_vaultId));
232
282
emit log_named_uint ("vaultBalanceOf---- " , getVaultBalanceForAddress (_vaultId, currentActor));
233
283
emit log_named_uint (
234
- "==================================== ACTOR redeemAtom END ==================================== " , assets
284
+ "==================================== ACTOR redeemAtom END ==================================== " ,
285
+ assetsForReceiver
235
286
);
236
- return assets ;
287
+ return assetsForReceiver ;
237
288
}
238
289
239
290
receive () external payable {}
0 commit comments