Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Reentrancy in token._transfer(address,address,uint256) (#1130-1184):
External calls:
- swapEthForTokens(halfNumber) (#1152)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: tokenAmount}(0,path,burnAddress,block.timestamp.add(15)) (#1233-1238)
- swapAndLiquify(contractTokenBalance) (#1171)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1216-1222)
External calls sending eth:
- address(uint160(devAddress)).transfer(devNumber) (#1151)
- swapEthForTokens(halfNumber) (#1152)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: tokenAmount}(0,path,burnAddress,block.timestamp.add(15)) (#1233-1238)
- swapAndLiquify(contractTokenBalance) (#1171)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
- address(uint160(devAddress)).transfer(newBalance.mul(2).div(9)) (#1202)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _rOwned[burnAddress] = _rOwned[burnAddress].add(rBurn) (#954)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#1069)
- _rOwned[address(this)] = _rOwned[address(this)].add(rDev) (#963)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#898)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#899)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _rTotal = _rTotal.sub(rFee) (#1013)
Apply the check-effects-interactions pattern.
Additional information: link
Ownable.unlock() (#450-455) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(now > _lockTime,Contract is locked until 7 days) (#452)
token._transfer(address,address,uint256) (#1130-1184) uses timestamp for comparisons
Dangerous comparisons:
- from != ownerAddres && to != ownerAddres && block.timestamp < startTime.add(30 * 60) (#1138)
- newEthBalance >= 10 ** 18 && block.timestamp >= startTime.add(30 * 60) (#1148)
Avoid relying on block.timestamp.
Additional information: link
PancakeLibrary.getAmountsOut(address,uint256,address[]).i (#734) 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
token.addLiquidity(uint256,uint256) (#870-883) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
Ensure that all the return values of the function calls are used.
Additional information: link
token.allowance(address,address).owner (#866) shadows:
- Ownable.owner() (#403-405) (function)
token._approve(address,address,uint256).owner (#1122) shadows:
- Ownable.owner() (#403-405) (function)
Rename the local variables that shadow another component.
Additional information: link
token.setTaxFeePercent(uint256) (#975-977) should emit an event for:
- _taxFee = taxFee (#976)
token.setLiquidityFeePercent(uint256) (#979-981) should emit an event for:
- _liquidityFee = liquidityFee (#980)
token.setBurnFeePercent(uint256) (#983-985) should emit an event for:
- _burnFee = burnFee (#984)
token.setNumTokenPercent(uint256) (#987-989) should emit an event for:
- numTokensSellToAddToLiquidity = numToken (#988)
token.setDevFeePercent(uint256) (#991-993) should emit an event for:
- _devFee = devFee (#992)
token.setMaxTxPercent(uint256) (#995-997) should emit an event for:
- _maxTxAmount = maxTxPercent (#996)
Emit an event for critical parameter changes.
Additional information: link
Reentrancy in token._transfer(address,address,uint256) (#1130-1184):
External calls:
- swapEthForTokens(halfNumber) (#1152)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: tokenAmount}(0,path,burnAddress,block.timestamp.add(15)) (#1233-1238)
- swapAndLiquify(contractTokenBalance) (#1171)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1216-1222)
External calls sending eth:
- address(uint160(devAddress)).transfer(devNumber) (#1151)
- swapEthForTokens(halfNumber) (#1152)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: tokenAmount}(0,path,burnAddress,block.timestamp.add(15)) (#1233-1238)
- swapAndLiquify(contractTokenBalance) (#1171)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
- address(uint160(devAddress)).transfer(newBalance.mul(2).div(9)) (#1202)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _burnFee = _previousBurnFee (#1114)
- _burnFee = 0 (#1107)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _devFee = _previousDevFee (#1115)
- _devFee = 0 (#1108)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _liquidityFee = _previousLiquidityFee (#1113)
- _liquidityFee = 0 (#1106)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _previousBurnFee = _burnFee (#1102)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _previousDevFee = _devFee (#1103)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _previousLiquidityFee = _liquidityFee (#1101)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _previousTaxFee = _taxFee (#1100)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _tFeeTotal = _tFeeTotal.add(tFee) (#1014)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _taxFee = _previousTaxFee (#1112)
- _taxFee = 0 (#1105)
Reentrancy in token.constructor() (#821-839):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#826-827)
State variables written after the call(s):
- _isExcludedFromFee[owner()] = true (#833)
- _isExcludedFromFee[ownerAddres] = true (#834)
- _isExcludedFromFee[burnAddress] = true (#835)
- _isExcludedFromFee[address(this)] = true (#836)
- uniswapV2Router = _uniswapV2Router (#830)
Reentrancy in token.swapAndLiquify(uint256) (#1186-1204):
External calls:
- swapTokensForEth(half) (#1194)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1216-1222)
- addLiquidity(otherHalf,newBalance) (#1196)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1196)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
State variables written after the call(s):
- addLiquidity(otherHalf,newBalance) (#1196)
- _allowances[owner][spender] = amount (#1126)
Reentrancy in token.swapAndLiquify(uint256) (#1186-1204):
External calls:
- swapTokensForEth(half) (#1194)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1216-1222)
- addLiquidity(otherHalf,newBalance) (#1196)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
- swapTokensForEth(subNumber) (#1200)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1216-1222)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1196)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
State variables written after the call(s):
- swapTokensForEth(subNumber) (#1200)
- _allowances[owner][spender] = amount (#1126)
Reentrancy in token.swapEthForTokens(uint256) (#1225-1240):
External calls:
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: tokenAmount}(0,path,burnAddress,block.timestamp.add(15)) (#1233-1238)
State variables written after the call(s):
- swapAndLiquifyEnabled = true (#1239)
Reentrancy in token.transferFrom(address,address,uint256) (#913-917):
External calls:
- _transfer(sender,recipient,amount) (#914)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1216-1222)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: tokenAmount}(0,path,burnAddress,block.timestamp.add(15)) (#1233-1238)
External calls sending eth:
- _transfer(sender,recipient,amount) (#914)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: tokenAmount}(0,path,burnAddress,block.timestamp.add(15)) (#1233-1238)
- address(uint160(devAddress)).transfer(newBalance.mul(2).div(9)) (#1202)
- address(uint160(devAddress)).transfer(devNumber) (#1151)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#915)
- _allowances[owner][spender] = amount (#1126)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in token._transfer(address,address,uint256) (#1130-1184):
External calls:
- swapEthForTokens(halfNumber) (#1152)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: tokenAmount}(0,path,burnAddress,block.timestamp.add(15)) (#1233-1238)
- swapAndLiquify(contractTokenBalance) (#1171)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1216-1222)
External calls sending eth:
- address(uint160(devAddress)).transfer(devNumber) (#1151)
- swapEthForTokens(halfNumber) (#1152)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: tokenAmount}(0,path,burnAddress,block.timestamp.add(15)) (#1233-1238)
- swapAndLiquify(contractTokenBalance) (#1171)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
- address(uint160(devAddress)).transfer(newBalance.mul(2).div(9)) (#1202)
Event emitted after the call(s):
- Transfer(sender,burnAddress,tBurn) (#956)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- Transfer(sender,recipient,tTransferAmount) (#905)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
Reentrancy in token.constructor() (#821-839):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#826-827)
Event emitted after the call(s):
- Transfer(address(0),ownerAddres,_tTotal) (#838)
Reentrancy in token.swapAndLiquify(uint256) (#1186-1204):
External calls:
- swapTokensForEth(half) (#1194)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1216-1222)
- addLiquidity(otherHalf,newBalance) (#1196)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1196)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#1127)
- addLiquidity(otherHalf,newBalance) (#1196)
- SwapAndLiquify(half,newBalance,otherHalf) (#1197)
Reentrancy in token.swapAndLiquify(uint256) (#1186-1204):
External calls:
- swapTokensForEth(half) (#1194)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1216-1222)
- addLiquidity(otherHalf,newBalance) (#1196)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
- swapTokensForEth(subNumber) (#1200)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1216-1222)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1196)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#1127)
- swapTokensForEth(subNumber) (#1200)
Reentrancy in token.transferFrom(address,address,uint256) (#913-917):
External calls:
- _transfer(sender,recipient,amount) (#914)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1216-1222)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: tokenAmount}(0,path,burnAddress,block.timestamp.add(15)) (#1233-1238)
External calls sending eth:
- _transfer(sender,recipient,amount) (#914)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: tokenAmount}(0,path,burnAddress,block.timestamp.add(15)) (#1233-1238)
- address(uint160(devAddress)).transfer(newBalance.mul(2).div(9)) (#1202)
- address(uint160(devAddress)).transfer(devNumber) (#1151)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#1127)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#915)
Apply the check-effects-interactions pattern.
Additional information: link
Address.isContract(address) (#255-264) uses assembly
- INLINE ASM (#262)
Address._functionCallWithValue(address,bytes,uint256,string) (#348-369) uses assembly
- INLINE ASM (#361-364)
Do not use evm assembly.
Additional information: link
Different versions of Solidity is used:
- Version used: ['>=0.5.0', '^0.6.12']
- ^0.6.12 (#10)
- >=0.5.0 (#651)
- >=0.5.0 (#670)
Use one Solidity version.
Additional information: link
Address._functionCallWithValue(address,bytes,uint256,string) (#348-369) is never used and should be removed
Address.functionCall(address,bytes) (#308-310) is never used and should be removed
Address.functionCall(address,bytes,string) (#318-320) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#333-335) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#343-346) is never used and should be removed
Address.isContract(address) (#255-264) is never used and should be removed
Address.sendValue(address,uint256) (#282-288) is never used and should be removed
Context._msgData() (#227-230) is never used and should be removed
PancakeLibrary.getAmountIn(uint256,uint256,uint256) (#721-727) is never used and should be removed
PancakeLibrary.getAmountOut(uint256,uint256,uint256) (#711-718) is never used and should be removed
PancakeLibrary.getAmountsIn(address,uint256,address[]) (#741-749) is never used and should be removed
PancakeLibrary.getAmountsOut(address,uint256,address[]) (#730-738) is never used and should be removed
PancakeLibrary.getReserves(address,address,address) (#696-701) is never used and should be removed
PancakeLibrary.pairFor(address,address,address) (#685-693) is never used and should be removed
PancakeLibrary.quote(uint256,uint256,uint256) (#704-708) is never used and should be removed
PancakeLibrary.sortTokens(address,address) (#678-682) is never used and should be removed
SafeMath.mod(uint256,uint256) (#133-135) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#149-152) is never used and should be removed
Remove unused functions.
Additional information: link
token._rTotal (#769) is set pre-construction with a non-constant function or state variable:
- (MAX - (MAX % _tTotal))
token._previousTaxFee (#777) is set pre-construction with a non-constant function or state variable:
- _taxFee
token._previousLiquidityFee (#780) is set pre-construction with a non-constant function or state variable:
- _liquidityFee
token._previousBurnFee (#783) is set pre-construction with a non-constant function or state variable:
- _burnFee
token._previousDevFee (#786) is set pre-construction with a non-constant function or state variable:
- _devFee
Remove any initialization of state variables via non-constant state variables or function calls. If variables must be set upon contract deployment, locate initialization in the constructor instead.
Additional information: link
Pragma version>=0.5.0 (#651) allows old versions
Pragma version>=0.5.0 (#670) 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) (#282-288):
- (success) = recipient.call{value: amount}() (#286)
Low level call in Address._functionCallWithValue(address,bytes,uint256,string) (#348-369):
- (success,returndata) = target.call{value: weiValue}(data) (#352)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IPancakeRouter01.WETH() (#462) is not in mixedCase
Function IPancakePair.DOMAIN_SEPARATOR() (#615) is not in mixedCase
Function IPancakePair.PERMIT_TYPEHASH() (#616) is not in mixedCase
Function IPancakePair.MINIMUM_LIQUIDITY() (#633) is not in mixedCase
Contract token (#757-1242) is not in CapWords
Parameter token.setSwapAndLiquifyEnabled(bool)._enabled (#999) is not in mixedCase
Parameter token.setSwapDevEnabled(bool)._enabled (#1004) is not in mixedCase
Parameter token.calculateTaxFee(uint256)._amount (#1072) is not in mixedCase
Parameter token.calculateLiquidityFee(uint256)._amount (#1078) is not in mixedCase
Parameter token.calculateBurnFee(uint256)._amount (#1084) is not in mixedCase
Parameter token.calculateDevFee(uint256)._amount (#1090) is not in mixedCase
Variable token._taxFee (#776) is not in mixedCase
Variable token._liquidityFee (#779) is not in mixedCase
Variable token._burnFee (#782) is not in mixedCase
Variable token._devFee (#785) is not in mixedCase
Variable token._maxTxAmount (#802) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#228)" inContext (#222-231)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Reentrancy in token._transfer(address,address,uint256) (#1130-1184):
External calls:
- address(uint160(devAddress)).transfer(devNumber) (#1151)
External calls sending eth:
- address(uint160(devAddress)).transfer(devNumber) (#1151)
- swapEthForTokens(halfNumber) (#1152)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: tokenAmount}(0,path,burnAddress,block.timestamp.add(15)) (#1233-1238)
State variables written after the call(s):
- swapEthForTokens(halfNumber) (#1152)
- swapAndLiquifyEnabled = false (#1226)
- swapAndLiquifyEnabled = true (#1239)
Reentrancy in token._transfer(address,address,uint256) (#1130-1184):
External calls:
- address(uint160(devAddress)).transfer(devNumber) (#1151)
- swapAndLiquify(contractTokenBalance) (#1171)
- address(uint160(devAddress)).transfer(newBalance.mul(2).div(9)) (#1202)
External calls sending eth:
- address(uint160(devAddress)).transfer(devNumber) (#1151)
- swapEthForTokens(halfNumber) (#1152)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: tokenAmount}(0,path,burnAddress,block.timestamp.add(15)) (#1233-1238)
- swapAndLiquify(contractTokenBalance) (#1171)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
- address(uint160(devAddress)).transfer(newBalance.mul(2).div(9)) (#1202)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _burnFee = _previousBurnFee (#1114)
- _burnFee = 0 (#1107)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _devFee = _previousDevFee (#1115)
- _devFee = 0 (#1108)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _liquidityFee = _previousLiquidityFee (#1113)
- _liquidityFee = 0 (#1106)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _previousBurnFee = _burnFee (#1102)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _previousDevFee = _devFee (#1103)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _previousLiquidityFee = _liquidityFee (#1101)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _previousTaxFee = _taxFee (#1100)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _rOwned[burnAddress] = _rOwned[burnAddress].add(rBurn) (#954)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#1069)
- _rOwned[address(this)] = _rOwned[address(this)].add(rDev) (#963)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#898)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#899)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _rTotal = _rTotal.sub(rFee) (#1013)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _tFeeTotal = _tFeeTotal.add(tFee) (#1014)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- _taxFee = _previousTaxFee (#1112)
- _taxFee = 0 (#1105)
Event emitted after the call(s):
- Transfer(sender,burnAddress,tBurn) (#956)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
- Transfer(sender,recipient,tTransferAmount) (#905)
- _tokenTransfer(from,to,amount,takeFee) (#1183)
Reentrancy in token.transferFrom(address,address,uint256) (#913-917):
External calls:
- _transfer(sender,recipient,amount) (#914)
- address(uint160(devAddress)).transfer(newBalance.mul(2).div(9)) (#1202)
- address(uint160(devAddress)).transfer(devNumber) (#1151)
External calls sending eth:
- _transfer(sender,recipient,amount) (#914)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#875-882)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: tokenAmount}(0,path,burnAddress,block.timestamp.add(15)) (#1233-1238)
- address(uint160(devAddress)).transfer(newBalance.mul(2).div(9)) (#1202)
- address(uint160(devAddress)).transfer(devNumber) (#1151)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#915)
- _allowances[owner][spender] = amount (#1126)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#1127)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#915)
Apply the check-effects-interactions pattern.
Additional information: link
Variable IPancakeRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#467) is too similar to IPancakeRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#468)
Variable token._transferStandard(address,address,uint256).rTransferAmount (#897) is too similar to token._getTValues(uint256).tTransferAmount (#1037)
Variable token._transferStandard(address,address,uint256).rTransferAmount (#897) is too similar to token._transferStandard(address,address,uint256).tTransferAmount (#897)
Variable token.reflectionFromToken(uint256,bool).rTransferAmount (#940) is too similar to token._getTValues(uint256).tTransferAmount (#1037)
Variable token._getRValues(token.TData,uint256).rTransferAmount (#1049) is too similar to token._getTValues(uint256).tTransferAmount (#1037)
Variable token._transferStandard(address,address,uint256).rTransferAmount (#897) is too similar to token._getValues(uint256).tTransferAmount (#1026)
Variable token._getValues(uint256).rTransferAmount (#1028) is too similar to token._getTValues(uint256).tTransferAmount (#1037)
Variable token.reflectionFromToken(uint256,bool).rTransferAmount (#940) is too similar to token._getValues(uint256).tTransferAmount (#1026)
Variable token._getValues(uint256).rTransferAmount (#1028) is too similar to token._transferStandard(address,address,uint256).tTransferAmount (#897)
Variable token._getRValues(token.TData,uint256).rTransferAmount (#1049) is too similar to token._getValues(uint256).tTransferAmount (#1026)
Variable token._getValues(uint256).rTransferAmount (#1028) is too similar to token._getValues(uint256).tTransferAmount (#1026)
Variable token._getRValues(token.TData,uint256).rTransferAmount (#1049) is too similar to token._transferStandard(address,address,uint256).tTransferAmount (#897)
Variable token.reflectionFromToken(uint256,bool).rTransferAmount (#940) is too similar to token._transferStandard(address,address,uint256).tTransferAmount (#897)
Prevent variables from having similar names.
Additional information: link
token.slitherConstructorVariables() (#757-1242) uses literals with too many digits:
- _tTotal = 2000000000 * 10 ** 18 (#768)
token.slitherConstructorVariables() (#757-1242) uses literals with too many digits:
- _maxTxAmount = 100000 * 10 ** 18 (#802)
token.slitherConstructorVariables() (#757-1242) uses literals with too many digits:
- numTokensSellToAddToLiquidity = 100000 * 10 ** 18 (#803)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
token._tOwned (#762) is never used in token (#757-1242)
Remove unused state variables.
Additional information: link
token._decimals (#774) should be constant
token._name (#772) should be constant
token._symbol (#773) should be constant
token._tTotal (#768) should be constant
token.burnAddress (#788) should be constant
token.devAddress (#790) should be constant
token.hbtcToken (#792) should be constant
token.husdtToken (#793) should be constant
token.ownerAddres (#789) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#422-425)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#431-435)
geUnlockTime() should be declared external:
- Ownable.geUnlockTime() (#437-439)
lock(uint256) should be declared external:
- Ownable.lock(uint256) (#442-447)
unlock() should be declared external:
- Ownable.unlock() (#450-455)
name() should be declared external:
- token.name() (#841-843)
symbol() should be declared external:
- token.symbol() (#845-847)
decimals() should be declared external:
- token.decimals() (#849-851)
totalSupply() should be declared external:
- token.totalSupply() (#853-855)
transfer(address,uint256) should be declared external:
- token.transfer(address,uint256) (#861-864)
allowance(address,address) should be declared external:
- token.allowance(address,address) (#866-868)
approve(address,uint256) should be declared external:
- token.approve(address,uint256) (#908-911)
transferFrom(address,address,uint256) should be declared external:
- token.transferFrom(address,address,uint256) (#913-917)
increaseAllowance(address,uint256) should be declared external:
- token.increaseAllowance(address,uint256) (#919-922)
decreaseAllowance(address,uint256) should be declared external:
- token.decreaseAllowance(address,uint256) (#924-927)
totalFees() should be declared external:
- token.totalFees() (#930-932)
reflectionFromToken(uint256,bool) should be declared external:
- token.reflectionFromToken(uint256,bool) (#934-943)
excludeFromFee(address) should be declared external:
- token.excludeFromFee(address) (#967-969)
includeInFee(address) should be declared external:
- token.includeInFee(address) (#971-973)
setSwapAndLiquifyEnabled(bool) should be declared external:
- token.setSwapAndLiquifyEnabled(bool) (#999-1002)
setSwapDevEnabled(bool) should be declared external:
- token.setSwapDevEnabled(bool) (#1004-1006)
isExcludedFromFee(address) should be declared external:
- token.isExcludedFromFee(address) (#1118-1120)
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 Twitter account
Unable to find Blog account (Reddit or Medium)
Unable to find Youtube account
Unable to find Discord account