Skip to content

Commit 916db88

Browse files
wip on fix tests
1 parent 80f39fc commit 916db88

12 files changed

+52
-112
lines changed

foundry.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
solc = "0.8.25"
66
optimizer = true
77
optimizer_runs = 100000
8+
via_ir = true
89

910
evm_version = "cancun"
1011

test/src/concrete/authorize/OffchainAssetReceiptVaultAuthorizerV1.construct.t.sol

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@ import {
2020
ZeroInitialAdmin
2121
} from "src/concrete/authorize/OffchainAssetReceiptVaultAuthorizerV1.sol";
2222
import {CloneFactory} from "rain.factory/concrete/CloneFactory.sol";
23+
import {Initializable} from "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol";
2324

2425
contract OffchainAssetReceiptVaultAuthorizerV1ConstructTest is Test {
2526
function testOffchainAssetReceiptVaultAuthorizerV1Construct(address initialAdmin) external {
2627
OffchainAssetReceiptVaultAuthorizerV1 authorizer = new OffchainAssetReceiptVaultAuthorizerV1();
2728

28-
vm.expectRevert("Initializable: contract is already initialized");
29+
vm.expectRevert(abi.encodeWithSelector(Initializable.InvalidInitialization.selector));
2930
authorizer.initialize(abi.encode(OffchainAssetReceiptVaultAuthorizerV1Config({initialAdmin: initialAdmin})));
3031
}
3132

@@ -46,7 +47,7 @@ contract OffchainAssetReceiptVaultAuthorizerV1ConstructTest is Test {
4647

4748
bytes memory initData = abi.encode(OffchainAssetReceiptVaultAuthorizerV1Config({initialAdmin: initialAdmin}));
4849

49-
vm.expectRevert("Initializable: contract is already initialized");
50+
vm.expectRevert(abi.encodeWithSelector(Initializable.InvalidInitialization.selector));
5051
authorizerImplementation.initialize(initData);
5152

5253
CloneFactory factory = new CloneFactory();

test/src/concrete/authorize/OffchainAssetReceiptVaultPaymentMintAuthorizerV1.authorize.t.sol

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
import {CloneFactory} from "rain.factory/concrete/CloneFactory.sol";
2222
import {IERC20Metadata} from "openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol";
2323
import {VerifyAlwaysApproved} from "rain.verify.interface/concrete/VerifyAlwaysApproved.sol";
24+
import {IAccessControl} from "openzeppelin-contracts/contracts/access/IAccessControl.sol";
2425

2526
contract OffchainAssetReceiptVaultPaymentMintAuthorizerV1IERC165Test is OffchainAssetReceiptVaultAuthorizerV1Test {
2627
using Strings for address;
@@ -233,11 +234,7 @@ contract OffchainAssetReceiptVaultPaymentMintAuthorizerV1IERC165Test is Offchain
233234

234235
vm.prank(owner);
235236
vm.expectRevert(
236-
bytes(
237-
string.concat(
238-
"AccessControl: account ", owner.toHexString(), " is missing role ", vm.toString(DEPOSIT_ADMIN)
239-
)
240-
)
237+
abi.encodeWithSelector(IAccessControl.AccessControlUnauthorizedAccount.selector, owner, DEPOSIT_ADMIN, "")
241238
);
242239
authorizer.grantRole(DEPOSIT, user);
243240
}
@@ -259,11 +256,7 @@ contract OffchainAssetReceiptVaultPaymentMintAuthorizerV1IERC165Test is Offchain
259256

260257
vm.prank(owner);
261258
vm.expectRevert(
262-
bytes(
263-
string.concat(
264-
"AccessControl: account ", owner.toHexString(), " is missing role ", vm.toString(WITHDRAW_ADMIN)
265-
)
266-
)
259+
abi.encodeWithSelector(IAccessControl.AccessControlUnauthorizedAccount.selector, owner, WITHDRAW_ADMIN, "")
267260
);
268261
authorizer.grantRole(WITHDRAW, user);
269262
}

test/src/concrete/authorize/OffchainAssetReceiptVaultPaymentMintAuthorizerV1.construct.t.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,14 @@ import {
3333
CERTIFY_ADMIN
3434
} from "src/concrete/authorize/OffchainAssetReceiptVaultAuthorizerV1.sol";
3535
import {VerifyAlwaysApproved} from "rain.verify.interface/concrete/VerifyAlwaysApproved.sol";
36+
import {Initializable} from "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol";
3637

3738
contract OffchainAssetReceiptVaultPaymentMintAuthorizerV1ConstructTest is Test {
3839
function testOffchainAssetReceiptVaultPaymentMintAuthorizerV1Construct() external {
3940
OffchainAssetReceiptVaultPaymentMintAuthorizerV1 authorizer =
4041
new OffchainAssetReceiptVaultPaymentMintAuthorizerV1();
4142

42-
vm.expectRevert("Initializable: contract is already initialized");
43+
vm.expectRevert(abi.encodeWithSelector(Initializable.InvalidInitialization.selector));
4344
authorizer.initialize(
4445
abi.encode(
4546
OffchainAssetReceiptVaultPaymentMintAuthorizerV1Config({

test/src/concrete/authorize/OffchainAssetReceiptVaultPaymentMintAuthorizerV1.deposit.t.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
import {VerifyAlwaysApproved} from "rain.verify.interface/concrete/VerifyAlwaysApproved.sol";
2525
import {LibFixedPointDecimalScale, FLAG_ROUND_UP} from "rain.math.fixedpoint/lib/LibFixedPointDecimalScale.sol";
2626
import {ICloneableFactoryV2} from "rain.factory/interface/ICloneableFactoryV2.sol";
27+
import {IERC20Errors} from "openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol";
2728

2829
import {TestErc20} from "test/concrete/TestErc20.sol";
2930

@@ -111,7 +112,7 @@ contract OffchainAssetReceiptVaultPaymentMintAuthorizerV1DepositTest is Offchain
111112
// Alice can't afford to deposit.
112113
vm.startPrank(alice);
113114
paymentToken.approve(address(authorizer), paymentAmount);
114-
vm.expectRevert("ERC20: transfer amount exceeds balance");
115+
vm.expectRevert(abi.encodeWithSelector(IERC20Errors.ERC20InsufficientBalance.selector, alice, 0, paymentAmount));
115116
receiptVault.mint(firstShares, alice, 0, hex"");
116117
vm.stopPrank();
117118

test/src/concrete/receipt/Receipt.t.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {TestReceiptManager, UnauthorizedTransfer} from "test/concrete/TestReceip
77
import {LibUniqueAddressesGenerator} from "../../../lib/LibUniqueAddressesGenerator.sol";
88
import {ReceiptFactoryTest} from "test/abstract/ReceiptFactoryTest.sol";
99
import {OnlyManager} from "../../../../src/error/ErrReceipt.sol";
10+
import {IERC1155Errors} from "openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol";
1011

1112
contract ReceiptTest is ReceiptFactoryTest {
1213
function testInitialize() public {
@@ -382,7 +383,7 @@ contract ReceiptTest is ReceiptFactoryTest {
382383

383384
// Expect revert on transfer to zero address
384385
testManager.setTo(address(0));
385-
vm.expectRevert("ERC1155: transfer to the zero address");
386+
vm.expectRevert(abi.encodeWithSelector(IERC1155Errors.ERC1155InvalidReceiver.selector, address(0)));
386387
receipt.safeTransferFrom(alice, address(0), tokenId, amount, "");
387388

388389
testManager.setFrom(alice);

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

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -163,46 +163,4 @@ contract ERC20PriceOracleReceiptVaultERC20StandardTest is ERC20PriceOracleReceip
163163
assertEqUint(vault.balanceOf(alice), aliceBalanceBeforeTransfer - transferFromAmount);
164164
assertEqUint(vault.balanceOf(bob), transferFromAmount);
165165
}
166-
167-
// Test ERC20 increaseAllowance
168-
function testERC20IncreaseAllowance(uint256 aliceSeed, uint256 bobSeed, uint256 amount, uint256 increaseAmount)
169-
external
170-
{
171-
(address alice, address bob) = LibUniqueAddressesGenerator.generateUniqueAddresses(vm, aliceSeed, bobSeed);
172-
173-
amount = bound(amount, 1, type(uint128).max);
174-
increaseAmount = bound(increaseAmount, 1, type(uint128).max);
175-
vm.assume(increaseAmount < amount);
176-
177-
ERC20PriceOracleReceiptVault vault = createVault(I_VAULT_ORACLE, "Test Token", "TST");
178-
179-
vm.startPrank(alice);
180-
vault.approve(bob, amount);
181-
182-
IERC20(address(vault)).safeIncreaseAllowance(bob, increaseAmount);
183-
184-
// Check that allowance increased correctly
185-
assertEq(vault.allowance(alice, bob), amount + increaseAmount);
186-
}
187-
188-
// Test ERC20 decreaseAllowance
189-
function testERC20DecreaseAllowance(uint256 aliceSeed, uint256 bobSeed, uint256 amount, uint256 decreaseAmount)
190-
external
191-
{
192-
(address alice, address bob) = LibUniqueAddressesGenerator.generateUniqueAddresses(vm, aliceSeed, bobSeed);
193-
194-
amount = bound(amount, 1, type(uint128).max);
195-
decreaseAmount = bound(decreaseAmount, 1, type(uint128).max);
196-
vm.assume(decreaseAmount < amount);
197-
198-
ERC20PriceOracleReceiptVault vault = createVault(I_VAULT_ORACLE, "Test Token", "TST");
199-
200-
vm.startPrank(alice);
201-
vault.approve(bob, amount);
202-
203-
IERC20(address(vault)).safeDecreaseAllowance(bob, decreaseAmount);
204-
205-
// Check that allowance decreased correctly
206-
assertEq(vault.allowance(alice, bob), amount - decreaseAmount);
207-
}
208166
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import {IReceiptVaultV1} from "../../../../src/interface/IReceiptVaultV3.sol";
1515
import {SFLR_CONTRACT} from "rain.flare/lib/sflr/LibSceptreStakedFlare.sol";
1616
import {LibERC20PriceOracleReceiptVaultFork} from "../../../lib/LibERC20PriceOracleReceiptVaultFork.sol";
1717
import {LibUniqueAddressesGenerator} from "../../../lib/LibUniqueAddressesGenerator.sol";
18+
import {IERC1155Errors} from "openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol";
19+
import {IERC20Errors} from "openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol";
1820

1921
contract ERC20PriceOracleReceiptVaultRedeemTest is ERC20PriceOracleReceiptVaultTest {
2022
using LibFixedPointDecimalArithmeticOpenZeppelin for uint256;
@@ -352,7 +354,9 @@ contract ERC20PriceOracleReceiptVaultRedeemTest is ERC20PriceOracleReceiptVaultT
352354

353355
// Bob has no allowance so he cannot withdraw.
354356
vm.startPrank(bob);
355-
vm.expectRevert("ERC20: insufficient allowance");
357+
vm.expectRevert(
358+
abi.encodeWithSelector(IERC20Errors.ERC20InsufficientAllowance.selector, bob, 0, redeemSharesAmount)
359+
);
356360
vault.redeem(redeemSharesAmount, bob, alice, oraclePrice, bytes(""));
357361
vm.stopPrank();
358362

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

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import {IReceiptVaultV1} from "../../../../src/interface/IReceiptVaultV3.sol";
1515
import {SFLR_CONTRACT} from "rain.flare/lib/sflr/LibSceptreStakedFlare.sol";
1616
import {LibERC20PriceOracleReceiptVaultFork} from "../../../lib/LibERC20PriceOracleReceiptVaultFork.sol";
1717
import {LibUniqueAddressesGenerator} from "../../../lib/LibUniqueAddressesGenerator.sol";
18+
import {IERC1155Errors} from "openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol";
19+
import {IERC20Errors} from "openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol";
1820

1921
contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaultTest {
2022
using LibFixedPointDecimalArithmeticOpenZeppelin for uint256;
@@ -294,12 +296,18 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
294296
vm.startPrank(alice);
295297

296298
// Alice attempts to burn Bob's receipt by ID, using herself as owner.
297-
vm.expectRevert("ERC1155: burn amount exceeds balance");
299+
vm.expectRevert(
300+
abi.encodeWithSelector(
301+
IERC1155Errors.ERC1155InsufficientBalance.selector, alice, 0, bobPrice, bobPrice
302+
)
303+
);
298304
uint256 aliceSharesWithdraw0 = vault.withdraw(1e18, alice, alice, bobPrice, bytes(""));
299305
assertEqUint(aliceSharesWithdraw0, 0);
300306

301307
// Alice attempts to burn Bob's receipt by ID, using Bob as owner.
302-
vm.expectRevert("ERC20: insufficient allowance");
308+
vm.expectRevert(
309+
abi.encodeWithSelector(IERC20Errors.ERC20InsufficientAllowance.selector, alice, 0, bobPrice)
310+
);
303311
uint256 aliceSharesWithdraw1 = vault.withdraw(1e18, alice, bob, bobPrice, bytes(""));
304312
assertEqUint(aliceSharesWithdraw1, 0);
305313

@@ -337,7 +345,7 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
337345

338346
vm.startPrank(bob);
339347
// Bob cannot burn Alice's receipt.
340-
vm.expectRevert("ERC20: insufficient allowance");
348+
vm.expectRevert(abi.encodeWithSelector(IERC20Errors.ERC20InsufficientAllowance.selector, bob, 0, alicePrice));
341349
vault.withdraw(1e18, bob, alice, alicePrice, bytes(""));
342350

343351
uint256 maxWithdrawBob = vault.maxWithdraw(bob, alicePrice);
@@ -360,7 +368,12 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
360368
vm.startPrank(bob);
361369

362370
// Bob cannot withdraw any more under alice price.
363-
vm.expectRevert("ERC1155: burn amount exceeds balance");
371+
uint256 bobBalance = vault.receipt().balanceOf(bob, alicePrice);
372+
vm.expectRevert(
373+
abi.encodeWithSelector(
374+
IERC1155Errors.ERC1155InsufficientBalance.selector, bob, bobBalance, alicePrice, alicePrice
375+
)
376+
);
364377
vault.withdraw(1e18, bob, bob, alicePrice, bytes(""));
365378

366379
vm.stopPrank();
@@ -522,20 +535,28 @@ contract ERC20PriceOracleReceiptVaultWithdrawTest is ERC20PriceOracleReceiptVaul
522535

523536
// Ensure burns cannot occur at the new oracle price
524537
vm.startPrank(alice);
525-
vm.expectRevert("ERC1155: burn amount exceeds balance");
538+
vm.expectRevert(
539+
abi.encodeWithSelector(IERC1155Errors.ERC1155InsufficientBalance.selector, alice, 0, priceThree, priceThree)
540+
);
526541
vault.withdraw(1e18, alice, alice, priceThree, bytes(""));
527542

528-
vm.expectRevert("ERC1155: burn amount exceeds balance");
543+
vm.expectRevert(
544+
abi.encodeWithSelector(IERC1155Errors.ERC1155InsufficientBalance.selector, alice, 0, 1e18, priceThree)
545+
);
529546
vault.redeem(1e18, alice, alice, priceThree, bytes(""));
530547
vm.stopPrank();
531548

532549
setVaultOraclePrice(priceThree);
533550

534551
vm.startPrank(alice);
535-
vm.expectRevert("ERC1155: burn amount exceeds balance");
552+
vm.expectRevert(
553+
abi.encodeWithSelector(IERC1155Errors.ERC1155InsufficientBalance.selector, alice, 0, priceThree, priceThree)
554+
);
536555
vault.withdraw(1e18, alice, alice, priceThree, bytes(""));
537556

538-
vm.expectRevert("ERC1155: burn amount exceeds balance");
557+
vm.expectRevert(
558+
abi.encodeWithSelector(IERC1155Errors.ERC1155InsufficientBalance.selector, alice, 0, 1e18, priceThree)
559+
);
539560
vault.redeem(1e18, alice, alice, priceThree, bytes(""));
540561
vm.stopPrank();
541562

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

Lines changed: 1 addition & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {LibFixedPointDecimalArithmeticOpenZeppelin} from
99
import {LibUniqueAddressesGenerator} from "../../../lib/LibUniqueAddressesGenerator.sol";
1010
import {OffchainAssetReceiptVaultAuthorizerV1} from "src/concrete/authorize/OffchainAssetReceiptVaultAuthorizerV1.sol";
1111
import {SafeERC20, IERC20} from "openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol";
12+
import {console2} from "forge-std/console2.sol";
1213

1314
contract OffchainAssetReceiptVaultERC20StandardTest is OffchainAssetReceiptVaultTest {
1415
using LibFixedPointDecimalArithmeticOpenZeppelin for uint256;
@@ -166,48 +167,4 @@ contract OffchainAssetReceiptVaultERC20StandardTest is OffchainAssetReceiptVault
166167
assertEqUint(vault.balanceOf(bob), transferFromAmount);
167168
vm.stopPrank();
168169
}
169-
170-
// Test ERC20 increaseAllowance
171-
function testERC20IncreaseAllowance(uint256 aliceSeed, uint256 bobSeed, uint256 amount, uint256 increaseAmount)
172-
external
173-
{
174-
(address alice, address bob) = LibUniqueAddressesGenerator.generateUniqueAddresses(vm, aliceSeed, bobSeed);
175-
176-
vm.assume(alice != bob);
177-
amount = bound(amount, 1, type(uint128).max);
178-
increaseAmount = bound(increaseAmount, 1, type(uint128).max);
179-
vm.assume(increaseAmount < amount);
180-
181-
OffchainAssetReceiptVault vault = createVault(alice, "Test Token", "TST");
182-
183-
vm.startPrank(alice);
184-
vault.approve(bob, amount);
185-
186-
IERC20(address(vault)).safeIncreaseAllowance(bob, increaseAmount);
187-
188-
// Check that allowance increased correctly
189-
assertEq(vault.allowance(alice, bob), amount + increaseAmount);
190-
}
191-
192-
// Test ERC20 decreaseAllowance
193-
function testERC20DecreaseAllowance(uint256 aliceSeed, uint256 bobSeed, uint256 amount, uint256 decreaseAmount)
194-
external
195-
{
196-
(address alice, address bob) = LibUniqueAddressesGenerator.generateUniqueAddresses(vm, aliceSeed, bobSeed);
197-
198-
vm.assume(alice != bob);
199-
amount = bound(amount, 1, type(uint128).max);
200-
decreaseAmount = bound(decreaseAmount, 1, type(uint128).max);
201-
vm.assume(decreaseAmount < amount);
202-
203-
OffchainAssetReceiptVault vault = createVault(alice, "Test Token", "TST");
204-
205-
vm.startPrank(alice);
206-
vault.approve(bob, amount);
207-
208-
IERC20(address(vault)).safeDecreaseAllowance(bob, decreaseAmount);
209-
210-
// Check that allowance decreased correctly
211-
assertEq(vault.allowance(alice, bob), amount - decreaseAmount);
212-
}
213170
}

0 commit comments

Comments
 (0)