pragma solidity 0.8.17; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "forge-std/Test.sol"; contract PriceTest is Test { uint256 constant continuousFundraisingFeeDenominator = 100; uint8 constant tokenDecimals = 18; IERC20Metadata constant EUROC = IERC20Metadata(0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c); IERC20Metadata constant USDC = IERC20Metadata(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); IERC20Metadata constant WBTC = IERC20Metadata(0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599); IERC20Metadata constant WETH = IERC20Metadata(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); function divideRoundUp(uint256 numerator, uint256 denominator) public pure returns (uint256) { return numerator % denominator == 0 ? numerator / denominator : numerator / denominator + 1; } function testEUROC() public { uint256 tokenPrice = 200 * 10**EUROC.decimals(); uint256 _amount = 150 * 10**tokenDecimals; assertEq((_amount * tokenPrice) % (10**tokenDecimals), 0); uint256 currencyAmount = (_amount * tokenPrice) / 10**tokenDecimals; // assertEq(currencyAmount, 3 * 10**10); uint256 fee = currencyAmount / continuousFundraisingFeeDenominator; console2.log("fee", fee); } function testUSDC() public { uint256 tokenPrice = 200 * 10**USDC.decimals(); uint256 _amount = 150 * 10**tokenDecimals; assertEq((_amount * tokenPrice) % (10**tokenDecimals), 0); uint256 currencyAmount = (_amount * tokenPrice) / 10**tokenDecimals; assertEq(currencyAmount, 3 * 10**10); uint256 fee = currencyAmount / continuousFundraisingFeeDenominator; console2.log("fee", fee); } function testWBTC() public { uint256 tokenPrice = 200 * 10**WBTC.decimals(); uint256 _amount = 150 * 10**tokenDecimals; assertEq((_amount * tokenPrice) % (10**tokenDecimals), 0); uint256 currencyAmount = (_amount * tokenPrice) / 10**tokenDecimals; // assertEq(currencyAmount, 3 * 10**10); uint256 fee = currencyAmount / continuousFundraisingFeeDenominator; console2.log("fee", fee); } function testWETH() public { uint256 tokenPrice = 200 * 10**WETH.decimals(); uint256 _amount = 150 * 10**tokenDecimals; assertEq((_amount * tokenPrice) % (10**tokenDecimals), 0); uint256 currencyAmount = (_amount * tokenPrice) / 10**tokenDecimals; // assertEq(currencyAmount, 3 * 10**10); uint256 fee = currencyAmount / continuousFundraisingFeeDenominator; console2.log("fee", fee); } function testFailHeiko1() public { uint256 tokenPrice = 123456789; uint256 dollars = 200 * 10**USDC.decimals(); uint256 _amount = (dollars * 10**tokenDecimals) / tokenPrice; console2.log("_amount =", _amount); assertEq((_amount * tokenPrice) % (10**tokenDecimals), 0); } function testHeiko2() public view { uint256 tokenPrice = 123456789; uint256 dollars = 200 * 10**USDC.decimals(); uint256 _amount = divideRoundUp( dollars * 10**tokenDecimals, tokenPrice ); console2.log("_amount =", _amount); } }
0.4.18