Mate is a BSC limit order DEX utilising AMMs to guarantee execution.
TokenVesting._vestedAmount(IERC20) (contracts/TokenVesting.sol#185-206) uses a dangerous strict equality:
- block.timestamp >= _start.add(_duration) && _revoked[address(token)] == 0 (contracts/TokenVesting.sol#194-195)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
Unable to verify that contract auditor is trusted: Certik, Quantstamp, Hacken, Solidity, Paladinsec, Openzeppelin, Verichains
AccessControlEnumerable.grantRole(bytes32,address) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#59-62) ignores return value by _roleMembers[role].add(account) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#61)
AccessControlEnumerable.revokeRole(bytes32,address) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#67-70) ignores return value by _roleMembers[role].remove(account) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#69)
AccessControlEnumerable.renounceRole(bytes32,address) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#75-78) ignores return value by _roleMembers[role].remove(account) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#77)
AccessControlEnumerable._setupRole(bytes32,address) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#83-86) ignores return value by _roleMembers[role].add(account) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#85)
Ensure that all the return values of the function calls are used.
Additional information: link
ERC20Pausable.constructor(string,string).name (contracts/MateToken.sol#15) shadows:
- ERC20.name() (@openzeppelin/contracts/token/ERC20/ERC20.sol#60-62) (function)
- IERC20Metadata.name() (@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol#16) (function)
ERC20Pausable.constructor(string,string).symbol (contracts/MateToken.sol#15) shadows:
- ERC20.symbol() (@openzeppelin/contracts/token/ERC20/ERC20.sol#68-70) (function)
- IERC20Metadata.symbol() (@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol#21) (function)
TokenVesting.constructor(address,uint256,uint256,uint256,bool).beneficiary (contracts/TokenVesting.sol#46) shadows:
- TokenVesting.beneficiary() (contracts/TokenVesting.sol#78-80) (function)
TokenVesting.constructor(address,uint256,uint256,uint256,bool).start (contracts/TokenVesting.sol#47) shadows:
- TokenVesting.start() (contracts/TokenVesting.sol#92-94) (function)
TokenVesting.constructor(address,uint256,uint256,uint256,bool).duration (contracts/TokenVesting.sol#49) shadows:
- TokenVesting.duration() (contracts/TokenVesting.sol#99-101) (function)
TokenVesting.constructor(address,uint256,uint256,uint256,bool).revocable (contracts/TokenVesting.sol#50) shadows:
- TokenVesting.revocable() (contracts/TokenVesting.sol#106-108) (function)
Rename the local variables that shadow another component.
Additional information: link
Reentrancy in TokenVesting.release(IERC20) (contracts/TokenVesting.sol#128-138):
External calls:
- token.safeTransfer(_beneficiary,unreleased) (contracts/TokenVesting.sol#135)
Event emitted after the call(s):
- TokensReleased(address(token),unreleased) (contracts/TokenVesting.sol#137)
Reentrancy in TokenVesting.revoke(IERC20) (contracts/TokenVesting.sol#145-164):
External calls:
- token.safeTransfer(owner(),refund) (contracts/TokenVesting.sol#161)
Event emitted after the call(s):
- TokenVestingRevoked(address(token)) (contracts/TokenVesting.sol#163)
Apply the check-effects-interactions pattern.
Additional information: link
TokenVesting.constructor(address,uint256,uint256,uint256,bool) (contracts/TokenVesting.sol#45-73) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(start.add(duration) > block.timestamp,TokenVesting: final time is before current time) (contracts/TokenVesting.sol#63-66)
TokenVesting.revoked(address) (contracts/TokenVesting.sol#120-122) uses timestamp for comparisons
Dangerous comparisons:
- (_revoked[token] != 0) (contracts/TokenVesting.sol#121)
TokenVesting.release(IERC20) (contracts/TokenVesting.sol#128-138) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(unreleased > 0,TokenVesting: no tokens are due) (contracts/TokenVesting.sol#131)
TokenVesting.revoke(IERC20) (contracts/TokenVesting.sol#145-164) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(_revoked[address(token)] == 0,TokenVesting: token already revoked) (contracts/TokenVesting.sol#147-150)
TokenVesting._vestedAmount(IERC20) (contracts/TokenVesting.sol#185-206) uses timestamp for comparisons
Dangerous comparisons:
- block.timestamp < _cliff (contracts/TokenVesting.sol#191)
- block.timestamp >= _start.add(_duration) && _revoked[address(token)] == 0 (contracts/TokenVesting.sol#194-195)
- _revoked[address(token)] > 0 (contracts/TokenVesting.sol#198)
Avoid relying on block.timestamp.
Additional information: link
Address.isContract(address) (@openzeppelin/contracts/utils/Address.sol#26-36) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/Address.sol#32-34)
Address._verifyCallResult(bool,bytes,string) (@openzeppelin/contracts/utils/Address.sol#189-209) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/Address.sol#201-204)
Do not use evm assembly.
Additional information: link
Different versions of Solidity is used:
- Version used: ['>=0.8.0', '^0.8.0']
- ^0.8.0 (@openzeppelin/contracts/access/AccessControl.sol#3)
- ^0.8.0 (@openzeppelin/contracts/access/AccessControlEnumerable.sol#3)
- ^0.8.0 (@openzeppelin/contracts/access/Ownable.sol#3)
- ^0.8.0 (@openzeppelin/contracts/security/Pausable.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/ERC20.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/Address.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/Context.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/Strings.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/introspection/ERC165.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/introspection/IERC165.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/math/SafeMath.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#3)
- >=0.8.0 (contracts/MateToken.sol#2)
- >=0.8.0 (contracts/TokenVesting.sol#2)
Use one Solidity version.
Additional information: link
AccessControl._setRoleAdmin(bytes32,bytes32) (@openzeppelin/contracts/access/AccessControl.sol#232-235) is never used and should be removed
Address.functionCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#79-81) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (@openzeppelin/contracts/utils/Address.sol#108-114) is never used and should be removed
Address.functionDelegateCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#168-170) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#178-187) is never used and should be removed
Address.functionStaticCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#141-143) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#151-160) is never used and should be removed
Address.sendValue(address,uint256) (@openzeppelin/contracts/utils/Address.sol#54-59) is never used and should be removed
Context._msgData() (@openzeppelin/contracts/utils/Context.sol#20-22) is never used and should be removed
ERC20._burn(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#273-288) is never used and should be removed
EnumerableSet.add(EnumerableSet.Bytes32Set,bytes32) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#145-147) is never used and should be removed
EnumerableSet.add(EnumerableSet.UintSet,uint256) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#253-255) is never used and should be removed
EnumerableSet.at(EnumerableSet.Bytes32Set,uint256) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#183-185) is never used and should be removed
EnumerableSet.at(EnumerableSet.UintSet,uint256) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#291-293) is never used and should be removed
EnumerableSet.contains(EnumerableSet.AddressSet,address) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#216-218) is never used and should be removed
EnumerableSet.contains(EnumerableSet.Bytes32Set,bytes32) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#162-164) is never used and should be removed
EnumerableSet.contains(EnumerableSet.UintSet,uint256) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#270-272) is never used and should be removed
EnumerableSet.length(EnumerableSet.Bytes32Set) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#169-171) is never used and should be removed
EnumerableSet.length(EnumerableSet.UintSet) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#277-279) is never used and should be removed
EnumerableSet.remove(EnumerableSet.Bytes32Set,bytes32) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#155-157) is never used and should be removed
EnumerableSet.remove(EnumerableSet.UintSet,uint256) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#263-265) is never used and should be removed
SafeERC20.safeApprove(IERC20,address,uint256) (@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#44-57) is never used and should be removed
SafeERC20.safeDecreaseAllowance(IERC20,address,uint256) (@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#68-79) is never used and should be removed
SafeERC20.safeIncreaseAllowance(IERC20,address,uint256) (@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#59-66) is never used and should be removed
SafeERC20.safeTransferFrom(IERC20,address,address,uint256) (@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#28-35) is never used and should be removed
SafeMath.div(uint256,uint256,string) (@openzeppelin/contracts/utils/math/SafeMath.sol#190-199) is never used and should be removed
SafeMath.mod(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#150-152) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (@openzeppelin/contracts/utils/math/SafeMath.sol#216-225) is never used and should be removed
SafeMath.sub(uint256,uint256,string) (@openzeppelin/contracts/utils/math/SafeMath.sol#167-176) is never used and should be removed
SafeMath.tryAdd(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#21-27) is never used and should be removed
SafeMath.tryDiv(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#63-68) is never used and should be removed
SafeMath.tryMod(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#75-80) is never used and should be removed
SafeMath.tryMul(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#46-56) is never used and should be removed
SafeMath.trySub(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#34-39) is never used and should be removed
Strings.toHexString(uint256) (@openzeppelin/contracts/utils/Strings.sol#39-50) is never used and should be removed
Strings.toString(uint256) (@openzeppelin/contracts/utils/Strings.sol#14-34) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.0 (@openzeppelin/contracts/access/AccessControl.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/access/AccessControlEnumerable.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/access/Ownable.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/security/Pausable.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/ERC20.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/Address.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/Context.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/Strings.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/introspection/ERC165.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/introspection/IERC165.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/math/SafeMath.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#3) allows old versions
Pragma version>=0.8.0 (contracts/MateToken.sol#2) allows old versions
Pragma version>=0.8.0 (contracts/TokenVesting.sol#2) allows old versions
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
Low level call in Address.sendValue(address,uint256) (@openzeppelin/contracts/utils/Address.sol#54-59):
- (success) = recipient.call{value: amount}() (@openzeppelin/contracts/utils/Address.sol#57)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts/utils/Address.sol#122-133):
- (success,returndata) = target.call{value: value}(data) (@openzeppelin/contracts/utils/Address.sol#131)
Low level call in Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#151-160):
- (success,returndata) = target.staticcall(data) (@openzeppelin/contracts/utils/Address.sol#158)
Low level call in Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#178-187):
- (success,returndata) = target.delegatecall(data) (@openzeppelin/contracts/utils/Address.sol#185)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
getRoleMember(bytes32,uint256) should be declared external:
- AccessControlEnumerable.getRoleMember(bytes32,uint256) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#44-46)
getRoleMemberCount(bytes32) should be declared external:
- AccessControlEnumerable.getRoleMemberCount(bytes32) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#52-54)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (@openzeppelin/contracts/access/Ownable.sol#53-55)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (@openzeppelin/contracts/access/Ownable.sol#61-64)
name() should be declared external:
- ERC20.name() (@openzeppelin/contracts/token/ERC20/ERC20.sol#60-62)
symbol() should be declared external:
- ERC20.symbol() (@openzeppelin/contracts/token/ERC20/ERC20.sol#68-70)
decimals() should be declared external:
- ERC20.decimals() (@openzeppelin/contracts/token/ERC20/ERC20.sol#85-87)
totalSupply() should be declared external:
- ERC20.totalSupply() (@openzeppelin/contracts/token/ERC20/ERC20.sol#92-94)
balanceOf(address) should be declared external:
- ERC20.balanceOf(address) (@openzeppelin/contracts/token/ERC20/ERC20.sol#99-101)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#111-114)
allowance(address,address) should be declared external:
- ERC20.allowance(address,address) (@openzeppelin/contracts/token/ERC20/ERC20.sol#119-121)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#130-133)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#148-162)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#176-179)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#195-203)
pause() should be declared external:
- ERC20Pausable.pause() (contracts/MateToken.sol#20-26)
unpause() should be declared external:
- ERC20Pausable.unpause() (contracts/MateToken.sol#28-34)
Use the external attribute for functions never called from the contract.
Additional information: link
Token was delisted from CoinGecko
Additional information: link
Unable to find Telegram link on the website
Unable to find Twitter link on the website
Token is not listed at Mobula.Finance
Additional information: link
Unable to find token on CoinHunt
Additional information: link
Unable to find code repository for the project
Token has no active CoinGecko listing / rank
Last post in Twitter was more than 30 days ago
Unable to find Youtube account