Tri.governanceRecoverUnsupported(IERC20,uint256,address) (#895-901) ignores return value by _token.transfer(_to,_amount) (#900)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Contract ownership is not renounced (belongs to a wallet)
Tri.init(uint256,address,address) (#828-841) should emit an event for:
- endTime = startTime + VESTING_DURATION (#832)
- communityFundLastClaimed = startTime (#834)
- devFundLastClaimed = startTime (#835)
Emit an event for critical parameter changes.
Additional information: link
Tri.setTreasuryFund(address)._communityFund (#843) lacks a zero-check on :
- communityFund = _communityFund (#844)
Tri.setDevFund(address)._devFund (#847) lacks a zero-check on :
- devFund = _devFund (#848)
Check that the address is not zero.
Additional information: link
Tri.init(uint256,address,address) (#828-841) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp < _startTime,late) (#830)
Tri.unclaimedTreasuryFund() (#851-856) uses timestamp for comparisons
Dangerous comparisons:
- _now > endTime (#853)
- communityFundLastClaimed >= _now (#854)
Tri.unclaimedDevFund() (#858-863) uses timestamp for comparisons
Dangerous comparisons:
- _now > endTime (#860)
- devFundLastClaimed >= _now (#861)
Avoid relying on block.timestamp.
Additional information: link
Different versions of Solidity is used:
- Version used: ['0.6.12', '>=0.6.0<0.8.0']
- >=0.6.0<0.8.0 (#5)
- >=0.6.0<0.8.0 (#221)
- >=0.6.0<0.8.0 (#247)
- >=0.6.0<0.8.0 (#326)
- >=0.6.0<0.8.0 (#633)
- >=0.6.0<0.8.0 (#676)
- >=0.6.0<0.8.0 (#681)
- 0.6.12 (#750)
- 0.6.12 (#791)
Use one Solidity version.
Additional information: link
Context._msgData() (#238-241) is never used and should be removed
ERC20._setupDecimals(uint8) (#609-611) is never used and should be removed
SafeMath.div(uint256,uint256,string) (#192-195) is never used and should be removed
SafeMath.mod(uint256,uint256) (#154-157) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#212-215) is never used and should be removed
SafeMath.tryAdd(uint256,uint256) (#26-30) is never used and should be removed
SafeMath.tryDiv(uint256,uint256) (#62-65) is never used and should be removed
SafeMath.tryMod(uint256,uint256) (#72-75) is never used and should be removed
SafeMath.tryMul(uint256,uint256) (#47-55) is never used and should be removed
SafeMath.trySub(uint256,uint256) (#37-40) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version>=0.6.0<0.8.0 (#5) is too complex
Pragma version>=0.6.0<0.8.0 (#221) is too complex
Pragma version>=0.6.0<0.8.0 (#247) is too complex
Pragma version>=0.6.0<0.8.0 (#326) is too complex
Pragma version>=0.6.0<0.8.0 (#633) is too complex
Pragma version>=0.6.0<0.8.0 (#676) is too complex
Pragma version>=0.6.0<0.8.0 (#681) is too complex
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
Parameter Tri.init(uint256,address,address)._startTime (#828) is not in mixedCase
Parameter Tri.init(uint256,address,address)._communityFund (#828) is not in mixedCase
Parameter Tri.init(uint256,address,address)._devFund (#828) is not in mixedCase
Parameter Tri.setTreasuryFund(address)._communityFund (#843) is not in mixedCase
Parameter Tri.setDevFund(address)._devFund (#847) is not in mixedCase
Parameter Tri.distributeReward(address)._farmingIncentiveFund (#884) is not in mixedCase
Parameter Tri.governanceRecoverUnsupported(IERC20,uint256,address)._token (#896) is not in mixedCase
Parameter Tri.governanceRecoverUnsupported(IERC20,uint256,address)._amount (#897) is not in mixedCase
Parameter Tri.governanceRecoverUnsupported(IERC20,uint256,address)._to (#898) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#239)" inContext (#233-242)
Remove redundant statements if they congest code but offer no value.
Additional information: link
name() should be declared external:
- ERC20.name() (#386-388)
symbol() should be declared external:
- ERC20.symbol() (#394-396)
decimals() should be declared external:
- ERC20.decimals() (#411-413)
totalSupply() should be declared external:
- ERC20.totalSupply() (#418-420)
balanceOf(address) should be declared external:
- ERC20.balanceOf(address) (#425-427)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (#437-440)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (#456-459)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (#474-478)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (#492-495)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (#511-514)
burnFrom(address,uint256) should be declared external:
- ERC20Burnable.burnFrom(address,uint256) (#665-670)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#731-734)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#740-744)
operator() should be declared external:
- Operator.operator() (#764-766)
isOperator() should be declared external:
- Operator.isOperator() (#773-775)
transferOperator(address) should be declared external:
- Operator.transferOperator(address) (#777-779)
Use the external attribute for functions never called from the contract.
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