Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Reentrancy in SQFToken._transfer(address,address,uint256) (SQFToken.sol#258-328):
External calls:
- swapAndCharge(tokenBalance) (SQFToken.sol#301)
- pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
- pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (SQFToken.sol#356-362)
- (success) = address(bnbPoolAddress).call{value: address(this).balance}() (SQFToken.sol#341)
External calls sending eth:
- swapAndCharge(tokenBalance) (SQFToken.sol#301)
- pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
- (success) = address(bnbPoolAddress).call{value: address(this).balance}() (SQFToken.sol#341)
State variables written after the call(s):
- _tokenTransferPankeSwap(from,to,amount,takeFee) (SQFToken.sol#323)
- _BNBFee = _previousBNBFee (SQFToken.sol#242)
- _BNBFee = 0 (SQFToken.sol#220)
- _tokenTransferPankeSwap(from,to,amount,takeFee) (SQFToken.sol#323)
- _balances[sender] = _balances[sender].sub(amount) (SQFToken.sol#385)
- _balances[recipient] = _balances[recipient].add(tTransferAmount) (SQFToken.sol#386)
- _balances[_feeWallet] = _balances[_feeWallet].add(amount.sub(tTransferAmount)) (SQFToken.sol#387)
- _tokenTransfer(from,to,amount,takeFee) (SQFToken.sol#326)
- _balances[sender] = _balances[sender].sub(amount) (SQFToken.sol#396)
- _balances[recipient] = _balances[recipient].add(amount) (SQFToken.sol#397)
- _balances[sender] = _balances[sender].sub(amount) (SQFToken.sol#402)
- _balances[recipient] = _balances[recipient].add(tTransferAmount) (SQFToken.sol#403)
- _balances[_feeWallet] = _balances[_feeWallet].add(amount.sub(tTransferAmount)) (SQFToken.sol#404)
- _tokenTransferPankeSwap(from,to,amount,takeFee) (SQFToken.sol#323)
- _liquidityFee = _previousLiquidityFee (SQFToken.sol#243)
- _liquidityFee = 0 (SQFToken.sol#221)
- lastSwapTime = block.timestamp (SQFToken.sol#302)
Apply the check-effects-interactions pattern.
Additional information: link
SQFToken.swapAndCharge(uint256) (SQFToken.sol#330-344) uses a dangerous strict equality:
- require(bool,string)(success == true,Transfer failed.) (SQFToken.sol#342)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
SQFToken._transfer(address,address,uint256) (SQFToken.sol#258-328) contains a tautology or contradiction:
- _balances[from].sub(amount).sub(receiedAmount) < 0 (SQFToken.sol#316)
Fix the incorrect comparison by changing the value type or the comparison.
Additional information: link
SQFToken.allowance(address,address).owner (SQFToken.sol#117) shadows:
- Ownable.owner() (Ownable.sol#18-20) (function)
SQFToken._approve(address,address,uint256).owner (SQFToken.sol#250) shadows:
- Ownable.owner() (Ownable.sol#18-20) (function)
Rename the local variables that shadow another component.
Additional information: link
SQFToken.swapAndCharge(uint256) (SQFToken.sol#330-344) performs a multiplication on the result of a division:
-liquidBalance = tokenBalance.mul(_liquidityFee).div(_liquidityFee + _BNBFee).div(2) (SQFToken.sol#333)
-bnbForLiquid = newBalance.mul(liquidBalance).div(tokenBalance) (SQFToken.sol#338)
Consider ordering multiplication before division.
Additional information: link
SQFToken.addLiquidity(uint256,uint256) (SQFToken.sol#365-378) ignores return value by pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
Ensure that all the return values of the function calls are used.
Additional information: link
SQFToken.modifyBlackList(address[],address[]).index (SQFToken.sol#229) is a local variable never initialized
SQFToken.modifyBlackList(address[],address[]).index_scope_0 (SQFToken.sol#232) 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
SQFToken.changeFeeWallet(address).feeWallet (SQFToken.sol#174) lacks a zero-check on :
- _feeWallet = feeWallet (SQFToken.sol#176)
SQFToken.setSellContract(address).sellContract (SQFToken.sol#189) lacks a zero-check on :
- SELL_CONTRACT = sellContract (SQFToken.sol#190)
Check that the address is not zero.
Additional information: link
Reentrancy in SQFToken._transfer(address,address,uint256) (SQFToken.sol#258-328):
External calls:
- swapAndCharge(tokenBalance) (SQFToken.sol#301)
- pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
- pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (SQFToken.sol#356-362)
- (success) = address(bnbPoolAddress).call{value: address(this).balance}() (SQFToken.sol#341)
External calls sending eth:
- swapAndCharge(tokenBalance) (SQFToken.sol#301)
- pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
- (success) = address(bnbPoolAddress).call{value: address(this).balance}() (SQFToken.sol#341)
State variables written after the call(s):
- _tokenTransferPankeSwap(from,to,amount,takeFee) (SQFToken.sol#323)
- _previousBNBFee = _BNBFee (SQFToken.sol#217)
- _tokenTransferPankeSwap(from,to,amount,takeFee) (SQFToken.sol#323)
- _previousLiquidityFee = _liquidityFee (SQFToken.sol#218)
Reentrancy in SQFToken.constructor() (SQFToken.sol#71-86):
External calls:
- pancakeswapV2Pair = IPancakeswapV2Factory(_pancakeswapV2Router.factory()).createPair(address(this),_pancakeswapV2Router.WETH()) (SQFToken.sol#74-75)
State variables written after the call(s):
- _balances[_msgSender()] = _tTotal (SQFToken.sol#84)
- _feeWallet = owner() (SQFToken.sol#83)
- _isExcludedFromFee[_msgSender()] = true (SQFToken.sol#81)
- _isExcludedFromFee[address(this)] = true (SQFToken.sol#82)
- pancakeswapV2Router = _pancakeswapV2Router (SQFToken.sol#78)
Reentrancy in SQFToken.swapAndCharge(uint256) (SQFToken.sol#330-344):
External calls:
- swapTokensForEth(tokenBalance) (SQFToken.sol#335)
- pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (SQFToken.sol#356-362)
- addLiquidity(liquidBalance,bnbForLiquid) (SQFToken.sol#339)
- pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
External calls sending eth:
- addLiquidity(liquidBalance,bnbForLiquid) (SQFToken.sol#339)
- pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
State variables written after the call(s):
- addLiquidity(liquidBalance,bnbForLiquid) (SQFToken.sol#339)
- _allowances[owner][spender] = amount (SQFToken.sol#254)
Reentrancy in SQFToken.transferFrom(address,address,uint256) (SQFToken.sol#126-130):
External calls:
- _transfer(sender,recipient,amount) (SQFToken.sol#127)
- pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
- pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (SQFToken.sol#356-362)
- (success) = address(bnbPoolAddress).call{value: address(this).balance}() (SQFToken.sol#341)
External calls sending eth:
- _transfer(sender,recipient,amount) (SQFToken.sol#127)
- pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
- (success) = address(bnbPoolAddress).call{value: address(this).balance}() (SQFToken.sol#341)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,BEP20: transfer amount exceeds allowance)) (SQFToken.sol#128)
- _allowances[owner][spender] = amount (SQFToken.sol#254)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in SQFToken._transfer(address,address,uint256) (SQFToken.sol#258-328):
External calls:
- swapAndCharge(tokenBalance) (SQFToken.sol#301)
- pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
- pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (SQFToken.sol#356-362)
- (success) = address(bnbPoolAddress).call{value: address(this).balance}() (SQFToken.sol#341)
External calls sending eth:
- swapAndCharge(tokenBalance) (SQFToken.sol#301)
- pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
- (success) = address(bnbPoolAddress).call{value: address(this).balance}() (SQFToken.sol#341)
Event emitted after the call(s):
- Transfer(sender,recipient,amount) (SQFToken.sol#398)
- _tokenTransfer(from,to,amount,takeFee) (SQFToken.sol#326)
- Transfer(sender,recipient,tTransferAmount) (SQFToken.sol#388)
- _tokenTransferPankeSwap(from,to,amount,takeFee) (SQFToken.sol#323)
- Transfer(sender,recipient,tTransferAmount) (SQFToken.sol#405)
- _tokenTransfer(from,to,amount,takeFee) (SQFToken.sol#326)
Reentrancy in SQFToken.constructor() (SQFToken.sol#71-86):
External calls:
- pancakeswapV2Pair = IPancakeswapV2Factory(_pancakeswapV2Router.factory()).createPair(address(this),_pancakeswapV2Router.WETH()) (SQFToken.sol#74-75)
Event emitted after the call(s):
- Transfer(address(0),owner(),_tTotal) (SQFToken.sol#85)
Reentrancy in SQFToken.swapAndCharge(uint256) (SQFToken.sol#330-344):
External calls:
- swapTokensForEth(tokenBalance) (SQFToken.sol#335)
- pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (SQFToken.sol#356-362)
- addLiquidity(liquidBalance,bnbForLiquid) (SQFToken.sol#339)
- pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
External calls sending eth:
- addLiquidity(liquidBalance,bnbForLiquid) (SQFToken.sol#339)
- pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
Event emitted after the call(s):
- Approval(owner,spender,amount) (SQFToken.sol#255)
- addLiquidity(liquidBalance,bnbForLiquid) (SQFToken.sol#339)
Reentrancy in SQFToken.swapAndCharge(uint256) (SQFToken.sol#330-344):
External calls:
- swapTokensForEth(tokenBalance) (SQFToken.sol#335)
- pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (SQFToken.sol#356-362)
- addLiquidity(liquidBalance,bnbForLiquid) (SQFToken.sol#339)
- pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
- (success) = address(bnbPoolAddress).call{value: address(this).balance}() (SQFToken.sol#341)
External calls sending eth:
- addLiquidity(liquidBalance,bnbForLiquid) (SQFToken.sol#339)
- pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
- (success) = address(bnbPoolAddress).call{value: address(this).balance}() (SQFToken.sol#341)
Event emitted after the call(s):
- SwapAndCharged(tokenBalance,liquidBalance,address(this).balance,bnbForLiquid) (SQFToken.sol#343)
Reentrancy in SQFToken.transferFrom(address,address,uint256) (SQFToken.sol#126-130):
External calls:
- _transfer(sender,recipient,amount) (SQFToken.sol#127)
- pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
- pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (SQFToken.sol#356-362)
- (success) = address(bnbPoolAddress).call{value: address(this).balance}() (SQFToken.sol#341)
External calls sending eth:
- _transfer(sender,recipient,amount) (SQFToken.sol#127)
- pancakeswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (SQFToken.sol#370-377)
- (success) = address(bnbPoolAddress).call{value: address(this).balance}() (SQFToken.sol#341)
Event emitted after the call(s):
- Approval(owner,spender,amount) (SQFToken.sol#255)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,BEP20: transfer amount exceeds allowance)) (SQFToken.sol#128)
Apply the check-effects-interactions pattern.
Additional information: link
Ownable.unlock() (Ownable.sol#49-54) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp > _lockTime,Contract is locked until 0 days) (Ownable.sol#51)
SQFToken._transfer(address,address,uint256) (SQFToken.sol#258-328) uses timestamp for comparisons
Dangerous comparisons:
- overMinTokenBalance && ! inSwapAndLiquify && from != pancakeswapV2Pair && swapAndLiquifyEnabled && block.timestamp >= lastSwapTime + swapCoolDownTime (SQFToken.sol#294-298)
Avoid relying on block.timestamp.
Additional information: link
SQFToken._transfer(address,address,uint256) (SQFToken.sol#258-328) compares to a boolean constant:
-require(bool,string)(presaleEnded == true,You are not allowed to add liquidity before presale is ended) (SQFToken.sol#269)
SQFToken.swapAndCharge(uint256) (SQFToken.sol#330-344) compares to a boolean constant:
-require(bool,string)(success == true,Transfer failed.) (SQFToken.sol#342)
Remove the equality to the boolean constant.
Additional information: link
Context._msgData() (Context.sol#18-21) is never used and should be removed
SafeMath.div(uint256,uint256,string) (SafeMath.sol#189-194) is never used and should be removed
SafeMath.mod(uint256,uint256) (SafeMath.sol#149-151) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (SafeMath.sol#211-216) is never used and should be removed
SafeMath.tryAdd(uint256,uint256) (SafeMath.sol#20-26) is never used and should be removed
SafeMath.tryDiv(uint256,uint256) (SafeMath.sol#62-67) is never used and should be removed
SafeMath.tryMod(uint256,uint256) (SafeMath.sol#74-79) is never used and should be removed
SafeMath.tryMul(uint256,uint256) (SafeMath.sol#45-55) is never used and should be removed
SafeMath.trySub(uint256,uint256) (SafeMath.sol#33-38) is never used and should be removed
Remove unused functions.
Additional information: link
SQFToken._previousBNBFee (SQFToken.sol#29) is set pre-construction with a non-constant function or state variable:
- _BNBFee
SQFToken._previousLiquidityFee (SQFToken.sol#32) is set pre-construction with a non-constant function or state variable:
- _liquidityFee
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.8.0 (Context.sol#2) allows old versions
Pragma version^0.8.0 (IBEP20.sol#3) allows old versions
Pragma version^0.8.0 (ISellToken.sol#2) allows old versions
Pragma version^0.8.0 (Ownable.sol#2) allows old versions
Pragma version^0.8.0 (SQFToken.sol#3) allows old versions
Pragma version^0.8.0 (SafeMath.sol#2) allows old versions
Pragma version^0.8.0 (V2Factory.sol#3) allows old versions
Pragma version^0.8.0 (V2Router01.sol#3) allows old versions
Pragma version^0.8.0 (V2Router02.sol#3) 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 SQFToken.swapAndCharge(uint256) (SQFToken.sol#330-344):
- (success) = address(bnbPoolAddress).call{value: address(this).balance}() (SQFToken.sol#341)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Parameter SQFToken.setSwapAndLiquifyEnabled(bool)._enabled (SQFToken.sol#194) is not in mixedCase
Variable SQFToken._BNBFee (SQFToken.sol#28) is not in mixedCase
Variable SQFToken._liquidityFee (SQFToken.sol#31) is not in mixedCase
Variable SQFToken._feeTransfer (SQFToken.sol#33) is not in mixedCase
Variable SQFToken._feeWallet (SQFToken.sol#34) is not in mixedCase
Variable SQFToken._maxTxAmount (SQFToken.sol#43) is not in mixedCase
Variable SQFToken.SELL_CONTRACT (SQFToken.sol#46) is not in mixedCase
Function IPancakeswapV2Router01.WETH() (V2Router01.sol#7) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (Context.sol#19)" inContext (Context.sol#13-23)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Variable IPancakeswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (V2Router01.sol#12) is too similar to IPancakeswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (V2Router01.sol#13)
Prevent variables from having similar names.
Additional information: link
SQFToken.MAX (SQFToken.sol#23) is never used in SQFToken (SQFToken.sol#13-409)
SQFToken.lastTxTimes (SQFToken.sol#48) is never used in SQFToken (SQFToken.sol#13-409)
Remove unused state variables.
Additional information: link
SQFToken._decimals (SQFToken.sol#26) should be constant
SQFToken._name (SQFToken.sol#24) should be constant
SQFToken._symbol (SQFToken.sol#25) should be constant
SQFToken._tTotal (SQFToken.sol#22) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (Ownable.sol#27-30)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (Ownable.sol#32-36)
geUnlockTime() should be declared external:
- Ownable.geUnlockTime() (Ownable.sol#38-40)
lock(uint256) should be declared external:
- Ownable.lock(uint256) (Ownable.sol#42-47)
unlock() should be declared external:
- Ownable.unlock() (Ownable.sol#49-54)
transfer(address,uint256) should be declared external:
- SQFToken.transfer(address,uint256) (SQFToken.sol#112-115)
allowance(address,address) should be declared external:
- SQFToken.allowance(address,address) (SQFToken.sol#117-119)
approve(address,uint256) should be declared external:
- SQFToken.approve(address,uint256) (SQFToken.sol#121-124)
transferFrom(address,address,uint256) should be declared external:
- SQFToken.transferFrom(address,address,uint256) (SQFToken.sol#126-130)
increaseAllowance(address,uint256) should be declared external:
- SQFToken.increaseAllowance(address,uint256) (SQFToken.sol#132-135)
decreaseAllowance(address,uint256) should be declared external:
- SQFToken.decreaseAllowance(address,uint256) (SQFToken.sol#137-140)
setSellContract(address) should be declared external:
- SQFToken.setSellContract(address) (SQFToken.sol#189-192)
modifyBlackList(address[],address[]) should be declared external:
- SQFToken.modifyBlackList(address[],address[]) (SQFToken.sol#225-235)
isBlackList(address) should be declared external:
- SQFToken.isBlackList(address) (SQFToken.sol#237-239)
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 price dump / death
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Unable to find Telegram and Twitter accounts