BagSoccer is a PvP based on the wordwide known game, "Head Ball", with short and dynamic matches with betting and BAG NFT characters.
Bags.addLiquidity(uint256,uint256) (contracts/Bags.sol#750-763) sends eth to arbitrary user
Dangerous calls:
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/Bags.sol#755-762)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in Bags._transfer(address,address,uint256) (contracts/Bags.sol#660-707):
External calls:
- swapAndLiquify(contractTokenBalance) (contracts/Bags.sol#694)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/Bags.sol#755-762)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/Bags.sol#741-747)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (contracts/Bags.sol#694)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/Bags.sol#755-762)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (contracts/Bags.sol#706)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (contracts/Bags.sol#612)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (contracts/Bags.sol#802)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (contracts/Bags.sol#822)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (contracts/Bags.sol#803)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (contracts/Bags.sol#844)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (contracts/Bags.sol#490)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (contracts/Bags.sol#824)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (contracts/Bags.sol#845)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (contracts/Bags.sol#492)
- _tokenTransfer(from,to,amount,takeFee) (contracts/Bags.sol#706)
- _rTotal = _rTotal.sub(rFee) (contracts/Bags.sol#527)
- _tokenTransfer(from,to,amount,takeFee) (contracts/Bags.sol#706)
- _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (contracts/Bags.sol#614)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (contracts/Bags.sol#843)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (contracts/Bags.sol#489)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (contracts/Bags.sol#823)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (contracts/Bags.sol#491)
Apply the check-effects-interactions pattern.
Additional information: link
Contract ownership is not renounced (belongs to a wallet)
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.
Unable to verify that contract auditor is trusted: Certik, Quantstamp, Hacken, Solidity, Paladinsec, Openzeppelin, Verichains
Bags.includeInReward(address) (contracts/Bags.sol#463-474) has costly operations inside a loop:
- _excluded.pop() (contracts/Bags.sol#470)
Use a local variable to hold the loop computation result.
Additional information: link
Low level call in Address.sendValue(address,uint256) (@openzeppelin/contracts/utils/Address.sol#54-59):
- (success) = recipient.call{value: amount}() (@openzeppelin/contracts/utils/Address.sol#57)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts/utils/Address.sol#122-133):
- (success,returndata) = target.call{value: value}(data) (@openzeppelin/contracts/utils/Address.sol#131)
Low level call in Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#151-160):
- (success,returndata) = target.staticcall(data) (@openzeppelin/contracts/utils/Address.sol#158)
Low level call in Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#178-187):
- (success,returndata) = target.delegatecall(data) (@openzeppelin/contracts/utils/Address.sol#185)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IUniswapV2Router01.WETH() (contracts/Bags.sol#43) is not in mixedCase
Parameter Bags.setSwapAndLiquifyEnabled(bool)._enabled (contracts/Bags.sol#518) is not in mixedCase
Parameter Bags.calculateTaxFee(uint256)._amount (contracts/Bags.sol#617) is not in mixedCase
Parameter Bags.calculateLiquidityFee(uint256)._amount (contracts/Bags.sol#621) is not in mixedCase
Variable Bags._taxFee (contracts/Bags.sol#268) is not in mixedCase
Variable Bags._liquidityFee (contracts/Bags.sol#271) is not in mixedCase
Variable Bags._maxTxAmount (contracts/Bags.sol#280) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Bags.addLiquidity(uint256,uint256) (contracts/Bags.sol#750-763) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/Bags.sol#755-762)
Ensure that all the return values of the function calls are used.
Additional information: link
Bags.allowance(address,address).owner (contracts/Bags.sol#348) shadows:
- Ownable.owner() (@openzeppelin/contracts/access/Ownable.sol#34-36) (function)
Bags._approve(address,address,uint256).owner (contracts/Bags.sol#649) shadows:
- Ownable.owner() (@openzeppelin/contracts/access/Ownable.sol#34-36) (function)
Rename the local variables that shadow another component.
Additional information: link
Bags.setTaxFeePercent(uint256) (contracts/Bags.sol#506-508) should emit an event for:
- _taxFee = taxFee (contracts/Bags.sol#507)
Bags.setLiquidityFeePercent(uint256) (contracts/Bags.sol#510-512) should emit an event for:
- _liquidityFee = liquidityFee (contracts/Bags.sol#511)
Bags.setMaxTxPercent(uint256) (contracts/Bags.sol#514-516) should emit an event for:
- _maxTxAmount = _tTotal.mul(maxTxPercent).div(10 ** 2) (contracts/Bags.sol#515)
Emit an event for critical parameter changes.
Additional information: link
Reentrancy in Bags._transfer(address,address,uint256) (contracts/Bags.sol#660-707):
External calls:
- swapAndLiquify(contractTokenBalance) (contracts/Bags.sol#694)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/Bags.sol#755-762)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/Bags.sol#741-747)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (contracts/Bags.sol#694)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/Bags.sol#755-762)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (contracts/Bags.sol#706)
- _liquidityFee = _previousLiquidityFee (contracts/Bags.sol#641)
- _liquidityFee = 0 (contracts/Bags.sol#636)
- _tokenTransfer(from,to,amount,takeFee) (contracts/Bags.sol#706)
- _previousLiquidityFee = _liquidityFee (contracts/Bags.sol#633)
- _tokenTransfer(from,to,amount,takeFee) (contracts/Bags.sol#706)
- _previousTaxFee = _taxFee (contracts/Bags.sol#632)
- _tokenTransfer(from,to,amount,takeFee) (contracts/Bags.sol#706)
- _tFeeTotal = _tFeeTotal.add(tFee) (contracts/Bags.sol#528)
- _tokenTransfer(from,to,amount,takeFee) (contracts/Bags.sol#706)
- _taxFee = _previousTaxFee (contracts/Bags.sol#640)
- _taxFee = 0 (contracts/Bags.sol#635)
Reentrancy in Bags.constructor() (contracts/Bags.sol#297-316):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (contracts/Bags.sol#303-306)
State variables written after the call(s):
- _isExcludedFromFee[owner()] = true (contracts/Bags.sol#312)
- _isExcludedFromFee[address(this)] = true (contracts/Bags.sol#313)
- uniswapV2Router = _uniswapV2Router (contracts/Bags.sol#309)
Reentrancy in Bags.setRouterAddress(address,bool) (contracts/Bags.sol#852-864):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_newPancakeRouter.factory()).createPair(address(this),_newPancakeRouter.WETH()) (contracts/Bags.sol#858-861)
State variables written after the call(s):
- uniswapV2Router = _newPancakeRouter (contracts/Bags.sol#863)
Reentrancy in Bags.swapAndLiquify(uint256) (contracts/Bags.sol#709-730):
External calls:
- swapTokensForEth(half) (contracts/Bags.sol#721)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/Bags.sol#741-747)
- addLiquidity(otherHalf,newBalance) (contracts/Bags.sol#727)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/Bags.sol#755-762)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (contracts/Bags.sol#727)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/Bags.sol#755-762)
State variables written after the call(s):
- addLiquidity(otherHalf,newBalance) (contracts/Bags.sol#727)
- _allowances[owner][spender] = amount (contracts/Bags.sol#656)
Reentrancy in Bags.transferFrom(address,address,uint256) (contracts/Bags.sol#366-381):
External calls:
- _transfer(sender,recipient,amount) (contracts/Bags.sol#371)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/Bags.sol#755-762)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/Bags.sol#741-747)
External calls sending eth:
- _transfer(sender,recipient,amount) (contracts/Bags.sol#371)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/Bags.sol#755-762)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (contracts/Bags.sol#372-379)
- _allowances[owner][spender] = amount (contracts/Bags.sol#656)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in Bags._transfer(address,address,uint256) (contracts/Bags.sol#660-707):
External calls:
- swapAndLiquify(contractTokenBalance) (contracts/Bags.sol#694)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/Bags.sol#755-762)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/Bags.sol#741-747)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (contracts/Bags.sol#694)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/Bags.sol#755-762)
Event emitted after the call(s):
- Transfer(sender,recipient,tTransferAmount) (contracts/Bags.sol#806)
- _tokenTransfer(from,to,amount,takeFee) (contracts/Bags.sol#706)
- Transfer(sender,recipient,tTransferAmount) (contracts/Bags.sol#827)
- _tokenTransfer(from,to,amount,takeFee) (contracts/Bags.sol#706)
- Transfer(sender,recipient,tTransferAmount) (contracts/Bags.sol#848)
- _tokenTransfer(from,to,amount,takeFee) (contracts/Bags.sol#706)
- Transfer(sender,recipient,tTransferAmount) (contracts/Bags.sol#495)
- _tokenTransfer(from,to,amount,takeFee) (contracts/Bags.sol#706)
Reentrancy in Bags.constructor() (contracts/Bags.sol#297-316):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (contracts/Bags.sol#303-306)
Event emitted after the call(s):
- Transfer(address(0),_msgSender(),_tTotal) (contracts/Bags.sol#315)
Reentrancy in Bags.swapAndLiquify(uint256) (contracts/Bags.sol#709-730):
External calls:
- swapTokensForEth(half) (contracts/Bags.sol#721)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/Bags.sol#741-747)
- addLiquidity(otherHalf,newBalance) (contracts/Bags.sol#727)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/Bags.sol#755-762)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (contracts/Bags.sol#727)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/Bags.sol#755-762)
Event emitted after the call(s):
- Approval(owner,spender,amount) (contracts/Bags.sol#657)
- addLiquidity(otherHalf,newBalance) (contracts/Bags.sol#727)
- SwapAndLiquify(half,newBalance,otherHalf) (contracts/Bags.sol#729)
Reentrancy in Bags.transferFrom(address,address,uint256) (contracts/Bags.sol#366-381):
External calls:
- _transfer(sender,recipient,amount) (contracts/Bags.sol#371)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/Bags.sol#755-762)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/Bags.sol#741-747)
External calls sending eth:
- _transfer(sender,recipient,amount) (contracts/Bags.sol#371)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/Bags.sol#755-762)
Event emitted after the call(s):
- Approval(owner,spender,amount) (contracts/Bags.sol#657)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (contracts/Bags.sol#372-379)
Apply the check-effects-interactions pattern.
Additional information: link
Address.isContract(address) (@openzeppelin/contracts/utils/Address.sol#26-36) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/Address.sol#32-34)
Address.verifyCallResult(bool,bytes,string) (@openzeppelin/contracts/utils/Address.sol#195-215) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/Address.sol#207-210)
Do not use evm assembly.
Additional information: link
Different versions of Solidity is used:
- Version used: ['0.8.4', '^0.8.0']
- ^0.8.0 (@openzeppelin/contracts/access/Ownable.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/Address.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/Context.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/math/SafeMath.sol#3)
- 0.8.4 (contracts/Bags.sol#1)
- ABIEncoderV2 (contracts/Bags.sol#2)
Use one Solidity version.
Additional information: link
Address.functionCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#79-81) is never used and should be removed
Address.functionCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#89-95) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (@openzeppelin/contracts/utils/Address.sol#108-114) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts/utils/Address.sol#122-133) is never used and should be removed
Address.functionDelegateCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#168-170) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#178-187) is never used and should be removed
Address.functionStaticCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#141-143) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#151-160) is never used and should be removed
Address.isContract(address) (@openzeppelin/contracts/utils/Address.sol#26-36) is never used and should be removed
Address.sendValue(address,uint256) (@openzeppelin/contracts/utils/Address.sol#54-59) is never used and should be removed
Address.verifyCallResult(bool,bytes,string) (@openzeppelin/contracts/utils/Address.sol#195-215) is never used and should be removed
Context._msgData() (@openzeppelin/contracts/utils/Context.sol#20-22) is never used and should be removed
SafeMath.div(uint256,uint256,string) (@openzeppelin/contracts/utils/math/SafeMath.sol#190-199) is never used and should be removed
SafeMath.mod(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#150-152) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (@openzeppelin/contracts/utils/math/SafeMath.sol#216-225) is never used and should be removed
SafeMath.tryAdd(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#21-27) is never used and should be removed
SafeMath.tryDiv(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#63-68) is never used and should be removed
SafeMath.tryMod(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#75-80) is never used and should be removed
SafeMath.tryMul(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#46-56) is never used and should be removed
SafeMath.trySub(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#34-39) is never used and should be removed
Remove unused functions.
Additional information: link
Bags._rTotal (contracts/Bags.sol#261) is set pre-construction with a non-constant function or state variable:
- (MAX - (MAX % _tTotal))
Bags._previousTaxFee (contracts/Bags.sol#269) is set pre-construction with a non-constant function or state variable:
- _taxFee
Bags._previousLiquidityFee (contracts/Bags.sol#272) 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 (@openzeppelin/contracts/access/Ownable.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/Address.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/Context.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/math/SafeMath.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
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (contracts/Bags.sol#48) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (contracts/Bags.sol#49)
Variable Bags._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#837) is too similar to Bags._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#839)
Variable Bags.reflectionFromToken(uint256,bool).rTransferAmount (contracts/Bags.sol#442) is too similar to Bags._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#485)
Variable Bags._transferToExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#816) is too similar to Bags._transferStandard(address,address,uint256).tTransferAmount (contracts/Bags.sol#798)
Variable Bags.reflectionFromToken(uint256,bool).rTransferAmount (contracts/Bags.sol#442) is too similar to Bags._transferStandard(address,address,uint256).tTransferAmount (contracts/Bags.sol#798)
Variable Bags._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (contracts/Bags.sol#587) is too similar to Bags._getValues(uint256).tTransferAmount (contracts/Bags.sol#543)
Variable Bags._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#483) is too similar to Bags._getValues(uint256).tTransferAmount (contracts/Bags.sol#543)
Variable Bags._transferToExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#816) is too similar to Bags._transferToExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#818)
Variable Bags.reflectionFromToken(uint256,bool).rTransferAmount (contracts/Bags.sol#442) is too similar to Bags._transferToExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#818)
Variable Bags._transferToExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#816) is too similar to Bags._getValues(uint256).tTransferAmount (contracts/Bags.sol#543)
Variable Bags._getValues(uint256).rTransferAmount (contracts/Bags.sol#546) is too similar to Bags._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#485)
Variable Bags.reflectionFromToken(uint256,bool).rTransferAmount (contracts/Bags.sol#442) is too similar to Bags._getValues(uint256).tTransferAmount (contracts/Bags.sol#543)
Variable Bags._transferToExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#816) is too similar to Bags._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#839)
Variable Bags.reflectionFromToken(uint256,bool).rTransferAmount (contracts/Bags.sol#442) is too similar to Bags._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#839)
Variable Bags._getValues(uint256).rTransferAmount (contracts/Bags.sol#546) is too similar to Bags._transferStandard(address,address,uint256).tTransferAmount (contracts/Bags.sol#798)
Variable Bags._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#837) is too similar to Bags._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#485)
Variable Bags._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#837) is too similar to Bags._transferStandard(address,address,uint256).tTransferAmount (contracts/Bags.sol#798)
Variable Bags._getValues(uint256).rTransferAmount (contracts/Bags.sol#546) is too similar to Bags._getValues(uint256).tTransferAmount (contracts/Bags.sol#543)
Variable Bags._getValues(uint256).rTransferAmount (contracts/Bags.sol#546) is too similar to Bags._transferToExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#818)
Variable Bags._getValues(uint256).rTransferAmount (contracts/Bags.sol#546) is too similar to Bags._getTValues(uint256).tTransferAmount (contracts/Bags.sol#566)
Variable Bags._getValues(uint256).rTransferAmount (contracts/Bags.sol#546) is too similar to Bags._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#839)
Variable Bags._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (contracts/Bags.sol#587) is too similar to Bags._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#485)
Variable Bags._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#837) is too similar to Bags._transferToExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#818)
Variable Bags._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (contracts/Bags.sol#587) is too similar to Bags._transferStandard(address,address,uint256).tTransferAmount (contracts/Bags.sol#798)
Variable Bags._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#483) is too similar to Bags._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#485)
Variable Bags._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#837) is too similar to Bags._getValues(uint256).tTransferAmount (contracts/Bags.sol#543)
Variable Bags._transferToExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#816) is too similar to Bags._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#485)
Variable Bags._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (contracts/Bags.sol#587) is too similar to Bags._transferToExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#818)
Variable Bags._transferStandard(address,address,uint256).rTransferAmount (contracts/Bags.sol#796) is too similar to Bags._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#485)
Variable Bags._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#483) is too similar to Bags._transferStandard(address,address,uint256).tTransferAmount (contracts/Bags.sol#798)
Variable Bags._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#483) is too similar to Bags._transferToExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#818)
Variable Bags._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (contracts/Bags.sol#587) is too similar to Bags._getTValues(uint256).tTransferAmount (contracts/Bags.sol#566)
Variable Bags._transferStandard(address,address,uint256).rTransferAmount (contracts/Bags.sol#796) is too similar to Bags._transferStandard(address,address,uint256).tTransferAmount (contracts/Bags.sol#798)
Variable Bags._transferStandard(address,address,uint256).rTransferAmount (contracts/Bags.sol#796) is too similar to Bags._transferToExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#818)
Variable Bags.reflectionFromToken(uint256,bool).rTransferAmount (contracts/Bags.sol#442) is too similar to Bags._getTValues(uint256).tTransferAmount (contracts/Bags.sol#566)
Variable Bags._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#483) is too similar to Bags._getTValues(uint256).tTransferAmount (contracts/Bags.sol#566)
Variable Bags._transferStandard(address,address,uint256).rTransferAmount (contracts/Bags.sol#796) is too similar to Bags._getTValues(uint256).tTransferAmount (contracts/Bags.sol#566)
Variable Bags._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (contracts/Bags.sol#587) is too similar to Bags._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#839)
Variable Bags._transferStandard(address,address,uint256).rTransferAmount (contracts/Bags.sol#796) is too similar to Bags._getValues(uint256).tTransferAmount (contracts/Bags.sol#543)
Variable Bags._transferToExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#816) is too similar to Bags._getTValues(uint256).tTransferAmount (contracts/Bags.sol#566)
Variable Bags._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#483) is too similar to Bags._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#839)
Variable Bags._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/Bags.sol#837) is too similar to Bags._getTValues(uint256).tTransferAmount (contracts/Bags.sol#566)
Variable Bags._transferStandard(address,address,uint256).rTransferAmount (contracts/Bags.sol#796) is too similar to Bags._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/Bags.sol#839)
Prevent variables from having similar names.
Additional information: link
Bags.slitherConstructorVariables() (contracts/Bags.sol#246-865) uses literals with too many digits:
- _tTotal = 10000000 * 10 ** 9 (contracts/Bags.sol#260)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
Bags._decimals (contracts/Bags.sol#266) should be constant
Bags._name (contracts/Bags.sol#264) should be constant
Bags._symbol (contracts/Bags.sol#265) should be constant
Bags._tTotal (contracts/Bags.sol#260) should be constant
Bags.numTokensSellToAddToLiquidity (contracts/Bags.sol#281) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (@openzeppelin/contracts/access/Ownable.sol#53-55)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (@openzeppelin/contracts/access/Ownable.sol#61-64)
name() should be declared external:
- Bags.name() (contracts/Bags.sol#318-320)
symbol() should be declared external:
- Bags.symbol() (contracts/Bags.sol#322-324)
decimals() should be declared external:
- Bags.decimals() (contracts/Bags.sol#326-328)
totalSupply() should be declared external:
- Bags.totalSupply() (contracts/Bags.sol#330-332)
transfer(address,uint256) should be declared external:
- Bags.transfer(address,uint256) (contracts/Bags.sol#339-346)
allowance(address,address) should be declared external:
- Bags.allowance(address,address) (contracts/Bags.sol#348-355)
approve(address,uint256) should be declared external:
- Bags.approve(address,uint256) (contracts/Bags.sol#357-364)
transferFrom(address,address,uint256) should be declared external:
- Bags.transferFrom(address,address,uint256) (contracts/Bags.sol#366-381)
increaseAllowance(address,uint256) should be declared external:
- Bags.increaseAllowance(address,uint256) (contracts/Bags.sol#383-394)
decreaseAllowance(address,uint256) should be declared external:
- Bags.decreaseAllowance(address,uint256) (contracts/Bags.sol#396-410)
isExcludedFromReward(address) should be declared external:
- Bags.isExcludedFromReward(address) (contracts/Bags.sol#412-414)
totalFees() should be declared external:
- Bags.totalFees() (contracts/Bags.sol#416-418)
deliver(uint256) should be declared external:
- Bags.deliver(uint256) (contracts/Bags.sol#420-430)
reflectionFromToken(uint256,bool) should be declared external:
- Bags.reflectionFromToken(uint256,bool) (contracts/Bags.sol#432-445)
excludeFromReward(address) should be declared external:
- Bags.excludeFromReward(address) (contracts/Bags.sol#453-461)
excludeFromFee(address) should be declared external:
- Bags.excludeFromFee(address) (contracts/Bags.sol#498-500)
includeInFee(address) should be declared external:
- Bags.includeInFee(address) (contracts/Bags.sol#502-504)
setSwapAndLiquifyEnabled(bool) should be declared external:
- Bags.setSwapAndLiquifyEnabled(bool) (contracts/Bags.sol#518-521)
isExcludedFromFee(address) should be declared external:
- Bags.isExcludedFromFee(address) (contracts/Bags.sol#644-646)
setRouterAddress(address,bool) should be declared external:
- Bags.setRouterAddress(address,bool) (contracts/Bags.sol#852-864)
Use the external attribute for functions never called from the contract.
Additional information: link
BscScan page for the token does not contain additional info: website, socials, description, etc.
Additional information: link
Unable to find audit link on the website
Unable to find token on CoinMarketCap
Additional information: link
Token is not listed at Mobula.Finance
Additional information: link
Unable to find token on CoinHunt
Additional information: link
Young tokens have high risks of scam / price dump / death
Young tokens have high risks of scam / price dump / death
Young tokens have high risks of scam / price dump / death
Young tokens have high risks of scam / price dump / death
Token has no active CoinMarketCap listing / rank
Token has relatively low CoinGecko rank
Unable to find Blog account (Reddit or Medium)
Unable to find Youtube account
Unable to find Discord account
Twitter account has few posts