Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
BA2Token._transfer(address,address,uint256) (#822-862) uses a dangerous strict equality:
- shouldSetInviter = balanceOf(to) == 0 && inviter[to] == address(0) && from != uniswapV2Pair (#841-843)
BA2Token.setShare(address) (#901-910) uses a dangerous strict equality:
- IERC20(uniswapV2Pair).balanceOf(shareholder) == 0 (#903)
BA2Token.setShare(address) (#901-910) uses a dangerous strict equality:
- IERC20(uniswapV2Pair).balanceOf(shareholder) == 0 (#906)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
BA2Token._takeInviterFee(address,address,uint256) (#962-1001) performs a multiplication on the result of a division:
-_tOwned[address(this)] = _tOwned[address(this)].add(tAmount.div(10000).mul(_inviterFee)) (#974)
BA2Token._takeInviterFee(address,address,uint256) (#962-1001) performs a multiplication on the result of a division:
-Transfer(sender,address(this),tAmount.div(10000).mul(_inviterFee)) (#975)
BA2Token._takeInviterFee(address,address,uint256) (#962-1001) performs a multiplication on the result of a division:
-_tOwned[address(this)] = _tOwned[address(this)].add(tAmount.div(10000).mul(_inviterFee.sub(accurRate))) (#999)
BA2Token._takeInviterFee(address,address,uint256) (#962-1001) performs a multiplication on the result of a division:
-Transfer(sender,address(this),tAmount.div(10000).mul(_inviterFee.sub(accurRate))) (#1000)
BA2Token._takeInviterFee(address,address,uint256) (#962-1001) performs a multiplication on the result of a division:
-curTAmount = tAmount.div(10000).mul(rate) (#995)
BA2Token._transferStandard(address,address,uint256) (#1096-1124) performs a multiplication on the result of a division:
-_takeburnAndMarketFee(sender,tAmount.div(10000).mul(_burnAndMarketFee)) (#1104)
BA2Token._transferStandard(address,address,uint256) (#1096-1124) performs a multiplication on the result of a division:
-_takeLPFee(sender,tAmount.div(10000).mul(_LPFee.add(_satFee))) (#1107)
BA2Token._transferStandard(address,address,uint256) (#1096-1124) performs a multiplication on the result of a division:
-_takesatFee(sender,recipient,tAmount.div(10000).mul(_satFee)) (#1113)
BA2Token._transferStandard(address,address,uint256) (#1096-1124) performs a multiplication on the result of a division:
-_tOwned[recipient] = _tOwned[recipient].add(tAmount.div(10000).mul(recipientRate)) (#1120-1122)
BA2Token._transferStandard(address,address,uint256) (#1096-1124) performs a multiplication on the result of a division:
-Transfer(sender,recipient,tAmount.div(10000).mul(recipientRate)) (#1123)
Consider ordering multiplication before division.
Additional information: link
Reentrancy in BA2Token._tokenTransfer(address,address,uint256,bool) (#925-936):
External calls:
- _transferStandard(sender,recipient,amount) (#933)
- uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1085-1091)
State variables written after the call(s):
- restoreAllFee() (#935)
- _LPFee = _previousLPFee (#805)
- restoreAllFee() (#935)
- _burnAndMarketFee = _previousburnAndMarketFee (#804)
- restoreAllFee() (#935)
- _inviterFee = _previousInviterFee (#806)
- restoreAllFee() (#935)
- _satFee = _previousatFee (#807)
Reentrancy in BA2Token._transfer(address,address,uint256) (#822-862):
External calls:
- _tokenTransfer(from,to,amount,takeFee) (#846)
- uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1085-1091)
State variables written after the call(s):
- process(distributorGas) (#859)
- _tOwned[address(this)] = _tOwned[address(this)].sub(amount) (#897)
- _tOwned[shareholder] = _tOwned[shareholder].add(amount) (#898)
- inviter[to] = from (#849)
Reentrancy in BA2Token._transferStandard(address,address,uint256) (#1096-1124):
External calls:
- _takesatFee(sender,recipient,tAmount.div(10000).mul(_satFee)) (#1113)
- uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1085-1091)
State variables written after the call(s):
- _tOwned[recipient] = _tOwned[recipient].add(tAmount.div(10000).mul(recipientRate)) (#1120-1122)
Apply the check-effects-interactions pattern.
Additional information: link
BA2Token.swapTokensForEth(uint256) (#1034-1052) ignores return value by uniswapV2Router.swapExactTokensForETH(tokenAmount,0,path,address(this),block.timestamp) (#1043-1049)
BA2Token.swapEthForToken(uint256,address) (#1054-1072) ignores return value by uniswapV2Router.swapExactETHForTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1064-1069)
BA2Token.swapThisTokenForToken(uint256,address) (#1074-1094) ignores return value by uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1085-1091)
Ensure that all the return values of the function calls are used.
Additional information: link
BA2Token.allowance(address,address).owner (#698) shadows:
- Ownable.owner() (#98-100) (function)
BA2Token._approve(address,address,uint256).owner (#811) shadows:
- Ownable.owner() (#98-100) (function)
Rename the local variables that shadow another component.
Additional information: link
Reentrancy in BA2Token._transfer(address,address,uint256) (#822-862):
External calls:
- _tokenTransfer(from,to,amount,takeFee) (#846)
- uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1085-1091)
State variables written after the call(s):
- LPFeefenhong = block.timestamp (#860)
- setShare(fromAddress) (#853)
- _updated[shareholder] = false (#917)
- _updated[shareholder] = true (#908)
- setShare(toAddress) (#854)
- _updated[shareholder] = false (#917)
- _updated[shareholder] = true (#908)
- process(distributorGas) (#859)
- currentIndex = 0 (#875)
- currentIndex ++ (#880)
- currentIndex ++ (#889)
- fromAddress = from (#851)
- fromAddress = from (#856)
- setShare(fromAddress) (#853)
- shareholderIndexes[shareholder] = shareholders.length (#912)
- shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder] (#921)
- setShare(toAddress) (#854)
- shareholderIndexes[shareholder] = shareholders.length (#912)
- shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder] (#921)
- setShare(fromAddress) (#853)
- shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1] (#920)
- shareholders.push(shareholder) (#913)
- shareholders.pop() (#922)
- setShare(toAddress) (#854)
- shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1] (#920)
- shareholders.push(shareholder) (#913)
- shareholders.pop() (#922)
- toAddress = to (#852)
- toAddress = to (#857)
Reentrancy in BA2Token.constructor() (#644-667):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#653-654)
State variables written after the call(s):
- _isExcludedFromFee[msg.sender] = true (#660)
- _isExcludedFromFee[projectAddress] = true (#661)
- _isExcludedFromFee[address(this)] = true (#662)
- isDividendExempt[address(this)] = true (#663)
- isDividendExempt[address(0)] = true (#664)
- uniswapV2Router = _uniswapV2Router (#657)
Reentrancy in BA2Token.transferFrom(address,address,uint256) (#723-738):
External calls:
- _transfer(sender,recipient,amount) (#728)
- uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1085-1091)
State variables written after the call(s):
- _approve(sender,msg.sender,_allowances[sender][msg.sender].sub(amount,ERC20: transfer amount exceeds allowance)) (#729-736)
- _allowances[owner][spender] = amount (#818)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in BA2Token._transfer(address,address,uint256) (#822-862):
External calls:
- _tokenTransfer(from,to,amount,takeFee) (#846)
- uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1085-1091)
Event emitted after the call(s):
- Transfer(address(this),shareholder,amount) (#899)
- process(distributorGas) (#859)
Reentrancy in BA2Token._transferStandard(address,address,uint256) (#1096-1124):
External calls:
- _takesatFee(sender,recipient,tAmount.div(10000).mul(_satFee)) (#1113)
- uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1085-1091)
Event emitted after the call(s):
- Transfer(sender,recipient,tAmount.div(10000).mul(recipientRate)) (#1123)
Reentrancy in BA2Token.constructor() (#644-667):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#653-654)
Event emitted after the call(s):
- Transfer(address(0),projectAddress,_tTotal) (#666)
Reentrancy in BA2Token.transferFrom(address,address,uint256) (#723-738):
External calls:
- _transfer(sender,recipient,amount) (#728)
- uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1085-1091)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#819)
- _approve(sender,msg.sender,_allowances[sender][msg.sender].sub(amount,ERC20: transfer amount exceeds allowance)) (#729-736)
Apply the check-effects-interactions pattern.
Additional information: link
BA2Token._transfer(address,address,uint256) (#822-862) uses timestamp for comparisons
Dangerous comparisons:
- _tOwned[address(this)] >= 1 * 10 ** 4 * 10 ** 18 && from != address(this) && LPFeefenhong.add(minPeriod) <= block.timestamp (#858)
Avoid relying on block.timestamp.
Additional information: link
BA2Token.swapEthForToken(uint256,address) (#1054-1072) is never used and should be removed
BA2Token.swapTokensForEth(uint256) (#1034-1052) is never used and should be removed
Remove unused functions.
Additional information: link
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (#300) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#302) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#333) is not in mixedCase
Function IUniswapV2Router01.WETH() (#379) is not in mixedCase
Constant BA2Token.MarketAddr (#594) is not in UPPER_CASE_WITH_UNDERSCORES
Variable BA2Token._burnAndMarketFee (#603) is not in mixedCase
Variable BA2Token._burnFee (#606) is not in mixedCase
Variable BA2Token._LPFee (#608) is not in mixedCase
Variable BA2Token._marketingFee (#611) is not in mixedCase
Variable BA2Token._satFee (#613) is not in mixedCase
Variable BA2Token._inviterFee (#616) is not in mixedCase
Variable BA2Token.LPFeefenhong (#622) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#384) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#385)
Prevent variables from having similar names.
Additional information: link
BA2Token.slitherConstructorVariables() (#582-1126) uses literals with too many digits:
- distributorGas = 500000 (#620)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
Ownable._previousOwner (#87) is never used in BA2Token (#582-1126)
Ownable._lockTime (#88) is never used in BA2Token (#582-1126)
Remove unused state variables.
Additional information: link
BA2Token._burnFee (#606) should be constant
BA2Token._decimals (#601) should be constant
BA2Token._marketingFee (#611) should be constant
BA2Token._name (#599) should be constant
BA2Token._symbol (#600) should be constant
BA2Token._tTotal (#619) should be constant
BA2Token.distributorGas (#620) should be constant
BA2Token.minPeriod (#621) should be constant
BA2Token.projectAddress (#592) should be constant
BA2Token.sat (#591) should be constant
Ownable._lockTime (#88) should be constant
Ownable._previousOwner (#87) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#107-110)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#112-116)
name() should be declared external:
- BA2Token.name() (#669-671)
symbol() should be declared external:
- BA2Token.symbol() (#673-675)
decimals() should be declared external:
- BA2Token.decimals() (#677-679)
totalSupply() should be declared external:
- BA2Token.totalSupply() (#681-683)
transfer(address,uint256) should be declared external:
- BA2Token.transfer(address,uint256) (#689-696)
allowance(address,address) should be declared external:
- BA2Token.allowance(address,address) (#698-705)
approve(address,uint256) should be declared external:
- BA2Token.approve(address,uint256) (#707-721)
transferFrom(address,address,uint256) should be declared external:
- BA2Token.transferFrom(address,address,uint256) (#723-738)
increaseAllowance(address,uint256) should be declared external:
- BA2Token.increaseAllowance(address,uint256) (#740-751)
decreaseAllowance(address,uint256) should be declared external:
- BA2Token.decreaseAllowance(address,uint256) (#753-767)
totalFees() should be declared external:
- BA2Token.totalFees() (#769-771)
isExcludedFromFee(address) should be declared external:
- BA2Token.isExcludedFromFee(address) (#773-775)
excludeFromFee(address) should be declared external:
- BA2Token.excludeFromFee(address) (#776-778)
includeInFee(address) should be declared external:
- BA2Token.includeInFee(address) (#780-782)
transferContracts() should be declared external:
- BA2Token.transferContracts() (#784-786)
Use the external attribute for functions never called from the contract.
Additional information: link
Unable to find website, listings and other project-related information
Young tokens have high risks of scam / price dump / death
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Unable to find Telegram and Twitter accounts