Inherit asset decimals in ERC4626 (#3639)

This commit is contained in:
Hadrien Croubois
2022-08-26 09:53:53 +02:00
committed by GitHub
parent e45b49eab8
commit 141130db27
5 changed files with 104 additions and 8 deletions

View File

@ -4,7 +4,6 @@ pragma solidity ^0.8.0;
import "../token/ERC20/extensions/ERC4626.sol";
// mock class using ERC20
contract ERC4626Mock is ERC4626 {
constructor(
IERC20Metadata asset,
@ -20,3 +19,42 @@ contract ERC4626Mock is ERC4626 {
_burn(account, amount);
}
}
contract ERC4626DecimalMock is ERC4626Mock {
using Math for uint256;
uint8 private immutable _decimals;
constructor(
IERC20Metadata asset,
string memory name,
string memory symbol,
uint8 decimalsOverride
) ERC4626Mock(asset, name, symbol) {
_decimals = decimalsOverride;
}
function decimals() public view virtual override returns (uint8) {
return _decimals;
}
function _initialConvertToShares(uint256 assets, Math.Rounding rounding)
internal
view
virtual
override
returns (uint256 shares)
{
return assets.mulDiv(10**decimals(), 10**super.decimals(), rounding);
}
function _initialConvertToAssets(uint256 shares, Math.Rounding rounding)
internal
view
virtual
override
returns (uint256 assets)
{
return shares.mulDiv(10**super.decimals(), 10**decimals(), rounding);
}
}