Reentrancy in CloudTurge._transfer(address,address,uint256) (#360-413):
External calls:
- swapBack() (#400)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiver,block.timestamp) (#457-464)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#445-451)
External calls sending eth:
- swapBack() (#400)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiver,block.timestamp) (#457-464)
- address(marketingWallet).transfer(address(this).balance) (#431)
State variables written after the call(s):
- balances[to] += transferAmount (#411)
- swapping = false (#401)
Apply the check-effects-interactions pattern.
Additional information: link
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Contract ownership is not renounced (belongs to a wallet)
CloudTurge.swapBack() (#416-432) performs a multiplication on the result of a division:
-liquidityTokens = contractBalance * (buyFee.liquidity + sellFee.liquidity) / (buyFee.marketing + buyFee.liquidity + sellFee.marketing + sellFee.liquidity) (#418)
-ethForLiquidity = ethBalance.mul(liquidityTokens).div(totalTokensToSwap) (#428)
Consider ordering multiplication before division.
Additional information: link
CloudTurge._transfer(address,address,uint256).takeFee (#378) 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
CloudTurge.addLiquidity(uint256,uint256) (#454-465) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiver,block.timestamp) (#457-464)
Ensure that all the return values of the function calls are used.
Additional information: link
CloudTurge.allowance(address,address).owner (#250) shadows:
- Ownable.owner() (#97-99) (function)
CloudTurge._approve(address,address,uint256).owner (#314) shadows:
- Ownable.owner() (#97-99) (function)
Rename the local variables that shadow another component.
Additional information: link
CloudTurge.setBuyCooldown(uint256) (#333-335) should emit an event for:
- _buyCooldown = cooldownInSeconds (#334)
CloudTurge.setMaxTx(uint256) (#337-340) should emit an event for:
- _maxTxAmount = _tTotal.mul(newMaxTxPercent).div(10 ** 2) (#339)
CloudTurge.setMaxWallet(uint256) (#342-345) should emit an event for:
- _maxWalletAmount = _tTotal.mul(newMaxWalletPercent).div(10 ** 2) (#344)
CloudTurge.setSwapTokenAtAmountPermille(uint256) (#347-349) should emit an event for:
- swapTokenAtAmount = _tTotal.mul(newSwapTokenAmountPermille).div(10 ** 3) (#348)
Emit an event for critical parameter changes.
Additional information: link
CloudTurge.setLiquidityReceiver(address).newLiqReceiver (#351) lacks a zero-check on :
- liquidityReceiver = newLiqReceiver (#352)
Check that the address is not zero.
Additional information: link
Reentrancy in CloudTurge.constructor() (#203-223):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#213)
State variables written after the call(s):
- _isExcludedFromFee[msg.sender] = true (#219)
- _isExcludedFromFee[address(this)] = true (#220)
- liquidityReceiver = msg.sender (#218)
- uniswapV2Pair = _uniswapV2Pair (#216)
- uniswapV2Router = _uniswapV2Router (#215)
Reentrancy in CloudTurge.swapBack() (#416-432):
External calls:
- swapTokensForEth(amountToSwapForETH) (#425)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#445-451)
- addLiquidity(tokensForLiquidity,ethForLiquidity) (#430)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiver,block.timestamp) (#457-464)
External calls sending eth:
- addLiquidity(tokensForLiquidity,ethForLiquidity) (#430)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiver,block.timestamp) (#457-464)
State variables written after the call(s):
- addLiquidity(tokensForLiquidity,ethForLiquidity) (#430)
- _allowances[owner][spender] = amount (#318)
Reentrancy in CloudTurge.transferFrom(address,address,uint256) (#259-263):
External calls:
- _transfer(sender,recipient,amount) (#260)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiver,block.timestamp) (#457-464)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#445-451)
External calls sending eth:
- _transfer(sender,recipient,amount) (#260)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiver,block.timestamp) (#457-464)
- address(marketingWallet).transfer(address(this).balance) (#431)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()] - amount) (#261)
- _allowances[owner][spender] = amount (#318)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in CloudTurge._transfer(address,address,uint256) (#360-413):
External calls:
- swapBack() (#400)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiver,block.timestamp) (#457-464)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#445-451)
External calls sending eth:
- swapBack() (#400)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiver,block.timestamp) (#457-464)
- address(marketingWallet).transfer(address(this).balance) (#431)
Event emitted after the call(s):
- Transfer(from,to,transferAmount) (#412)
Reentrancy in CloudTurge.constructor() (#203-223):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#213)
Event emitted after the call(s):
- Transfer(address(0),_msgSender(),_tTotal) (#222)
Reentrancy in CloudTurge.swapBack() (#416-432):
External calls:
- swapTokensForEth(amountToSwapForETH) (#425)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#445-451)
- addLiquidity(tokensForLiquidity,ethForLiquidity) (#430)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiver,block.timestamp) (#457-464)
External calls sending eth:
- addLiquidity(tokensForLiquidity,ethForLiquidity) (#430)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiver,block.timestamp) (#457-464)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#319)
- addLiquidity(tokensForLiquidity,ethForLiquidity) (#430)
Reentrancy in CloudTurge.transferFrom(address,address,uint256) (#259-263):
External calls:
- _transfer(sender,recipient,amount) (#260)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiver,block.timestamp) (#457-464)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#445-451)
External calls sending eth:
- _transfer(sender,recipient,amount) (#260)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiver,block.timestamp) (#457-464)
- address(marketingWallet).transfer(address(this).balance) (#431)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#319)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()] - amount) (#261)
Apply the check-effects-interactions pattern.
Additional information: link
CloudTurge._transfer(address,address,uint256) (#360-413) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(_lastBuy[to] + _buyCooldown < block.timestamp,Must wait til after coooldown to buy) (#389)
Avoid relying on block.timestamp.
Additional information: link
Context._msgData() (#80-83) is never used and should be removed
SafeMath.add(uint256,uint256) (#24-29) is never used and should be removed
SafeMath.mod(uint256,uint256) (#65-67) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#69-72) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.13 (#9) 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
Function IUniswapV2Router02.WETH() (#126) is not in mixedCase
Function CloudTurge.Purge() (#285-290) is not in mixedCase
Constant CloudTurge._name (#164) is not in UPPER_CASE_WITH_UNDERSCORES
Constant CloudTurge._symbol (#165) is not in UPPER_CASE_WITH_UNDERSCORES
Constant CloudTurge._decimals (#166) is not in UPPER_CASE_WITH_UNDERSCORES
Variable CloudTurge._maxWalletAmount (#169) is not in mixedCase
Variable CloudTurge._maxTxAmount (#170) is not in mixedCase
Variable CloudTurge._buyCooldown (#192) is not in mixedCase
Variable CloudTurge.Blacklisted (#194) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#81)" inContext (#75-84)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Reentrancy in CloudTurge._transfer(address,address,uint256) (#360-413):
External calls:
- swapBack() (#400)
- address(marketingWallet).transfer(address(this).balance) (#431)
External calls sending eth:
- swapBack() (#400)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiver,block.timestamp) (#457-464)
- address(marketingWallet).transfer(address(this).balance) (#431)
State variables written after the call(s):
- balances[to] += transferAmount (#411)
- swapping = false (#401)
Event emitted after the call(s):
- Transfer(from,to,transferAmount) (#412)
Reentrancy in CloudTurge.transferFrom(address,address,uint256) (#259-263):
External calls:
- _transfer(sender,recipient,amount) (#260)
- address(marketingWallet).transfer(address(this).balance) (#431)
External calls sending eth:
- _transfer(sender,recipient,amount) (#260)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiver,block.timestamp) (#457-464)
- address(marketingWallet).transfer(address(this).balance) (#431)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()] - amount) (#261)
- _allowances[owner][spender] = amount (#318)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#319)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()] - amount) (#261)
Apply the check-effects-interactions pattern.
Additional information: link
CloudTurge.slitherConstructorVariables() (#154-467) uses literals with too many digits:
- _tTotal = 1000000 * 10 ** _decimals (#167)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
CloudTurge.liquidityFee (#189) is never used in CloudTurge (#154-467)
CloudTurge.marketingFee (#190) is never used in CloudTurge (#154-467)
Remove unused state variables.
Additional information: link
CloudTurge._tTotal (#167) should be constant
CloudTurge.liquidityFee (#189) should be constant
CloudTurge.marketingFee (#190) should be constant
CloudTurge.marketingWallet (#174) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#106-109)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#111-115)
name() should be declared external:
- CloudTurge.name() (#225-227)
symbol() should be declared external:
- CloudTurge.symbol() (#229-231)
decimals() should be declared external:
- CloudTurge.decimals() (#233-235)
totalSupply() should be declared external:
- CloudTurge.totalSupply() (#237-239)
transfer(address,uint256) should be declared external:
- CloudTurge.transfer(address,uint256) (#245-248)
allowance(address,address) should be declared external:
- CloudTurge.allowance(address,address) (#250-252)
approve(address,uint256) should be declared external:
- CloudTurge.approve(address,uint256) (#254-257)
transferFrom(address,address,uint256) should be declared external:
- CloudTurge.transferFrom(address,address,uint256) (#259-263)
increaseAllowance(address,uint256) should be declared external:
- CloudTurge.increaseAllowance(address,uint256) (#265-268)
decreaseAllowance(address,uint256) should be declared external:
- CloudTurge.decreaseAllowance(address,uint256) (#270-273)
excludeFromFee(address) should be declared external:
- CloudTurge.excludeFromFee(address) (#275-277)
includeInFee(address) should be declared external:
- CloudTurge.includeInFee(address) (#279-281)
Purge() should be declared external:
- CloudTurge.Purge() (#285-290)
isExcludedFromFee(address) should be declared external:
- CloudTurge.isExcludedFromFee(address) (#310-312)
setBuyFees(uint256,uint256) should be declared external:
- CloudTurge.setBuyFees(uint256,uint256) (#322-325)
setSellMultiplier(uint256,uint256) should be declared external:
- CloudTurge.setSellMultiplier(uint256,uint256) (#327-331)
setBuyCooldown(uint256) should be declared external:
- CloudTurge.setBuyCooldown(uint256) (#333-335)
setMaxTx(uint256) should be declared external:
- CloudTurge.setMaxTx(uint256) (#337-340)
setMaxWallet(uint256) should be declared external:
- CloudTurge.setMaxWallet(uint256) (#342-345)
setSwapTokenAtAmountPermille(uint256) should be declared external:
- CloudTurge.setSwapTokenAtAmountPermille(uint256) (#347-349)
setLiquidityReceiver(address) should be declared external:
- CloudTurge.setLiquidityReceiver(address) (#351-354)
clearStuckBNB(address) should be declared external:
- CloudTurge.clearStuckBNB(address) (#356-358)
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