Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
PitaBread.addLiquidity(uint256,uint256) (#760-771) sends eth to arbitrary user
Dangerous calls:
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#763-770)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in PitaBread._transfer(address,address,uint256) (#694-727):
External calls:
- swapAndLiquify(contractTokenBalance) (#704)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#763-770)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#751-757)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#704)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#763-770)
State variables written after the call(s):
- _tokenTransfer(from,to,amount) (#726)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#644)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#818)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#809)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#588)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#829)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#810)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#830)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#820)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#590)
- _tokenTransfer(from,to,amount) (#726)
- _rTotal = _rTotal.sub(rFee) (#599)
- _tokenTransfer(from,to,amount) (#726)
- _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (#646)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#828)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#587)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#819)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#589)
Apply the check-effects-interactions pattern.
Additional information: link
Combination 1: Reentrancy vulnerabilities + Functions that send Ether to arbitraty destination. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#260) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#261)
Variable PitaBread._bliquidityFee (#420) is too similar to PitaBread._oliquidityFee (#423)
Variable PitaBread._liquidityFee (#431) is too similar to PitaBread.setbliquidityFeePercent(uint256).bliquidityFee (#852)
Variable PitaBread._liquidityFee (#431) is too similar to PitaBread.setoliquidityFeePercent(uint256).oliquidityFee (#860)
Variable PitaBread._liquidityFee (#431) is too similar to PitaBread.setsiquidityFeePercent(uint256).sliquidityFee (#856)
Variable PitaBread._bliquidityFee (#420) is too similar to PitaBread._sliquidityFee (#415)
Variable PitaBread._oliquidityFee (#423) is too similar to PitaBread._sliquidityFee (#415)
Variable PitaBread.setbliquidityFeePercent(uint256).bliquidityFee (#852) is too similar to PitaBread.setoliquidityFeePercent(uint256).oliquidityFee (#860)
Variable PitaBread.setbliquidityFeePercent(uint256).bliquidityFee (#852) is too similar to PitaBread.setsiquidityFeePercent(uint256).sliquidityFee (#856)
Variable PitaBread._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#620) is too similar to PitaBread._getTValues(uint256).tTransferAmount (#612)
Variable PitaBread._transferFromExcluded(address,address,uint256).rTransferAmount (#827) is too similar to PitaBread._transferToExcluded(address,address,uint256).tTransferAmount (#817)
Variable PitaBread._transferStandard(address,address,uint256).rTransferAmount (#808) is too similar to PitaBread._getTValues(uint256).tTransferAmount (#612)
Variable PitaBread._getValues(uint256).rTransferAmount (#605) is too similar to PitaBread._transferBothExcluded(address,address,uint256).tTransferAmount (#586)
Variable PitaBread.reflectionFromToken(uint256,bool).rTransferAmount (#551) is too similar to PitaBread._transferBothExcluded(address,address,uint256).tTransferAmount (#586)
Variable PitaBread._getValues(uint256).rTransferAmount (#605) is too similar to PitaBread._getTValues(uint256).tTransferAmount (#612)
Variable PitaBread._transferBothExcluded(address,address,uint256).rTransferAmount (#586) is too similar to PitaBread._transferBothExcluded(address,address,uint256).tTransferAmount (#586)
Variable PitaBread.reflectionFromToken(uint256,bool).rTransferAmount (#551) is too similar to PitaBread._getTValues(uint256).tTransferAmount (#612)
Variable PitaBread._transferFromExcluded(address,address,uint256).rTransferAmount (#827) is too similar to PitaBread._transferBothExcluded(address,address,uint256).tTransferAmount (#586)
Variable PitaBread._transferStandard(address,address,uint256).rTransferAmount (#808) is too similar to PitaBread._transferToExcluded(address,address,uint256).tTransferAmount (#817)
Variable PitaBread._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#620) is too similar to PitaBread._transferToExcluded(address,address,uint256).tTransferAmount (#817)
Variable PitaBread._transferToExcluded(address,address,uint256).rTransferAmount (#817) is too similar to PitaBread._transferToExcluded(address,address,uint256).tTransferAmount (#817)
Variable PitaBread._transferFromExcluded(address,address,uint256).rTransferAmount (#827) is too similar to PitaBread._getTValues(uint256).tTransferAmount (#612)
Variable PitaBread._getValues(uint256).rTransferAmount (#605) is too similar to PitaBread._transferToExcluded(address,address,uint256).tTransferAmount (#817)
Variable PitaBread._transferFromExcluded(address,address,uint256).rTransferAmount (#827) is too similar to PitaBread._transferFromExcluded(address,address,uint256).tTransferAmount (#827)
Variable PitaBread.reflectionFromToken(uint256,bool).rTransferAmount (#551) is too similar to PitaBread._transferToExcluded(address,address,uint256).tTransferAmount (#817)
Variable PitaBread._transferFromExcluded(address,address,uint256).rTransferAmount (#827) is too similar to PitaBread._getValues(uint256).tTransferAmount (#604)
Variable PitaBread._transferStandard(address,address,uint256).rTransferAmount (#808) is too similar to PitaBread._transferBothExcluded(address,address,uint256).tTransferAmount (#586)
Variable PitaBread._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#620) is too similar to PitaBread._transferBothExcluded(address,address,uint256).tTransferAmount (#586)
Variable PitaBread._transferBothExcluded(address,address,uint256).rTransferAmount (#586) is too similar to PitaBread._transferToExcluded(address,address,uint256).tTransferAmount (#817)
Variable PitaBread.setoliquidityFeePercent(uint256).oliquidityFee (#860) is too similar to PitaBread.setsiquidityFeePercent(uint256).sliquidityFee (#856)
Variable PitaBread.reflectionFromToken(uint256,bool).rTransferAmount (#551) is too similar to PitaBread._transferStandard(address,address,uint256).tTransferAmount (#808)
Variable PitaBread._transferToExcluded(address,address,uint256).rTransferAmount (#817) is too similar to PitaBread._transferBothExcluded(address,address,uint256).tTransferAmount (#586)
Variable PitaBread._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#620) is too similar to PitaBread._transferStandard(address,address,uint256).tTransferAmount (#808)
Variable PitaBread._transferToExcluded(address,address,uint256).rTransferAmount (#817) is too similar to PitaBread._transferStandard(address,address,uint256).tTransferAmount (#808)
Variable PitaBread._transferStandard(address,address,uint256).rTransferAmount (#808) is too similar to PitaBread._getValues(uint256).tTransferAmount (#604)
Variable PitaBread._transferBothExcluded(address,address,uint256).rTransferAmount (#586) is too similar to PitaBread._getTValues(uint256).tTransferAmount (#612)
Variable PitaBread.reflectionFromToken(uint256,bool).rTransferAmount (#551) is too similar to PitaBread._transferFromExcluded(address,address,uint256).tTransferAmount (#827)
Variable PitaBread._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#620) is too similar to PitaBread._transferFromExcluded(address,address,uint256).tTransferAmount (#827)
Variable PitaBread._getValues(uint256).rTransferAmount (#605) is too similar to PitaBread._getValues(uint256).tTransferAmount (#604)
Variable PitaBread._transferBothExcluded(address,address,uint256).rTransferAmount (#586) is too similar to PitaBread._getValues(uint256).tTransferAmount (#604)
Variable PitaBread._transferToExcluded(address,address,uint256).rTransferAmount (#817) is too similar to PitaBread._transferFromExcluded(address,address,uint256).tTransferAmount (#827)
Variable PitaBread._transferStandard(address,address,uint256).rTransferAmount (#808) is too similar to PitaBread._transferStandard(address,address,uint256).tTransferAmount (#808)
Variable PitaBread._transferBothExcluded(address,address,uint256).rTransferAmount (#586) is too similar to PitaBread._transferStandard(address,address,uint256).tTransferAmount (#808)
Variable PitaBread._getValues(uint256).rTransferAmount (#605) is too similar to PitaBread._transferStandard(address,address,uint256).tTransferAmount (#808)
Variable PitaBread._transferStandard(address,address,uint256).rTransferAmount (#808) is too similar to PitaBread._transferFromExcluded(address,address,uint256).tTransferAmount (#827)
Variable PitaBread._transferBothExcluded(address,address,uint256).rTransferAmount (#586) is too similar to PitaBread._transferFromExcluded(address,address,uint256).tTransferAmount (#827)
Variable PitaBread._getValues(uint256).rTransferAmount (#605) is too similar to PitaBread._transferFromExcluded(address,address,uint256).tTransferAmount (#827)
Variable PitaBread.reflectionFromToken(uint256,bool).rTransferAmount (#551) is too similar to PitaBread._getValues(uint256).tTransferAmount (#604)
Variable PitaBread._transferToExcluded(address,address,uint256).rTransferAmount (#817) is too similar to PitaBread._getTValues(uint256).tTransferAmount (#612)
Variable PitaBread._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#620) is too similar to PitaBread._getValues(uint256).tTransferAmount (#604)
Variable PitaBread._transferFromExcluded(address,address,uint256).rTransferAmount (#827) is too similar to PitaBread._transferStandard(address,address,uint256).tTransferAmount (#808)
Variable PitaBread._transferToExcluded(address,address,uint256).rTransferAmount (#817) is too similar to PitaBread._getValues(uint256).tTransferAmount (#604)
Prevent variables from having similar names.
Additional information: link
PitaBread.slitherConstructorVariables() (#388-908) uses literals with too many digits:
- _tTotal = 10000000 * 10 ** 9 (#404)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
PitaBread._decimals (#410) should be constant
PitaBread._name (#408) should be constant
PitaBread._symbol (#409) should be constant
PitaBread.numTokensSellToAddToLiquidity (#441) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (#219) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#220) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#236) is not in mixedCase
Function IUniswapV2Router01.WETH() (#255) is not in mixedCase
Parameter PitaBread.calculateTaxFee(uint256)._amount (#649) is not in mixedCase
Parameter PitaBread.calculateLiquidityFee(uint256)._amount (#655) is not in mixedCase
Parameter PitaBread.setSwapAndLiquifyEnabled(bool)._enabled (#894) is not in mixedCase
Variable PitaBread._taxFee (#412) is not in mixedCase
Variable PitaBread._sliquidityFee (#415) is not in mixedCase
Variable PitaBread._sdevFee (#416) is not in mixedCase
Variable PitaBread._sburnFee (#417) is not in mixedCase
Variable PitaBread._bburnFee (#418) is not in mixedCase
Variable PitaBread._bdevFee (#419) is not in mixedCase
Variable PitaBread._bliquidityFee (#420) is not in mixedCase
Variable PitaBread._oburnFee (#421) is not in mixedCase
Variable PitaBread._odevFee (#422) is not in mixedCase
Variable PitaBread._oliquidityFee (#423) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#80)" inContext (#74-83)
Remove redundant statements if they congest code but offer no value.
Additional information: link
PitaBread.addLiquidity(uint256,uint256) (#760-771) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#763-770)
Ensure that all the return values of the function calls are used.
Additional information: link
PitaBread.allowance(address,address).owner (#503) shadows:
- Ownable.owner() (#149-151) (function)
PitaBread._approve(address,address,uint256).owner (#686) shadows:
- Ownable.owner() (#149-151) (function)
Rename the local variables that shadow another component.
Additional information: link
PitaBread.setTaxFeePercent(uint256) (#848-850) should emit an event for:
- _taxFee = taxFee (#849)
PitaBread.setbliquidityFeePercent(uint256) (#852-854) should emit an event for:
- _bliquidityFee = bliquidityFee (#853)
PitaBread.setsiquidityFeePercent(uint256) (#856-858) should emit an event for:
- _sliquidityFee = sliquidityFee (#857)
PitaBread.setoliquidityFeePercent(uint256) (#860-862) should emit an event for:
- _oliquidityFee = oliquidityFee (#861)
PitaBread.setbevFeePercent(uint256) (#864-866) should emit an event for:
- _bdevFee = bdevFee (#865)
PitaBread.setsdevFeePercent(uint256) (#868-870) should emit an event for:
- _sdevFee = sdevFee (#869)
PitaBread.setodevFeePercent(uint256) (#872-874) should emit an event for:
- _odevFee = odevFee (#873)
PitaBread.setbburnFeePercent(uint256) (#876-878) should emit an event for:
- _bburnFee = bburnFee (#877)
PitaBread.setsburnFeePercent(uint256) (#880-882) should emit an event for:
- _sburnFee = sburnFee (#881)
PitaBread.setoburnFeePercent(uint256) (#884-886) should emit an event for:
- _oburnFee = oburnFee (#885)
Emit an event for critical parameter changes.
Additional information: link
PitaBread.setdevWallet(address).newWallet (#844) lacks a zero-check on :
- devWallet = newWallet (#845)
Check that the address is not zero.
Additional information: link
Reentrancy in PitaBread._transfer(address,address,uint256) (#694-727):
External calls:
- swapAndLiquify(contractTokenBalance) (#704)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#763-770)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#751-757)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#704)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#763-770)
State variables written after the call(s):
- _burnFee = _bburnFee (#713)
- _burnFee = _sburnFee (#717)
- _burnFee = _oburnFee (#721)
- _tokenTransfer(from,to,amount) (#726)
- _burnFee = _previousburnFee (#678)
- _burnFee = 0 (#672)
- _devFee = _bdevFee (#714)
- _devFee = _sdevFee (#718)
- _devFee = _odevFee (#722)
- _tokenTransfer(from,to,amount) (#726)
- _devFee = _previousdevFee (#679)
- _devFee = 0 (#671)
- _liquidityFee = _bliquidityFee (#712)
- _liquidityFee = _sliquidityFee (#716)
- _liquidityFee = _oliquidityFee (#720)
- _tokenTransfer(from,to,amount) (#726)
- _liquidityFee = _previousliquidityFee (#677)
- _liquidityFee = 0 (#670)
- _liquidityFee = 0 (#794)
- _liquidityFee = _previousliquidityFee (#800)
- _tokenTransfer(from,to,amount) (#726)
- _previousTaxFee = _taxFee (#664)
- _tokenTransfer(from,to,amount) (#726)
- _previousburnFee = _burnFee (#666)
- _tokenTransfer(from,to,amount) (#726)
- _previousdevFee = _devFee (#667)
- _tokenTransfer(from,to,amount) (#726)
- _previousliquidityFee = _liquidityFee (#665)
- _tokenTransfer(from,to,amount) (#726)
- _tFeeTotal = _tFeeTotal.add(tFee) (#600)
- _tokenTransfer(from,to,amount) (#726)
- _taxFee = _previousTaxFee (#676)
- _taxFee = 0 (#669)
- _taxFee = 0 (#793)
- _taxFee = _previousTaxFee (#799)
Reentrancy in PitaBread.constructor() (#457-475):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#463-464)
State variables written after the call(s):
- _isExcludedFromFee[owner()] = true (#468)
- _isExcludedFromFee[address(this)] = true (#469)
- admin = msg.sender (#471)
- uniswapV2Router = _uniswapV2Router (#466)
Reentrancy in PitaBread.setRouterAddress(address) (#888-892):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_newPancakeRouter.factory()).createPair(address(this),_newPancakeRouter.WETH()) (#890)
State variables written after the call(s):
- uniswapV2Router = _newPancakeRouter (#891)
Reentrancy in PitaBread.swapAndLiquify(uint256) (#729-742):
External calls:
- swapTokensForEth(half) (#735)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#751-757)
- addLiquidity(otherHalf,newBalance) (#739)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#763-770)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#739)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#763-770)
State variables written after the call(s):
- addLiquidity(otherHalf,newBalance) (#739)
- _allowances[owner][spender] = amount (#690)
Reentrancy in PitaBread.transferFrom(address,address,uint256) (#512-516):
External calls:
- _transfer(sender,recipient,amount) (#513)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#763-770)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#751-757)
External calls sending eth:
- _transfer(sender,recipient,amount) (#513)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#763-770)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#514)
- _allowances[owner][spender] = amount (#690)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in PitaBread._transfer(address,address,uint256) (#694-727):
External calls:
- swapAndLiquify(contractTokenBalance) (#704)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#763-770)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#751-757)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#704)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#763-770)
Event emitted after the call(s):
- Transfer(sender,recipient,tTransferAmount) (#813)
- _tokenTransfer(from,to,amount) (#726)
- Transfer(sender,recipient,tTransferAmount) (#823)
- _tokenTransfer(from,to,amount) (#726)
- Transfer(sender,recipient,tTransferAmount) (#833)
- _tokenTransfer(from,to,amount) (#726)
- Transfer(sender,recipient,tTransferAmount) (#593)
- _tokenTransfer(from,to,amount) (#726)
Reentrancy in PitaBread.constructor() (#457-475):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#463-464)
Event emitted after the call(s):
- Transfer(address(0),_msgSender(),_tTotal) (#474)
Reentrancy in PitaBread.swapAndLiquify(uint256) (#729-742):
External calls:
- swapTokensForEth(half) (#735)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#751-757)
- addLiquidity(otherHalf,newBalance) (#739)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#763-770)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#739)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#763-770)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#691)
- addLiquidity(otherHalf,newBalance) (#739)
- SwapAndLiquify(half,newBalance,otherHalf) (#741)
Reentrancy in PitaBread.transferFrom(address,address,uint256) (#512-516):
External calls:
- _transfer(sender,recipient,amount) (#513)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#763-770)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#751-757)
External calls sending eth:
- _transfer(sender,recipient,amount) (#513)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#763-770)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#691)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#514)
Apply the check-effects-interactions pattern.
Additional information: link
Ownable.unlock() (#180-185) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(now > _lockTime,Contract is locked until 7 days) (#182)
Avoid relying on block.timestamp.
Additional information: link
Address.isContract(address) (#86-91) uses assembly
- INLINE ASM (#89)
Address._functionCallWithValue(address,bytes,uint256,string) (#117-133) uses assembly
- INLINE ASM (#125-128)
Do not use evm assembly.
Additional information: link
PitaBread.includeInReward(address) (#572-583) has costly operations inside a loop:
- _excluded.pop() (#579)
Use a local variable to hold the loop computation result.
Additional information: link
Address._functionCallWithValue(address,bytes,uint256,string) (#117-133) is never used and should be removed
Address.functionCall(address,bytes) (#100-102) is never used and should be removed
Address.functionCall(address,bytes,string) (#104-106) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#108-110) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#112-115) is never used and should be removed
Address.isContract(address) (#86-91) is never used and should be removed
Address.sendValue(address,uint256) (#93-98) is never used and should be removed
Context._msgData() (#79-82) is never used and should be removed
SafeMath.mod(uint256,uint256) (#64-66) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#68-71) is never used and should be removed
Remove unused functions.
Additional information: link
PitaBread._rTotal (#405) is set pre-construction with a non-constant function or state variable:
- (MAX - (MAX % _tTotal))
PitaBread._previousTaxFee (#413) is set pre-construction with a non-constant function or state variable:
- _taxFee
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
Low level call in Address.sendValue(address,uint256) (#93-98):
- (success) = recipient.call{value: amount}() (#96)
Low level call in Address._functionCallWithValue(address,bytes,uint256,string) (#117-133):
- (success,returndata) = target.call{value: weiValue}(data) (#120)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#158-161)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#163-167)
geUnlockTime() should be declared external:
- Ownable.geUnlockTime() (#169-171)
lock(uint256) should be declared external:
- Ownable.lock(uint256) (#173-178)
unlock() should be declared external:
- Ownable.unlock() (#180-185)
name() should be declared external:
- PitaBread.name() (#477-479)
symbol() should be declared external:
- PitaBread.symbol() (#481-483)
decimals() should be declared external:
- PitaBread.decimals() (#485-487)
totalSupply() should be declared external:
- PitaBread.totalSupply() (#489-491)
transfer(address,uint256) should be declared external:
- PitaBread.transfer(address,uint256) (#498-501)
allowance(address,address) should be declared external:
- PitaBread.allowance(address,address) (#503-505)
approve(address,uint256) should be declared external:
- PitaBread.approve(address,uint256) (#507-510)
transferFrom(address,address,uint256) should be declared external:
- PitaBread.transferFrom(address,address,uint256) (#512-516)
increaseAllowance(address,uint256) should be declared external:
- PitaBread.increaseAllowance(address,uint256) (#518-521)
decreaseAllowance(address,uint256) should be declared external:
- PitaBread.decreaseAllowance(address,uint256) (#523-526)
isExcludedFromReward(address) should be declared external:
- PitaBread.isExcludedFromReward(address) (#528-530)
totalFees() should be declared external:
- PitaBread.totalFees() (#532-534)
deliver(uint256) should be declared external:
- PitaBread.deliver(uint256) (#536-543)
reflectionFromToken(uint256,bool) should be declared external:
- PitaBread.reflectionFromToken(uint256,bool) (#545-554)
excludeFromReward(address) should be declared external:
- PitaBread.excludeFromReward(address) (#562-570)
isExcludedFromFee(address) should be declared external:
- PitaBread.isExcludedFromFee(address) (#682-684)
excludeFromFee(address) should be declared external:
- PitaBread.excludeFromFee(address) (#836-838)
includeInFee(address) should be declared external:
- PitaBread.includeInFee(address) (#840-842)
setRouterAddress(address) should be declared external:
- PitaBread.setRouterAddress(address) (#888-892)
setSwapAndLiquifyEnabled(bool) should be declared external:
- PitaBread.setSwapAndLiquifyEnabled(bool) (#894-897)
mint(address,uint256) should be declared external:
- PitaBread.mint(address,uint256) (#899-906)
Use the external attribute for functions never called from the contract.
Additional information: link
Unable to find website, listings and other project-related information
Token is marked as scam (rug pull, honeypot, phishing, etc.)
Additional information: link
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