Skip to content

Commit 0b92a5e

Browse files
fix tests
1 parent d2941db commit 0b92a5e

9 files changed

+399
-369
lines changed

.gas-snapshot

Lines changed: 185 additions & 185 deletions
Large diffs are not rendered by default.

src/abstract/ReceiptVault.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -648,7 +648,7 @@ abstract contract ReceiptVault is
648648

649649
/// @inheritdoc IReceiptVaultV1
650650
function previewRedeem(uint256 shares, uint256 id) external view virtual returns (uint256) {
651-
return _calculateRedeem(shares, id);
651+
return _calculateRedeem(shares, _shareRatio(msg.sender, msg.sender, id, ShareAction.Burn));
652652
}
653653

654654
/// @inheritdoc IReceiptVaultV1

test/src/concrete/vault/ERC20PriceOracleReceiptVault.ERC20Standard.t.sol

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,6 @@ contract ERC20PriceOracleReceiptVaultERC20StandardTest is ERC20PriceOracleReceip
5252

5353
ERC20PriceOracleReceiptVault vault = createVault(iVaultOracle, assetName, assetName);
5454
{
55-
// Ensure Alice has enough balance and allowance
56-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, alice), abi.encode(assets));
57-
5855
assets = bound(assets, 1, type(uint128).max);
5956
vm.assume(assets.fixedPointMul(oraclePrice, Math.Rounding.Down) > 0);
6057

@@ -63,6 +60,7 @@ contract ERC20PriceOracleReceiptVaultERC20StandardTest is ERC20PriceOracleReceip
6360
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets),
6461
abi.encode(true)
6562
);
63+
vm.expectCall(address(iAsset), abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets));
6664
}
6765

6866
uint256 expectedShares = assets.fixedPointMul(oraclePrice, Math.Rounding.Down);
@@ -89,13 +87,12 @@ contract ERC20PriceOracleReceiptVaultERC20StandardTest is ERC20PriceOracleReceip
8987
vm.startPrank(alice);
9088
ERC20PriceOracleReceiptVault vault = createVault(iVaultOracle, "Test Token", "TST");
9189

92-
// Mock balance and allowance for deposit
93-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, alice), abi.encode(amount));
9490
vm.mockCall(
9591
address(iAsset),
9692
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, amount),
9793
abi.encode(true)
9894
);
95+
vm.expectCall(address(iAsset), abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, amount));
9996
uint256 bobInitialBalance = vault.balanceOf(bob);
10097

10198
uint256 expectedShares = amount.fixedPointMul(oraclePrice, Math.Rounding.Down);
@@ -146,12 +143,12 @@ contract ERC20PriceOracleReceiptVaultERC20StandardTest is ERC20PriceOracleReceip
146143
ERC20PriceOracleReceiptVault vault = createVault(iVaultOracle, "Test Token", "TST");
147144

148145
vm.startPrank(alice);
149-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, alice), abi.encode(amount));
150146
vm.mockCall(
151147
address(iAsset),
152148
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, amount),
153149
abi.encode(true)
154150
);
151+
vm.expectCall(address(iAsset), abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, amount));
155152

156153
uint256 expectedShares = amount.fixedPointMul(oraclePrice, Math.Rounding.Down);
157154
vm.assume(transferFromAmount < expectedShares);

test/src/concrete/vault/ERC20PriceOracleReceiptVault.redeem.t.sol

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ contract ERC20PriceOracleReceiptVaultRedeemTest is ERC20PriceOracleReceiptVaultT
3838
emit IReceiptVaultV1.Withdraw(owner, receiver, owner, assets, shares, id, data);
3939

4040
// Call redeem function
41-
vault.redeem(shares, receiver, owner, id, data);
41+
uint256 actualAssets = vault.redeem(shares, receiver, owner, id, data);
42+
assertEqUint(assets, actualAssets);
4243

4344
uint256 balanceAfterOwner = receipt.balanceOf(owner, id);
4445
assertEq(balanceAfterOwner, initialBalanceOwner - shares);
@@ -69,7 +70,8 @@ contract ERC20PriceOracleReceiptVaultRedeemTest is ERC20PriceOracleReceiptVaultT
6970
vm.expectRevert();
7071
}
7172
// Call redeem function
72-
vault.redeem(shares, receiver, owner, id, data);
73+
uint256 actualAssets = vault.redeem(shares, receiver, owner, id, data);
74+
assertEqUint(0, actualAssets);
7375

