Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
FmToken.transfer(address,uint256) (contracts/FmToken.sol#64-86) uses a dangerous strict equality:
- lockBalanceOfEndTime[recipient] == 0 (contracts/FmToken.sol#67)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
Contract ownership is not renounced (belongs to a wallet)
FmToken.transfer(address,uint256) (contracts/FmToken.sol#64-86) uses timestamp for comparisons
Dangerous comparisons:
- lockBalanceOfEndTime[recipient] == 0 (contracts/FmToken.sol#67)
- lockBalanceOfEndTime[recipient] < block.timestamp (contracts/FmToken.sol#71)
- lockBalanceOfEndTime[msg.sender] > block.timestamp && lockBalanceOfEndTime[msg.sender] != 0 (contracts/FmToken.sol#79)
Avoid relying on block.timestamp.
Additional information: link
Different versions of Solidity is used:
- Version used: ['>=0.8.9', '^0.8.0']
- ^0.8.0 (@openzeppelin/contracts/access/Ownable.sol#4)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/ERC20.sol#4)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#4)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol#4)
- ^0.8.0 (@openzeppelin/contracts/utils/Context.sol#4)
- ^0.8.0 (@openzeppelin/contracts/utils/math/SafeMath.sol#4)
- >=0.8.9 (contracts/FmToken.sol#2)
Use one Solidity version.
Additional information: link
Context._msgData() (@openzeppelin/contracts/utils/Context.sol#21-23) is never used and should be removed
ERC20._burn(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#280-295) is never used and should be removed
SafeMath.div(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#135-137) is never used and should be removed
SafeMath.div(uint256,uint256,string) (@openzeppelin/contracts/utils/math/SafeMath.sol#191-200) is never used and should be removed
SafeMath.mod(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#151-153) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (@openzeppelin/contracts/utils/math/SafeMath.sol#217-226) is never used and should be removed
SafeMath.mul(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#121-123) is never used and should be removed
SafeMath.sub(uint256,uint256,string) (@openzeppelin/contracts/utils/math/SafeMath.sol#168-177) is never used and should be removed
SafeMath.tryAdd(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#22-28) is never used and should be removed
SafeMath.tryDiv(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#64-69) is never used and should be removed
SafeMath.tryMod(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#76-81) is never used and should be removed
SafeMath.tryMul(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#47-57) is never used and should be removed
SafeMath.trySub(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#35-40) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.0 (@openzeppelin/contracts/access/Ownable.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/ERC20.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/Context.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/math/SafeMath.sol#4) allows old versions
Pragma version>=0.8.9 (contracts/FmToken.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
solc-0.8.13 is not recommended for deployment
Deploy with any of the following Solidity versions: 0.5.16 - 0.5.17, 0.6.11 - 0.6.12, 0.7.5 - 0.7.6 Use a simple pragma version that allows any of these versions. Consider using the latest version of Solidity for testing.
Additional information: link
Variable FmToken._LockBalanceOf (contracts/FmToken.sol#9) is not in mixedCase
Variable FmToken._isExcludedLock (contracts/FmToken.sol#11) is not in mixedCase
Variable FmToken._lockTimeType (contracts/FmToken.sol#12) is not in mixedCase
Constant FmToken.teamer (contracts/FmToken.sol#14) is not in UPPER_CASE_WITH_UNDERSCORES
Constant FmToken.investor (contracts/FmToken.sol#15) is not in UPPER_CASE_WITH_UNDERSCORES
Constant FmToken.feministAgency (contracts/FmToken.sol#16) is not in UPPER_CASE_WITH_UNDERSCORES
Constant FmToken.dao (contracts/FmToken.sol#17) is not in UPPER_CASE_WITH_UNDERSCORES
Variable FmToken._lockTimeTypeMapping (contracts/FmToken.sol#18) is not in mixedCase
Constant FmToken.balanceLockTime_three_half (contracts/FmToken.sol#19) is not in UPPER_CASE_WITH_UNDERSCORES
Constant FmToken.balanceLockTime_two_half (contracts/FmToken.sol#20) is not in UPPER_CASE_WITH_UNDERSCORES
Constant FmToken.balanceLockTime_one_half (contracts/FmToken.sol#21) is not in UPPER_CASE_WITH_UNDERSCORES
Constant FmToken.balanceLockTime_half (contracts/FmToken.sol#22) is not in UPPER_CASE_WITH_UNDERSCORES
Constant FmToken.balanceLockTime_one_month (contracts/FmToken.sol#23) is not in UPPER_CASE_WITH_UNDERSCORES
Constant FmToken.balanceLockTime_two_month (contracts/FmToken.sol#24) is not in UPPER_CASE_WITH_UNDERSCORES
Constant FmToken.balanceLockTime_three_month (contracts/FmToken.sol#25) is not in UPPER_CASE_WITH_UNDERSCORES
Constant FmToken.balanceLockTime_nine_month (contracts/FmToken.sol#26) is not in UPPER_CASE_WITH_UNDERSCORES
Constant FmToken.balanceLockTime_one_year (contracts/FmToken.sol#27) is not in UPPER_CASE_WITH_UNDERSCORES
Constant FmToken.balanceLockTime_two_year (contracts/FmToken.sol#28) is not in UPPER_CASE_WITH_UNDERSCORES
Constant FmToken.balanceLockTime_three_year (contracts/FmToken.sol#29) is not in UPPER_CASE_WITH_UNDERSCORES
Constant FmToken.balanceLockTime_four_year (contracts/FmToken.sol#30) is not in UPPER_CASE_WITH_UNDERSCORES
Follow the Solidity naming convention.
Additional information: link
Variable FmToken.balanceLockTime_one_month (contracts/FmToken.sol#23) is too similar to FmToken.balanceLockTime_two_month (contracts/FmToken.sol#24)
Variable FmToken.balanceLockTime_one_year (contracts/FmToken.sol#27) is too similar to FmToken.balanceLockTime_two_year (contracts/FmToken.sol#28)
Variable FmToken.balanceLockTime_one_half (contracts/FmToken.sol#21) is too similar to FmToken.balanceLockTime_two_half (contracts/FmToken.sol#20)
Prevent variables from having similar names.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (@openzeppelin/contracts/access/Ownable.sol#54-56)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (@openzeppelin/contracts/access/Ownable.sol#62-65)
name() should be declared external:
- ERC20.name() (@openzeppelin/contracts/token/ERC20/ERC20.sol#62-64)
symbol() should be declared external:
- ERC20.symbol() (@openzeppelin/contracts/token/ERC20/ERC20.sol#70-72)
decimals() should be declared external:
- ERC20.decimals() (@openzeppelin/contracts/token/ERC20/ERC20.sol#87-89)
totalSupply() should be declared external:
- ERC20.totalSupply() (@openzeppelin/contracts/token/ERC20/ERC20.sol#94-96)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#136-140)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#158-167)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#181-185)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#201-210)
mint(address,uint256) should be declared external:
- FmToken.mint(address,uint256) (contracts/FmToken.sol#52-55)
setLockTimeTypeByAddress(address,uint256) should be declared external:
- FmToken.setLockTimeTypeByAddress(address,uint256) (contracts/FmToken.sol#57-62)
Use the external attribute for functions never called from the contract.
Additional information: link
Contract ticker (F) has length of 1 chars.
Not a direct threat, but may indicate unreliable intentions of developer.
Unable to find website, listings and other project-related information
Young tokens have high risks of scam / price dump / death
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Unable to find Telegram and Twitter accounts