SRTToken.swapTokensForLucky(uint256) (#644-663) ignores return value by IERC20(usdt).transferFrom(tokenReceiver,address(this),bal) (#661)
SRTToken.addLiquidity(uint256,uint256) (#665-683) ignores return value by IERC20(usdt).transferFrom(tokenReceiver,address(this),ethAmount) (#669)
SRTToken._takeLucky() (#724-753) ignores return value by IERC20(usdt).transfer(user,award) (#742)
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)
Reentrancy in SRTToken._transfer(address,address,uint256) (#497-598):
External calls:
- swapAndLiquify(v) (#526)
- IERC20(usdt).transferFrom(tokenReceiver,address(this),ethAmount) (#669)
- IERC20(usdt).approve(address(uniswapV2Router),ethAmount) (#671)
- uniswapV2Router.addLiquidity(address(this),usdt,tokenAmount,ethAmount,0,0,holder,block.timestamp) (#673-682)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,tokenReceiver,block.timestamp) (#635-641)
- swapTokensForLucky(v_scope_0) (#532)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,tokenReceiver,block.timestamp) (#652-658)
- IERC20(usdt).transferFrom(tokenReceiver,address(this),bal) (#661)
State variables written after the call(s):
- _luckyPool = 0 (#592)
- _tokenTransfer(from,to,amount,param) (#573)
- _tOwned[to] = _tOwned[to].add(tValue) (#453)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#756)
- _tOwned[recipient] = _tOwned[recipient].add(param.tTransferAmount) (#757)
- inSwapAndLiquify = false (#535)
- _tokenTransfer(from,to,amount,param) (#573)
- lkAmount += param.tLucky (#701)
- _tokenTransfer(from,to,amount,param) (#573)
- lpAmount += param.tLiquidity (#688)
Apply the check-effects-interactions pattern.
Additional information: link
SRTToken._transfer(address,address,uint256).param (#545) 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
TokenReceiver.constructor(address) (#257-259) ignores return value by IERC20(token).approve(msg.sender,10 ** 12 * 10 ** 18) (#258)
SRTToken.addLiquidity(uint256,uint256) (#665-683) ignores return value by IERC20(usdt).approve(address(uniswapV2Router),ethAmount) (#671)
SRTToken.addLiquidity(uint256,uint256) (#665-683) ignores return value by uniswapV2Router.addLiquidity(address(this),usdt,tokenAmount,ethAmount,0,0,holder,block.timestamp) (#673-682)
Ensure that all the return values of the function calls are used.
Additional information: link
SRTToken.allowance(address,address).owner (#409) shadows:
- Ownable.owner() (#157-159) (function)
SRTToken._approve(address,address,uint256).owner (#461) shadows:
- Ownable.owner() (#157-159) (function)
Rename the local variables that shadow another component.
Additional information: link
SRTToken.setMaxTx(uint256,uint256,uint256,uint256) (#365-370) should emit an event for:
- _lpTxAmount = lpTx (#366)
- _lkTxAmount = lkTx (#367)
- _luckyLimit = ll (#368)
SRTToken.setstartSwapTime(uint256) (#376-378) should emit an event for:
- startSwapTime = time (#377)
Emit an event for critical parameter changes.
Additional information: link
SRTToken.constructor(address,address,address,address)._holder (#336) lacks a zero-check on :
- holder = _holder (#338)
SRTToken.constructor(address,address,address,address)._usdt (#335) lacks a zero-check on :
- usdt = _usdt (#339)
SRTToken.constructor(address,address,address,address)._marketAddress (#337) lacks a zero-check on :
- marketAddress = _marketAddress (#340)
SRTToken.constructor(address,address,address,address)._uniswapV2Pair (#346-347) lacks a zero-check on :
- uniswapV2Pair = _uniswapV2Pair (#349)
SRTToken.setpoolAddress(address)._poolAddress (#380) lacks a zero-check on :
- poolAddress = _poolAddress (#381)
Check that the address is not zero.
Additional information: link
Reentrancy in SRTToken._transfer(address,address,uint256) (#497-598):
External calls:
- swapAndLiquify(v) (#526)
- IERC20(usdt).transferFrom(tokenReceiver,address(this),ethAmount) (#669)
- IERC20(usdt).approve(address(uniswapV2Router),ethAmount) (#671)
- uniswapV2Router.addLiquidity(address(this),usdt,tokenAmount,ethAmount,0,0,holder,block.timestamp) (#673-682)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,tokenReceiver,block.timestamp) (#635-641)
State variables written after the call(s):
- lkAmount = 0 (#531)
Reentrancy in SRTToken._transfer(address,address,uint256) (#497-598):
External calls:
- swapAndLiquify(v) (#526)
- IERC20(usdt).transferFrom(tokenReceiver,address(this),ethAmount) (#669)
- IERC20(usdt).approve(address(uniswapV2Router),ethAmount) (#671)
- uniswapV2Router.addLiquidity(address(this),usdt,tokenAmount,ethAmount,0,0,holder,block.timestamp) (#673-682)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,tokenReceiver,block.timestamp) (#635-641)
- swapTokensForLucky(v_scope_0) (#532)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,tokenReceiver,block.timestamp) (#652-658)
- IERC20(usdt).transferFrom(tokenReceiver,address(this),bal) (#661)
State variables written after the call(s):
- swapTokensForLucky(v_scope_0) (#532)
- _allowances[owner][spender] = amount (#465)
- lastLuckyArr.push(to) (#577)
- lastTxArr.push(to) (#576)
- luckyAward = LuckyAward(start,end,v_scope_1,start,v_scope_1,awardPerUser) (#591)
- sellAbleAmounts[from] -= amount (#564)
- _tokenTransfer(from,to,amount,param) (#573)
- sellAbleAmounts[recipient] += param.tTransferAmount (#760)
- sellAbleAmounts[a] += v (#716)
Reentrancy in SRTToken.constructor(address,address,address,address) (#333-359):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),usdt) (#346-347)
State variables written after the call(s):
- _isExcludedFromFee[_holder] = true (#353)
- _isExcludedFromFee[address(this)] = true (#354)
- _owner = msg.sender (#356)
- ammPairs[uniswapV2Pair] = true (#351)
- uniswapV2Pair = _uniswapV2Pair (#349)
Reentrancy in SRTToken.constructor(address,address,address,address) (#333-359):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),usdt) (#346-347)
- tokenReceiver = address(new TokenReceiver(usdt)) (#357)
State variables written after the call(s):
- tokenReceiver = address(new TokenReceiver(usdt)) (#357)
Reentrancy in SRTToken.swapAndLiquify(uint256) (#614-625):
External calls:
- swapTokensForEth(half) (#620)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,tokenReceiver,block.timestamp) (#635-641)
- addLiquidity(otherHalf,newBalance) (#624)
- IERC20(usdt).transferFrom(tokenReceiver,address(this),ethAmount) (#669)
- IERC20(usdt).approve(address(uniswapV2Router),ethAmount) (#671)
- uniswapV2Router.addLiquidity(address(this),usdt,tokenAmount,ethAmount,0,0,holder,block.timestamp) (#673-682)
State variables written after the call(s):
- addLiquidity(otherHalf,newBalance) (#624)
- _allowances[owner][spender] = amount (#465)
Reentrancy in SRTToken.swapTokensForLucky(uint256) (#644-663):
External calls:
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,tokenReceiver,block.timestamp) (#652-658)
- IERC20(usdt).transferFrom(tokenReceiver,address(this),bal) (#661)
State variables written after the call(s):
- _luckyPool += bal (#662)
Reentrancy in SRTToken.transferFrom(address,address,uint256) (#418-422):
External calls:
- _transfer(sender,recipient,amount) (#419)
- IERC20(usdt).transferFrom(tokenReceiver,address(this),ethAmount) (#669)
- IERC20(usdt).approve(address(uniswapV2Router),ethAmount) (#671)
- uniswapV2Router.addLiquidity(address(this),usdt,tokenAmount,ethAmount,0,0,holder,block.timestamp) (#673-682)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,tokenReceiver,block.timestamp) (#635-641)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,tokenReceiver,block.timestamp) (#652-658)
- IERC20(usdt).transferFrom(tokenReceiver,address(this),bal) (#661)
- IERC20(usdt).transfer(user,award) (#742)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#420)
- _allowances[owner][spender] = amount (#465)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in SRTToken._transfer(address,address,uint256) (#497-598):
External calls:
- swapAndLiquify(v) (#526)
- IERC20(usdt).transferFrom(tokenReceiver,address(this),ethAmount) (#669)
- IERC20(usdt).approve(address(uniswapV2Router),ethAmount) (#671)
- uniswapV2Router.addLiquidity(address(this),usdt,tokenAmount,ethAmount,0,0,holder,block.timestamp) (#673-682)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,tokenReceiver,block.timestamp) (#635-641)
- swapTokensForLucky(v_scope_0) (#532)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,tokenReceiver,block.timestamp) (#652-658)
- IERC20(usdt).transferFrom(tokenReceiver,address(this),bal) (#661)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#466)
- swapTokensForLucky(v_scope_0) (#532)
- Transfer(from,to,tValue) (#454)
- _tokenTransfer(from,to,amount,param) (#573)
- Transfer(sender,recipient,param.tTransferAmount) (#762)
- _tokenTransfer(from,to,amount,param) (#573)
Reentrancy in SRTToken.constructor(address,address,address,address) (#333-359):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),usdt) (#346-347)
- tokenReceiver = address(new TokenReceiver(usdt)) (#357)
Event emitted after the call(s):
- Transfer(address(0),_holder,_tTotal) (#358)
Reentrancy in SRTToken.swapAndLiquify(uint256) (#614-625):
External calls:
- swapTokensForEth(half) (#620)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,tokenReceiver,block.timestamp) (#635-641)
- addLiquidity(otherHalf,newBalance) (#624)
- IERC20(usdt).transferFrom(tokenReceiver,address(this),ethAmount) (#669)
- IERC20(usdt).approve(address(uniswapV2Router),ethAmount) (#671)
- uniswapV2Router.addLiquidity(address(this),usdt,tokenAmount,ethAmount,0,0,holder,block.timestamp) (#673-682)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#466)
- addLiquidity(otherHalf,newBalance) (#624)
Reentrancy in SRTToken.transferFrom(address,address,uint256) (#418-422):
External calls:
- _transfer(sender,recipient,amount) (#419)
- IERC20(usdt).transferFrom(tokenReceiver,address(this),ethAmount) (#669)
- IERC20(usdt).approve(address(uniswapV2Router),ethAmount) (#671)
- uniswapV2Router.addLiquidity(address(this),usdt,tokenAmount,ethAmount,0,0,holder,block.timestamp) (#673-682)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,tokenReceiver,block.timestamp) (#635-641)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,tokenReceiver,block.timestamp) (#652-658)
- IERC20(usdt).transferFrom(tokenReceiver,address(this),bal) (#661)
- IERC20(usdt).transfer(user,award) (#742)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#466)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#420)
Apply the check-effects-interactions pattern.
Additional information: link
SRTToken._transfer(address,address,uint256) (#497-598) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= startSwapTime,not start) (#569)
Avoid relying on block.timestamp.
Additional information: link
Address.isContract(address) (#93-98) uses assembly
- INLINE ASM (#96)
Address._functionCallWithValue(address,bytes,uint256,string) (#128-149) uses assembly
- INLINE ASM (#141-144)
SRTToken._isContract(address) (#776-780) uses assembly
- INLINE ASM (#778)
Do not use evm assembly.
Additional information: link
Address._functionCallWithValue(address,bytes,uint256,string) (#128-149) is never used and should be removed
Address.functionCall(address,bytes) (#108-110) is never used and should be removed
Address.functionCall(address,bytes,string) (#113-115) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#118-120) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#123-126) is never used and should be removed
Address.isContract(address) (#93-98) is never used and should be removed
Address.sendValue(address,uint256) (#100-106) is never used and should be removed
Context._msgData() (#85-88) is never used and should be removed
SRTToken._isContract(address) (#776-780) is never used and should be removed
SafeMath.mod(uint256,uint256) (#69-71) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#74-77) is never used and should be removed
SafeMath.mul(uint256,uint256) (#47-54) is never used and should be removed
TransferHelper.safeApprove(address,address,uint256) (#224-228) is never used and should be removed
TransferHelper.safeTransferFrom(address,address,address,uint256) (#236-240) is never used and should be removed
Remove unused functions.
Additional information: link
Low level call in Address.sendValue(address,uint256) (#100-106):
- (success) = recipient.call{value: amount}() (#104)
Low level call in Address._functionCallWithValue(address,bytes,uint256,string) (#128-149):
- (success,returndata) = target.call{value: weiValue}(data) (#132)
Low level call in TransferHelper.safeApprove(address,address,uint256) (#224-228):
- (success,data) = token.call(abi.encodeWithSelector(0x095ea7b3,to,value)) (#226)
Low level call in TransferHelper.safeTransfer(address,address,uint256) (#230-234):
- (success,data) = token.call(abi.encodeWithSelector(0xa9059cbb,to,value)) (#232)
Low level call in TransferHelper.safeTransferFrom(address,address,address,uint256) (#236-240):
- (success,data) = token.call(abi.encodeWithSelector(0x23b872dd,from,to,value)) (#238)
Low level call in TransferHelper.safeTransferETH(address,uint256) (#242-245):
- (success) = to.call{value: value}(new bytes(0)) (#243)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Variable Ownable._owner (#153) is not in mixedCase
Function IUniswapV2Router02.WETH() (#182) is not in mixedCase
Parameter SRTToken.setpoolAddress(address)._poolAddress (#380) is not in mixedCase
Variable SRTToken._liquidityFee (#278) is not in mixedCase
Variable SRTToken._marketFee (#279) is not in mixedCase
Variable SRTToken._burnFee (#282) is not in mixedCase
Variable SRTToken._luckyFee (#283) is not in mixedCase
Variable SRTToken._txFee (#284) is not in mixedCase
Variable SRTToken._luckyPool (#286) is not in mixedCase
Variable SRTToken._luckyLimit (#287) is not in mixedCase
Variable SRTToken._lpTxAmount (#303) is not in mixedCase
Variable SRTToken._lkTxAmount (#304) is not in mixedCase
Variable SRTToken._sellMaxRate (#305) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#86)" inContext (#80-89)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Variable IUniswapV2Router02.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#209) is too similar to IUniswapV2Router02.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#210)
Variable SRTToken._lkTxAmount (#304) is too similar to SRTToken._lpTxAmount (#303)
Prevent variables from having similar names.
Additional information: link
SRTToken.slitherConstructorVariables() (#262-783) uses literals with too many digits:
- _tTotal = 21000000 * 10 ** 9 (#273)
SRTToken.slitherConstructorVariables() (#262-783) uses literals with too many digits:
- _luckyLimit = 200000e18 (#287)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
SRTToken._burnFee (#282) should be constant
SRTToken._decimals (#272) should be constant
SRTToken._liquidityFee (#278) should be constant
SRTToken._luckyFee (#283) should be constant
SRTToken._marketFee (#279) should be constant
SRTToken._name (#275) should be constant
SRTToken._symbol (#276) should be constant
SRTToken._tTotal (#273) should be constant
SRTToken._txFee (#284) should be constant
SRTToken.addLiquidityValue (#306) should be constant
SRTToken.totalFee (#291) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
owner() should be declared external:
- Ownable.owner() (#157-159)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#166-170)
name() should be declared external:
- SRTToken.name() (#384-386)
symbol() should be declared external:
- SRTToken.symbol() (#388-390)
decimals() should be declared external:
- SRTToken.decimals() (#392-394)
totalSupply() should be declared external:
- SRTToken.totalSupply() (#396-398)
transfer(address,uint256) should be declared external:
- SRTToken.transfer(address,uint256) (#404-407)
allowance(address,address) should be declared external:
- SRTToken.allowance(address,address) (#409-411)
approve(address,uint256) should be declared external:
- SRTToken.approve(address,uint256) (#413-416)
transferFrom(address,address,uint256) should be declared external:
- SRTToken.transferFrom(address,address,uint256) (#418-422)
increaseAllowance(address,uint256) should be declared external:
- SRTToken.increaseAllowance(address,uint256) (#424-427)
decreaseAllowance(address,uint256) should be declared external:
- SRTToken.decreaseAllowance(address,uint256) (#429-432)
setBlackList(address,bool) should be declared external:
- SRTToken.setBlackList(address,bool) (#433-435)
isInBlackList(address) should be declared external:
- SRTToken.isInBlackList(address) (#437-439)
excludeFromFee(address) should be declared external:
- SRTToken.excludeFromFee(address) (#441-443)
includeInFee(address) should be declared external:
- SRTToken.includeInFee(address) (#445-448)
isExcludedFromFee(address) should be declared external:
- SRTToken.isExcludedFromFee(address) (#457-459)
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