7476
if (owner != address(0)) {
7577
balanceAfterOwner = receipt.balanceOf(owner, id);
@@ -96,19 +98,19 @@ contract ERC20PriceOracleReceiptVaultRedeemTest is ERC20PriceOracleReceiptVaultT
9698
ERC20PriceOracleReceiptVault vault = createVault(iVaultOracle, assetName, assetName);
9799
ReceiptContract receipt = getReceipt();
98100

99-
// Ensure Alice has enough balance and allowance
100-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, alice), abi.encode(assets));
101-
102101
assets = bound(assets, 1, type(uint128).max);
103-
vm.assume(assets.fixedPointMul(oraclePrice, Math.Rounding.Down) > 0);
102+
uint256 expectedAssets = assets.fixedPointMul(oraclePrice, Math.Rounding.Down);
103+
vm.assume(expectedAssets > 0);
104104

105105
vm.mockCall(
106106
address(iAsset),
107107
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets),
108108
abi.encode(true)
109109
);
110+
vm.expectCall(address(iAsset), abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets));
110111

111-
vault.deposit(assets, alice, oraclePrice, bytes(""));
112+
uint256 depositShares = vault.deposit(assets, alice, oraclePrice, bytes(""));
113+
assertEqUint(depositShares, expectedAssets);
112114

113115
// Bound shares with max avalilable receipt balance
114116
shares = bound(shares, 1, receipt.balanceOf(alice, oraclePrice));
@@ -134,19 +136,19 @@ contract ERC20PriceOracleReceiptVaultRedeemTest is ERC20PriceOracleReceiptVaultT
134136
ERC20PriceOracleReceiptVault vault = createVault(iVaultOracle, assetName, assetName);
135137
ReceiptContract receipt = getReceipt();
136138

137-
// Ensure Alice has enough balance and allowance
138-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, alice), abi.encode(assets));
139-
140139
assets = bound(assets, 1, type(uint128).max);
141-
vm.assume(assets.fixedPointMul(oraclePrice, Math.Rounding.Down) > 0);
140+
uint256 expectedShares = assets.fixedPointMul(oraclePrice, Math.Rounding.Down);
141+
vm.assume(expectedShares > 0);
142142

143143
vm.mockCall(
144144
address(iAsset),
145145
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets),
146146
abi.encode(true)
147147
);
148+
vm.expectCall(address(iAsset), abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets));
148149

149-
vault.deposit(assets, alice, oraclePrice, bytes(""));
150+
uint256 depositShares = vault.deposit(assets, alice, oraclePrice, bytes(""));
151+
assertEqUint(depositShares, expectedShares);
150152

151153
checkNoBalanceChange(
152154
vault, alice, alice, oraclePrice, 0, receipt, bytes(""), abi.encodeWithSelector(ZeroAssetsAmount.selector)
@@ -167,22 +169,20 @@ contract ERC20PriceOracleReceiptVaultRedeemTest is ERC20PriceOracleReceiptVaultT
167169
setVaultOraclePrice(oraclePrice);
168170

169171
vm.startPrank(alice);
170-
// Start recording logs
172+
171173
vm.recordLogs();
172174
ERC20PriceOracleReceiptVault vault = createVault(iVaultOracle, assetName, assetName);
173175
ReceiptContract receipt = getReceipt();
174176

175177
assets = bound(assets, 1, type(uint128).max);
176178
vm.assume(assets.fixedPointMul(oraclePrice, Math.Rounding.Down) > 0);
177179

178-
// Ensure Alice has enough balance and allowance
179-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, alice), abi.encode(assets));
180-
181180
vm.mockCall(
182181
address(iAsset),
183182
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets),
184183
abi.encode(true)
185184
);
185+
vm.expectCall(address(iAsset), abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets));
186186

187187
vault.deposit(assets, alice, oraclePrice, bytes(""));
188188

