Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
ERC20Votes._writeCheckpoint(ERC20Votes.Checkpoint[],function(uint256,uint256) returns(uint256),uint256) (@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol#236-250) uses a dangerous strict equality:
- pos > 0 && ckpts[pos - 1].fromBlock == block.number (@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol#245)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
ERC20Votes._moveVotingPower(address,address,uint256).newWeight_scope_1 (@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol#230) is a local variable never initialized
ERC20Votes._moveVotingPower(address,address,uint256).oldWeight_scope_0 (@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol#230) is a local variable never initialized
Initialize all the variables. If a variable is meant to be initialized to zero, explicitly set it to zero to improve code readability.
Additional information: link
AccessControlEnumerable.grantRole(bytes32,address) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#51-54) ignores return value by _roleMembers[role].add(account) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#53)
AccessControlEnumerable.revokeRole(bytes32,address) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#59-62) ignores return value by _roleMembers[role].remove(account) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#61)
AccessControlEnumerable.renounceRole(bytes32,address) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#67-70) ignores return value by _roleMembers[role].remove(account) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#69)
AccessControlEnumerable._setupRole(bytes32,address) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#75-78) ignores return value by _roleMembers[role].add(account) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#77)
Ensure that all the return values of the function calls are used.
Additional information: link
ERC20Permit.constructor(string).name (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#35) shadows:
- ERC20.name() (@openzeppelin/contracts/token/ERC20/ERC20.sol#61-63) (function)
- IERC20Metadata.name() (@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol#16) (function)
TimeLockNonTransferablePool.constructor(string,string,address,address,address,uint256,uint256,uint256,uint256)._name (contracts/TimeLockNonTransferablePool.sol#8) shadows:
- ERC20._name (@openzeppelin/contracts/token/ERC20/ERC20.sol#41) (state variable)
TimeLockNonTransferablePool.constructor(string,string,address,address,address,uint256,uint256,uint256,uint256)._symbol (contracts/TimeLockNonTransferablePool.sol#9) shadows:
- ERC20._symbol (@openzeppelin/contracts/token/ERC20/ERC20.sol#42) (state variable)
TimeLockPool.constructor(string,string,address,address,address,uint256,uint256,uint256,uint256)._name (contracts/TimeLockPool.sol#31) shadows:
- ERC20._name (@openzeppelin/contracts/token/ERC20/ERC20.sol#41) (state variable)
TimeLockPool.constructor(string,string,address,address,address,uint256,uint256,uint256,uint256)._symbol (contracts/TimeLockPool.sol#32) shadows:
- ERC20._symbol (@openzeppelin/contracts/token/ERC20/ERC20.sol#42) (state variable)
BasePool.constructor(string,string,address,address,address,uint256,uint256)._name (contracts/base/BasePool.sol#29) shadows:
- ERC20._name (@openzeppelin/contracts/token/ERC20/ERC20.sol#41) (state variable)
BasePool.constructor(string,string,address,address,address,uint256,uint256)._symbol (contracts/base/BasePool.sol#30) shadows:
- ERC20._symbol (@openzeppelin/contracts/token/ERC20/ERC20.sol#42) (state variable)
Rename the local variables that shadow another component.
Additional information: link
Variable 'ERC20Votes._moveVotingPower(address,address,uint256).newWeight (@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol#225)' in ERC20Votes._moveVotingPower(address,address,uint256) (@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol#218-234) potentially used before declaration: (oldWeight,newWeight) = _writeCheckpoint(_checkpoints[dst],_add,amount) (@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol#230)
Variable 'ERC20Votes._moveVotingPower(address,address,uint256).oldWeight (@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol#225)' in ERC20Votes._moveVotingPower(address,address,uint256) (@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol#218-234) potentially used before declaration: (oldWeight,newWeight) = _writeCheckpoint(_checkpoints[dst],_add,amount) (@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol#230)
Variable 'ECDSA.tryRecover(bytes32,bytes).r (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#59)' in ECDSA.tryRecover(bytes32,bytes) (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#54-83) potentially used before declaration: r = mload(uint256)(signature + 0x20) (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#76)
Move all variable declarations prior to any usage of the variable, and ensure that reaching a variable declaration does not depend on some conditional if it is used unconditionally.
Additional information: link
Reentrancy in TimeLockPool.constructor(string,string,address,address,address,uint256,uint256,uint256,uint256) (contracts/TimeLockPool.sol#30-44):
External calls:
- BasePool(_name,_symbol,_depositToken,_rewardToken,_escrowPool,_escrowPortion,_escrowDuration) (contracts/TimeLockPool.sol#40)
- returndata = address(token).functionCall(data,SafeERC20: low-level call failed) (@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#92)
- (success,returndata) = target.call{value: value}(data) (@openzeppelin/contracts/utils/Address.sol#131)
- IERC20(_rewardToken).safeApprove(_escrowPool,type()(uint256).max) (contracts/base/BasePool.sol#47)
External calls sending eth:
- BasePool(_name,_symbol,_depositToken,_rewardToken,_escrowPool,_escrowPortion,_escrowDuration) (contracts/TimeLockPool.sol#40)
- (success,returndata) = target.call{value: value}(data) (@openzeppelin/contracts/utils/Address.sol#131)
State variables written after the call(s):
- maxBonus = _maxBonus (contracts/TimeLockPool.sol#42)
- maxLockDuration = _maxLockDuration (contracts/TimeLockPool.sol#43)
Reentrancy in TimeLockPool.deposit(uint256,uint256,address) (contracts/TimeLockPool.sol#46-65):
External calls:
- depositToken.safeTransferFrom(_msgSender(),address(this),_amount) (contracts/TimeLockPool.sol#53)
State variables written after the call(s):
- _mint(_receiver,mintAmount) (contracts/TimeLockPool.sol#63)
- _balances[account] += amount (@openzeppelin/contracts/token/ERC20/ERC20.sol#257)
- _mint(_receiver,mintAmount) (contracts/TimeLockPool.sol#63)
- _totalSupply += amount (@openzeppelin/contracts/token/ERC20/ERC20.sol#256)
- depositsOf[_receiver].push(Deposit(_amount,uint64(block.timestamp),uint64(block.timestamp) + uint64(duration))) (contracts/TimeLockPool.sol#55-59)
- _mint(_receiver,mintAmount) (contracts/TimeLockPool.sol#63)
- pointsCorrection[_account] = pointsCorrection[_account] + (_shares * (int256(pointsPerShare))) (contracts/base/AbstractRewards.sol#121)
Reentrancy in BasePool.distributeRewards(uint256) (contracts/base/BasePool.sol#66-69):
External calls:
- rewardToken.safeTransferFrom(_msgSender(),address(this),_amount) (contracts/base/BasePool.sol#67)
State variables written after the call(s):
- _distributeRewards(_amount) (contracts/base/BasePool.sol#68)
- pointsPerShare = pointsPerShare + (_amount * POINTS_MULTIPLIER / shares) (contracts/base/AbstractRewards.sol#91)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in BasePool.claimRewards(address) (contracts/base/BasePool.sol#71-86):
External calls:
- escrowPool.deposit(escrowedRewardAmount,escrowDuration,_receiver) (contracts/base/BasePool.sol#77)
- rewardToken.safeTransfer(_receiver,nonEscrowedRewardAmount) (contracts/base/BasePool.sol#82)
Event emitted after the call(s):
- RewardsClaimed(_msgSender(),_receiver,escrowedRewardAmount,nonEscrowedRewardAmount) (contracts/base/BasePool.sol#85)
Reentrancy in TimeLockPool.deposit(uint256,uint256,address) (contracts/TimeLockPool.sol#46-65):
External calls:
- depositToken.safeTransferFrom(_msgSender(),address(this),_amount) (contracts/TimeLockPool.sol#53)
Event emitted after the call(s):
- DelegateVotesChanged(src,oldWeight,newWeight) (@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol#226)
- _mint(_receiver,mintAmount) (contracts/TimeLockPool.sol#63)
- DelegateVotesChanged(dst,oldWeight_scope_0,newWeight_scope_1) (@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol#231)
- _mint(_receiver,mintAmount) (contracts/TimeLockPool.sol#63)
- Deposited(_amount,duration,_receiver,_msgSender()) (contracts/TimeLockPool.sol#64)
- Transfer(address(0),account,amount) (@openzeppelin/contracts/token/ERC20/ERC20.sol#258)
- _mint(_receiver,mintAmount) (contracts/TimeLockPool.sol#63)
Reentrancy in BasePool.distributeRewards(uint256) (contracts/base/BasePool.sol#66-69):
External calls:
- rewardToken.safeTransferFrom(_msgSender(),address(this),_amount) (contracts/base/BasePool.sol#67)
Event emitted after the call(s):
- RewardsDistributed(msg.sender,_amount) (contracts/base/AbstractRewards.sol#92)
- _distributeRewards(_amount) (contracts/base/BasePool.sol#68)
Reentrancy in TokenSaver.saveToken(address,address,uint256) (contracts/base/TokenSaver.sol#24-27):
External calls:
- IERC20(_token).safeTransfer(_receiver,_amount) (contracts/base/TokenSaver.sol#25)
Event emitted after the call(s):
- TokenSaved(_msgSender(),_receiver,_token,_amount) (contracts/base/TokenSaver.sol#26)
Reentrancy in TimeLockPool.withdraw(uint256,address) (contracts/TimeLockPool.sol#67-85):
External calls:
- depositToken.safeTransfer(_receiver,userDeposit.amount) (contracts/TimeLockPool.sol#83)
Event emitted after the call(s):
- Withdrawn(_depositId,_receiver,_msgSender(),userDeposit.amount) (contracts/TimeLockPool.sol#84)
Apply the check-effects-interactions pattern.
Additional information: link
ERC20Votes.delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32) (@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol#143-160) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp <= expiry,ERC20Votes: signature expired) (@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol#151)
ERC20Permit.permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#40-59) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp <= deadline,ERC20Permit: expired deadline) (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#49)
TimeLockPool.withdraw(uint256,address) (contracts/TimeLockPool.sol#67-85) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= userDeposit.end,TimeLockPool.withdraw: too soon) (contracts/TimeLockPool.sol#70)
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#195-215) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/Address.sol#207-210)
ECDSA.tryRecover(bytes32,bytes) (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#54-83) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#64-68)
- INLINE ASM (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#75-78)
ECDSA.tryRecover(bytes32,bytes32,bytes32) (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#112-124) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#119-122)
EnumerableSet.values(EnumerableSet.AddressSet) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#273-282) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#277-279)
EnumerableSet.values(EnumerableSet.UintSet) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#346-355) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#350-352)
Do not use evm assembly.
Additional information: link
Different versions of Solidity is used:
- Version used: ['^0.8.0', '^0.8.11']
- ^0.8.0 (@openzeppelin/contracts/access/AccessControl.sol#3)
- ^0.8.0 (@openzeppelin/contracts/access/AccessControlEnumerable.sol#3)
- ^0.8.0 (@openzeppelin/contracts/access/IAccessControl.sol#3)
- ^0.8.0 (@openzeppelin/contracts/access/IAccessControlEnumerable.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/ERC20Votes.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.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/Counters.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/Strings.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/cryptography/draft-EIP712.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/Math.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/math/SafeCast.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#3)
- ^0.8.11 (contracts/TimeLockNonTransferablePool.sol#2)
- ^0.8.11 (contracts/TimeLockPool.sol#2)
- ^0.8.11 (contracts/base/AbstractRewards.sol#2)
- ^0.8.11 (contracts/base/BasePool.sol#2)
- ^0.8.11 (contracts/base/TokenSaver.sol#2)
- ^0.8.11 (contracts/interfaces/IAbstractRewards.sol#2)
- ^0.8.11 (contracts/interfaces/IBasePool.sol#2)
- ^0.8.11 (contracts/interfaces/ITimeLockPool.sol#2)
Use one Solidity version.
Additional information: link
AbstractRewards._correctPointsForTransfer(address,address,uint256) (contracts/base/AbstractRewards.sol#110-114) is never used and should be removed
AccessControl._setRoleAdmin(bytes32,bytes32) (@openzeppelin/contracts/access/AccessControl.sol#191-195) 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
BasePool._transfer(address,address,uint256) (contracts/base/BasePool.sol#61-64) is never used and should be removed
Context._msgData() (@openzeppelin/contracts/utils/Context.sol#20-22) is never used and should be removed
Counters.decrement(Counters.Counter) (@openzeppelin/contracts/utils/Counters.sol#31-37) is never used and should be removed
Counters.reset(Counters.Counter) (@openzeppelin/contracts/utils/Counters.sol#39-41) is never used and should be removed
ECDSA.recover(bytes32,bytes) (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#99-103) is never used and should be removed
ECDSA.recover(bytes32,bytes32,bytes32) (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#131-139) is never used and should be removed
ECDSA.toEthSignedMessageHash(bytes32) (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#201-205) is never used and should be removed
ECDSA.tryRecover(bytes32,bytes) (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#54-83) is never used and should be removed
ECDSA.tryRecover(bytes32,bytes32,bytes32) (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#112-124) is never used and should be removed
ERC20._transfer(address,address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#220-240) is never used and should be removed
ERC20Votes._add(uint256,uint256) (@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol#252-254) is never used and should be removed
ERC20Votes._subtract(uint256,uint256) (@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol#256-258) is never used and should be removed
EnumerableSet._values(EnumerableSet.Set) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#141-143) is never used and should be removed
EnumerableSet.add(EnumerableSet.Bytes32Set,bytes32) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#157-159) is never used and should be removed
EnumerableSet.add(EnumerableSet.UintSet,uint256) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#296-298) is never used and should be removed
EnumerableSet.at(EnumerableSet.Bytes32Set,uint256) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#195-197) is never used and should be removed
EnumerableSet.at(EnumerableSet.UintSet,uint256) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#334-336) is never used and should be removed
EnumerableSet.contains(EnumerableSet.AddressSet,address) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#240-242) is never used and should be removed
EnumerableSet.contains(EnumerableSet.Bytes32Set,bytes32) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#174-176) is never used and should be removed
EnumerableSet.contains(EnumerableSet.UintSet,uint256) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#313-315) is never used and should be removed
EnumerableSet.length(EnumerableSet.Bytes32Set) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#181-183) is never used and should be removed
EnumerableSet.length(EnumerableSet.UintSet) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#320-322) is never used and should be removed
EnumerableSet.remove(EnumerableSet.Bytes32Set,bytes32) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#167-169) is never used and should be removed
EnumerableSet.remove(EnumerableSet.UintSet,uint256) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#306-308) is never used and should be removed
EnumerableSet.values(EnumerableSet.AddressSet) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#273-282) is never used and should be removed
EnumerableSet.values(EnumerableSet.Bytes32Set) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#207-209) is never used and should be removed
EnumerableSet.values(EnumerableSet.UintSet) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#346-355) is never used and should be removed
Math.ceilDiv(uint256,uint256) (@openzeppelin/contracts/utils/math/Math.sol#38-41) is never used and should be removed
SafeCast.toInt128(int256) (@openzeppelin/contracts/utils/math/SafeCast.sol#151-154) is never used and should be removed
SafeCast.toInt16(int256) (@openzeppelin/contracts/utils/math/SafeCast.sol#205-208) is never used and should be removed
SafeCast.toInt32(int256) (@openzeppelin/contracts/utils/math/SafeCast.sol#187-190) is never used and should be removed
SafeCast.toInt64(int256) (@openzeppelin/contracts/utils/math/SafeCast.sol#169-172) is never used and should be removed
SafeCast.toInt8(int256) (@openzeppelin/contracts/utils/math/SafeCast.sol#223-226) is never used and should be removed
SafeCast.toUint128(uint256) (@openzeppelin/contracts/utils/math/SafeCast.sol#46-49) is never used and should be removed
SafeCast.toUint16(uint256) (@openzeppelin/contracts/utils/math/SafeCast.sol#106-109) is never used and should be removed
SafeCast.toUint64(uint256) (@openzeppelin/contracts/utils/math/SafeCast.sol#76-79) is never used and should be removed
SafeCast.toUint8(uint256) (@openzeppelin/contracts/utils/math/SafeCast.sol#121-124) is never used and should be removed
SafeCast.toUint96(uint256) (@openzeppelin/contracts/utils/math/SafeCast.sol#61-64) 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
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/IAccessControl.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/access/IAccessControlEnumerable.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/ERC20Votes.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/extensions/draft-ERC20Permit.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.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/Counters.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/cryptography/ECDSA.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/cryptography/draft-EIP712.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/Math.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/math/SafeCast.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#3) allows old versions
Pragma version^0.8.11 (contracts/TimeLockNonTransferablePool.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
Pragma version^0.8.11 (contracts/TimeLockPool.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
Pragma version^0.8.11 (contracts/base/AbstractRewards.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
Pragma version^0.8.11 (contracts/base/BasePool.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
Pragma version^0.8.11 (contracts/base/TokenSaver.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
Pragma version^0.8.11 (contracts/interfaces/IAbstractRewards.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
Pragma version^0.8.11 (contracts/interfaces/IBasePool.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
Pragma version^0.8.11 (contracts/interfaces/ITimeLockPool.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.11 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
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
Function ERC20Permit.DOMAIN_SEPARATOR() (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#72-74) is not in mixedCase
Variable ERC20Permit._PERMIT_TYPEHASH (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#27-28) is not in mixedCase
Function IERC20Permit.DOMAIN_SEPARATOR() (@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol#58) is not in mixedCase
Variable EIP712._CACHED_DOMAIN_SEPARATOR (@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol#30) is not in mixedCase
Variable EIP712._CACHED_CHAIN_ID (@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol#31) is not in mixedCase
Variable EIP712._HASHED_NAME (@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol#33) is not in mixedCase
Variable EIP712._HASHED_VERSION (@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol#34) is not in mixedCase
Variable EIP712._TYPE_HASH (@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol#35) is not in mixedCase
Parameter TimeLockPool.deposit(uint256,uint256,address)._amount (contracts/TimeLockPool.sol#46) is not in mixedCase
Parameter TimeLockPool.deposit(uint256,uint256,address)._duration (contracts/TimeLockPool.sol#46) is not in mixedCase
Parameter TimeLockPool.deposit(uint256,uint256,address)._receiver (contracts/TimeLockPool.sol#46) is not in mixedCase
Parameter TimeLockPool.withdraw(uint256,address)._depositId (contracts/TimeLockPool.sol#67) is not in mixedCase
Parameter TimeLockPool.withdraw(uint256,address)._receiver (contracts/TimeLockPool.sol#67) is not in mixedCase
Parameter TimeLockPool.getMultiplier(uint256)._lockDuration (contracts/TimeLockPool.sol#87) is not in mixedCase
Parameter TimeLockPool.getTotalDeposit(address)._account (contracts/TimeLockPool.sol#91) is not in mixedCase
Parameter TimeLockPool.getDepositsOf(address)._account (contracts/TimeLockPool.sol#99) is not in mixedCase
Parameter TimeLockPool.getDepositsOfLength(address)._account (contracts/TimeLockPool.sol#103) is not in mixedCase
Parameter AbstractRewards.withdrawableRewardsOf(address)._account (contracts/base/AbstractRewards.sol#50) is not in mixedCase
Parameter AbstractRewards.withdrawnRewardsOf(address)._account (contracts/base/AbstractRewards.sol#59) is not in mixedCase
Parameter AbstractRewards.cumulativeRewardsOf(address)._account (contracts/base/AbstractRewards.sol#70) is not in mixedCase
Parameter BasePool.distributeRewards(uint256)._amount (contracts/base/BasePool.sol#66) is not in mixedCase
Parameter BasePool.claimRewards(address)._receiver (contracts/base/BasePool.sol#71) is not in mixedCase
Parameter TokenSaver.saveToken(address,address,uint256)._token (contracts/base/TokenSaver.sol#24) is not in mixedCase
Parameter TokenSaver.saveToken(address,address,uint256)._receiver (contracts/base/TokenSaver.sol#24) is not in mixedCase
Parameter TokenSaver.saveToken(address,address,uint256)._amount (contracts/base/TokenSaver.sol#24) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
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