ERC4626.t.sol 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.19;
  3. import {ERC4626Test} from "erc4626-tests/ERC4626.test.sol";
  4. import {SafeCast} from "openzeppelin/utils/math/SafeCast.sol";
  5. import {ERC20} from "openzeppelin/token/ERC20/ERC20.sol";
  6. import {ERC4626} from "openzeppelin/token/ERC20/extensions/ERC4626.sol";
  7. import {ERC20Mock} from "openzeppelin/mocks/token/ERC20Mock.sol";
  8. import {ERC4626Mock} from "openzeppelin/mocks/token/ERC4626Mock.sol";
  9. import {ERC4626OffsetMock} from "openzeppelin/mocks/token/ERC4626OffsetMock.sol";
  10. contract ERC4626VaultOffsetMock is ERC4626OffsetMock {
  11. constructor(
  12. ERC20 underlying_,
  13. uint8 offset_
  14. ) ERC20("My Token Vault", "MTKNV") ERC4626(underlying_) ERC4626OffsetMock(offset_) {}
  15. }
  16. contract ERC4626StdTest is ERC4626Test {
  17. ERC20 private _underlying = new ERC20Mock();
  18. function setUp() public override {
  19. _underlying_ = address(_underlying);
  20. _vault_ = address(new ERC4626Mock(_underlying_));
  21. _delta_ = 0;
  22. _vaultMayBeEmpty = true;
  23. _unlimitedAmount = true;
  24. }
  25. /**
  26. * @dev Check the case where calculated `decimals` value overflows the `uint8` type.
  27. */
  28. function testFuzzDecimalsOverflow(uint8 offset) public {
  29. /// @dev Remember that the `_underlying` exhibits a `decimals` value of 18.
  30. offset = uint8(bound(uint256(offset), 238, uint256(type(uint8).max)));
  31. ERC4626VaultOffsetMock erc4626VaultOffsetMock = new ERC4626VaultOffsetMock(_underlying, offset);
  32. vm.expectRevert();
  33. erc4626VaultOffsetMock.decimals();
  34. }
  35. }