@@ -220,9 +220,6 @@ contract ERC20PriceOracleReceiptVaultRedeemTest is ERC20PriceOracleReceiptVaultT
220220
ERC20PriceOracleReceiptVault vault = createVault(iVaultOracle, assetName, assetName);
221221
ReceiptContract receipt = getReceipt();
222222

223-
// Ensure Alice has enough balance and allowance
224-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, alice), abi.encode(assets));
225-
226223
assets = bound(assets, 1, type(uint128).max);
227224
vm.assume(assets.fixedPointMul(oraclePrice, Math.Rounding.Down) > 0);
228225

@@ -292,9 +289,6 @@ contract ERC20PriceOracleReceiptVaultRedeemTest is ERC20PriceOracleReceiptVaultT
292289
ERC20PriceOracleReceiptVault vault = createVault(iVaultOracle, assetName, assetName);
293290
ReceiptContract receipt = getReceipt();
294291

295-
// Ensure Alice has enough balance and allowance
296-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, alice), abi.encode(assets));
297-
298292
assets = bound(assets, 1, type(uint128).max);
299293
vm.assume(assets.fixedPointMul(oraclePrice, Math.Rounding.Down) > 0);
300294

@@ -356,7 +350,6 @@ contract ERC20PriceOracleReceiptVaultRedeemTest is ERC20PriceOracleReceiptVaultT
356350
ReceiptContract receipt = getReceipt();
357351

358352
vm.startPrank(alice);
359-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, alice), abi.encode(amount));
360353
vm.mockCall(
361354
address(iAsset),
362355
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, amount),

test/src/concrete/vault/ERC20PriceOracleReceiptVault.withdraw.t.sol

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,12 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
9494
assets = bound(assets, 2, type(uint128).max);
9595
vm.assume(assets.fixedPointMul(oraclePrice, Math.Rounding.Down) > 0);
9696

97-
// Ensure Alice has enough balance and allowance
98-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, alice), abi.encode(assets));
99-
10097
vm.mockCall(
10198
address(iAsset),
10299
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets),
103100
abi.encode(true)
104101
);
102+
vm.expectCall(address(iAsset), abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets));
105103

106104
vault.deposit(assets, alice, oraclePrice, bytes(""));
107105
uint256 withdrawAssets =
@@ -127,9 +125,6 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
127125
ERC20PriceOracleReceiptVault vault = createVault(iVaultOracle, assetName, assetName);
128126
ReceiptContract receipt = getReceipt();
129127

130-
// Ensure Alice has enough balance and allowance
131-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, alice), abi.encode(assets));
132-
133128
assets = bound(assets, 1, type(uint128).max);
134129
vm.assume(assets.fixedPointMul(oraclePrice, Math.Rounding.Down) > 0);
135130

@@ -138,6 +133,7 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
138133
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets),
139134
abi.encode(true)
140135
);
136+
vm.expectCall(address(iAsset), abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets));
141137

142138
vault.deposit(assets, alice, oraclePrice, bytes(""));
143139

@@ -167,14 +163,12 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
167163
assets = bound(assets, 1, type(uint128).max);
168164
vm.assume(assets.fixedPointMul(oraclePrice, Math.Rounding.Down) > 0);
169165

170-
// Ensure Alice has enough balance and allowance
171-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, alice), abi.encode(assets));
172-
173166
vm.mockCall(
174167
address(iAsset),
175168
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets),
176169
abi.encode(true)
177170
);
171+
vm.expectCall(address(iAsset), abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets));
178172

179173
vault.deposit(assets, alice, oraclePrice, bytes(""));
180174
uint256 availableReceiptBalance = receipt.balanceOf(alice, oraclePrice);
@@ -209,9 +203,6 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
209203
ERC20PriceOracleReceiptVault vault = createVault(iVaultOracle, assetName, assetName);
210204
ReceiptContract receipt = getReceipt();
211205

212-
// Ensure Alice has enough balance and allowance
213-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, alice), abi.encode(assets));
214-
215206
assets = bound(assets, 1, type(uint128).max);
216207
vm.assume(assets.fixedPointMul(oraclePrice, Math.Rounding.Down) > 0);
217208

