ERC4626Mock.sol 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.0;
  3. import "../token/ERC20/extensions/ERC4626.sol";
  4. contract ERC4626Mock is ERC4626 {
  5. constructor(
  6. IERC20Metadata asset,
  7. string memory name,
  8. string memory symbol
  9. ) ERC20(name, symbol) ERC4626(asset) {}
  10. function mockMint(address account, uint256 amount) public {
  11. _mint(account, amount);
  12. }
  13. function mockBurn(address account, uint256 amount) public {
  14. _burn(account, amount);
  15. }
  16. }
  17. contract ERC4626DecimalMock is ERC4626Mock {
  18. using Math for uint256;
  19. uint8 private immutable _decimals;
  20. constructor(
  21. IERC20Metadata asset,
  22. string memory name,
  23. string memory symbol,
  24. uint8 decimalsOverride
  25. ) ERC4626Mock(asset, name, symbol) {
  26. _decimals = decimalsOverride;
  27. }
  28. function decimals() public view virtual override returns (uint8) {
  29. return _decimals;
  30. }
  31. function _initialConvertToShares(uint256 assets, Math.Rounding rounding)
  32. internal
  33. view
  34. virtual
  35. override
  36. returns (uint256 shares)
  37. {
  38. return assets.mulDiv(10**decimals(), 10**super.decimals(), rounding);
  39. }
  40. function _initialConvertToAssets(uint256 shares, Math.Rounding rounding)
  41. internal
  42. view
  43. virtual
  44. override
  45. returns (uint256 assets)
  46. {
  47. return shares.mulDiv(10**super.decimals(), 10**decimals(), rounding);
  48. }
  49. }