@@ -220,6 +211,7 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
220211
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets),
221212
abi.encode(true)
222213
);
214+
vm.expectCall(address(iAsset), abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets));
223215

224216
vault.deposit(assets, alice, oraclePrice, bytes(""));
225217
uint256 availableReceiptBalance = receipt.balanceOf(alice, oraclePrice);
@@ -287,12 +279,12 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
287279

288280
vm.startPrank(alice);
289281

290-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, alice), abi.encode(aliceDeposit));
291282
vm.mockCall(
292283
address(iAsset),
293284
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, aliceDeposit),
294285
abi.encode(true)
295286
);
287+
vm.expectCall(address(iAsset), abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, aliceDeposit));
296288

297289
vault.deposit(aliceDeposit, alice, alicePrice, bytes(""));
298290
vm.stopPrank();
@@ -302,12 +294,12 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
302294

303295
vm.startPrank(bob);
304296

305-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, bob), abi.encode(bobDeposit));
306297
vm.mockCall(
307298
address(iAsset),
308299
abi.encodeWithSelector(IERC20.transferFrom.selector, bob, vault, bobDeposit),
309300
abi.encode(true)
310301
);
302+
vm.expectCall(address(iAsset), abi.encodeWithSelector(IERC20.transferFrom.selector, bob, vault, bobDeposit));
311303

312304
uint256 bobExpectedSharesAfterActions;
313305
{
@@ -345,12 +337,12 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
345337
setVaultOraclePrice(alicePrice);
346338

347339
vm.startPrank(bob);
348-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, bob), abi.encode(bobDeposit));
349340
vm.mockCall(
350341
address(iAsset),
351342
abi.encodeWithSelector(IERC20.transferFrom.selector, bob, vault, bobDeposit),
352343
abi.encode(true)
353344
);
345+
vm.expectCall(address(iAsset), abi.encodeWithSelector(IERC20.transferFrom.selector, bob, vault, bobDeposit));
354346

355347
uint256 bobSharesDeposit1 = vault.deposit(bobDeposit, bob, alicePrice, bytes(""));
356348
vm.stopPrank();
@@ -415,9 +407,6 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
415407
ERC20PriceOracleReceiptVault vault = createVault(iVaultOracle, assetName, assetName);
416408
ReceiptContract receipt = getReceipt();
417409

418-
// Ensure Alice has enough balance and allowance
419-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, alice), abi.encode(assets));
420-
421410
assets = bound(assets, 1, type(uint128).max - 1);
422411
vm.assume(assets.fixedPointMul(oraclePrice, Math.Rounding.Down) > 0);
423412

@@ -426,6 +415,7 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
426415
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets),
427416
abi.encode(true)
428417
);
418+
vm.expectCall(address(iAsset), abi.encodeWithSelector(IERC20.transferFrom.selector, alice, vault, assets));
429419

430420
vault.deposit(assets, alice, oraclePrice, bytes(""));
431421

@@ -485,12 +475,15 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
485475
setVaultOraclePrice(priceOne);
486476
vm.startPrank(alice);
487477

488-
vm.mockCall(address(iAsset), abi.encodeWithSelector(IERC20.balanceOf.selector, alice), abi.encode(aliceDeposit));
489478
vm.mockCall(
490479
address(iAsset),
491480
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, address(vault), aliceDeposit / 2),
492481
abi.encode(true)
493482
);
483+
vm.expectCall(
484+
address(iAsset),
485+
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, address(vault), aliceDeposit / 2)
486+
);
494487

495488
vault.deposit(aliceDeposit / 2, alice, priceOne, bytes(""));
496489
vm.stopPrank();
@@ -508,6 +501,10 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
508501
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, address(vault), aliceDeposit / 2),
509502
abi.encode(true)
510503
);
504+
vm.expectCall(
505+
address(iAsset),
506+
abi.encodeWithSelector(IERC20.transferFrom.selector, alice, address(vault), aliceDeposit / 2)
507+
);
511508

512509
vault.deposit(aliceDeposit / 2, alice, priceTwo, bytes(""));
513510
vm.stopPrank();

0 commit comments

Comments
 (0)