Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
BA2Token._transfer(address,address,uint256) (#824-867) uses a dangerous strict equality:
- shouldSetInviter = balanceOf(to) == 0 && inviter[to] == address(0) && from != uniswapV2Pair (#846-848)
BA2Token.setShare(address) (#906-915) uses a dangerous strict equality:
- IERC20(uniswapV2Pair).balanceOf(shareholder) == 0 (#908)
BA2Token.setShare(address) (#906-915) uses a dangerous strict equality:
- IERC20(uniswapV2Pair).balanceOf(shareholder) == 0 (#911)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
BA2Token._takeInviterFee(address,address,uint256) (#967-1006) performs a multiplication on the result of a division:
-_tOwned[MarketAddr] = _tOwned[MarketAddr].add(tAmount.div(10000).mul(_inviterFee)) (#979)
BA2Token._takeInviterFee(address,address,uint256) (#967-1006) performs a multiplication on the result of a division:
-Transfer(sender,MarketAddr,tAmount.div(10000).mul(_inviterFee)) (#980)
BA2Token._takeInviterFee(address,address,uint256) (#967-1006) performs a multiplication on the result of a division:
-_tOwned[MarketAddr] = _tOwned[MarketAddr].add(tAmount.div(10000).mul(_inviterFee.sub(accurRate))) (#1004)
BA2Token._takeInviterFee(address,address,uint256) (#967-1006) performs a multiplication on the result of a division:
-Transfer(sender,MarketAddr,tAmount.div(10000).mul(_inviterFee.sub(accurRate))) (#1005)
BA2Token._takeInviterFee(address,address,uint256) (#967-1006) performs a multiplication on the result of a division:
-curTAmount = tAmount.div(10000).mul(rate) (#1000)
BA2Token._transferStandard(address,address,uint256) (#1101-1129) performs a multiplication on the result of a division:
-_takeburnAndMarketFee(sender,tAmount.div(10000).mul(_burnAndMarketFee)) (#1109)
BA2Token._transferStandard(address,address,uint256) (#1101-1129) performs a multiplication on the result of a division:
-_takeLPFee(sender,tAmount.div(10000).mul(_LPFee.add(_satFee))) (#1112)
BA2Token._transferStandard(address,address,uint256) (#1101-1129) performs a multiplication on the result of a division:
-_takesatFee(sender,recipient,tAmount.div(10000).mul(_satFee)) (#1118)
BA2Token._transferStandard(address,address,uint256) (#1101-1129) performs a multiplication on the result of a division:
-_tOwned[recipient] = _tOwned[recipient].add(tAmount.div(10000).mul(recipientRate)) (#1125-1127)
BA2Token._transferStandard(address,address,uint256) (#1101-1129) performs a multiplication on the result of a division:
-Transfer(sender,recipient,tAmount.div(10000).mul(recipientRate)) (#1128)
Consider ordering multiplication before division.
Additional information: link
Reentrancy in BA2Token._tokenTransfer(address,address,uint256,bool) (#930-941):
External calls:
- _transferStandard(sender,recipient,amount) (#938)
- uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1090-1096)
State variables written after the call(s):
- restoreAllFee() (#940)
- _LPFee = _previousLPFee (#807)
- restoreAllFee() (#940)
- _burnAndMarketFee = _previousburnAndMarketFee (#806)
- restoreAllFee() (#940)
- _inviterFee = _previousInviterFee (#808)
- restoreAllFee() (#940)
- _satFee = _previousatFee (#809)
Reentrancy in BA2Token._transfer(address,address,uint256) (#824-867):
External calls:
- _tokenTransfer(from,to,amount,takeFee) (#851)
- uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1090-1096)
State variables written after the call(s):
- process(distributorGas) (#864)
- _tOwned[address(this)] = _tOwned[address(this)].sub(amount) (#902)
- _tOwned[shareholder] = _tOwned[shareholder].add(amount) (#903)
- inviter[to] = from (#854)
Reentrancy in BA2Token._transferStandard(address,address,uint256) (#1101-1129):
External calls:
- _takesatFee(sender,recipient,tAmount.div(10000).mul(_satFee)) (#1118)
- uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1090-1096)
State variables written after the call(s):
- _tOwned[recipient] = _tOwned[recipient].add(tAmount.div(10000).mul(recipientRate)) (#1125-1127)
Apply the check-effects-interactions pattern.
Additional information: link
BA2Token.swapTokensForEth(uint256) (#1039-1057) ignores return value by uniswapV2Router.swapExactTokensForETH(tokenAmount,0,path,address(this),block.timestamp) (#1048-1054)
BA2Token.swapEthForToken(uint256,address) (#1059-1077) ignores return value by uniswapV2Router.swapExactETHForTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1069-1074)
BA2Token.swapThisTokenForToken(uint256,address) (#1079-1099) ignores return value by uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1090-1096)
Ensure that all the return values of the function calls are used.
Additional information: link
BA2Token.allowance(address,address).owner (#700) shadows:
- Ownable.owner() (#100-102) (function)
BA2Token._approve(address,address,uint256).owner (#813) shadows:
- Ownable.owner() (#100-102) (function)
Rename the local variables that shadow another component.
Additional information: link
Reentrancy in BA2Token._transfer(address,address,uint256) (#824-867):
External calls:
- _tokenTransfer(from,to,amount,takeFee) (#851)
- uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1090-1096)
State variables written after the call(s):
- LPFeefenhong = block.timestamp (#865)
- setShare(fromAddress) (#858)
- _updated[shareholder] = false (#922)
- _updated[shareholder] = true (#913)
- setShare(toAddress) (#859)
- _updated[shareholder] = false (#922)
- _updated[shareholder] = true (#913)
- process(distributorGas) (#864)
- currentIndex = 0 (#880)
- currentIndex ++ (#885)
- currentIndex ++ (#894)
- fromAddress = from (#856)
- fromAddress = from (#861)
- setShare(fromAddress) (#858)
- shareholderIndexes[shareholder] = shareholders.length (#917)
- shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder] (#926)
- setShare(toAddress) (#859)
- shareholderIndexes[shareholder] = shareholders.length (#917)
- shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder] (#926)
- setShare(fromAddress) (#858)
- shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1] (#925)
- shareholders.push(shareholder) (#918)
- shareholders.pop() (#927)
- setShare(toAddress) (#859)
- shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1] (#925)
- shareholders.push(shareholder) (#918)
- shareholders.pop() (#927)
- toAddress = to (#857)
- toAddress = to (#862)
Reentrancy in BA2Token.constructor() (#646-669):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#655-656)
State variables written after the call(s):
- _isExcludedFromFee[msg.sender] = true (#662)
- _isExcludedFromFee[projectAddress] = true (#663)
- _isExcludedFromFee[address(this)] = true (#664)
- isDividendExempt[address(this)] = true (#665)
- isDividendExempt[address(0)] = true (#666)
- uniswapV2Router = _uniswapV2Router (#659)
Reentrancy in BA2Token.transferFrom(address,address,uint256) (#725-740):
External calls:
- _transfer(sender,recipient,amount) (#730)
- uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1090-1096)
State variables written after the call(s):
- _approve(sender,msg.sender,_allowances[sender][msg.sender].sub(amount,ERC20: transfer amount exceeds allowance)) (#731-738)
- _allowances[owner][spender] = amount (#820)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in BA2Token._transfer(address,address,uint256) (#824-867):
External calls:
- _tokenTransfer(from,to,amount,takeFee) (#851)
- uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1090-1096)
Event emitted after the call(s):
- Transfer(address(this),shareholder,amount) (#904)
- process(distributorGas) (#864)
Reentrancy in BA2Token._transferStandard(address,address,uint256) (#1101-1129):
External calls:
- _takesatFee(sender,recipient,tAmount.div(10000).mul(_satFee)) (#1118)
- uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1090-1096)
Event emitted after the call(s):
- Transfer(sender,recipient,tAmount.div(10000).mul(recipientRate)) (#1128)
Reentrancy in BA2Token.constructor() (#646-669):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#655-656)
Event emitted after the call(s):
- Transfer(address(0),projectAddress,_tTotal) (#668)
Reentrancy in BA2Token.transferFrom(address,address,uint256) (#725-740):
External calls:
- _transfer(sender,recipient,amount) (#730)
- uniswapV2Router.swapExactTokensForTokens(thisTokenAmount,0,path,receiver,block.timestamp) (#1090-1096)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#821)
- _approve(sender,msg.sender,_allowances[sender][msg.sender].sub(amount,ERC20: transfer amount exceeds allowance)) (#731-738)
Apply the check-effects-interactions pattern.
Additional information: link
BA2Token._transfer(address,address,uint256) (#824-867) uses timestamp for comparisons
Dangerous comparisons:
- _tOwned[address(this)] >= 1 * 10 ** 1 * 10 ** 18 && from != address(this) && LPFeefenhong.add(minPeriod) <= block.timestamp (#863)
Avoid relying on block.timestamp.
Additional information: link
BA2Token.swapEthForToken(uint256,address) (#1059-1077) is never used and should be removed
BA2Token.swapTokensForEth(uint256) (#1039-1057) is never used and should be removed
Remove unused functions.
Additional information: link
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (#302) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#304) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#335) is not in mixedCase
Function IUniswapV2Router01.WETH() (#381) is not in mixedCase
Constant BA2Token.MarketAddr (#596) is not in UPPER_CASE_WITH_UNDERSCORES
Variable BA2Token._burnAndMarketFee (#605) is not in mixedCase
Variable BA2Token._burnFee (#608) is not in mixedCase
Variable BA2Token._LPFee (#610) is not in mixedCase
Variable BA2Token._marketingFee (#613) is not in mixedCase
Variable BA2Token._satFee (#615) is not in mixedCase
Variable BA2Token._inviterFee (#618) is not in mixedCase
Variable BA2Token.LPFeefenhong (#624) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#386) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#387)
Prevent variables from having similar names.
Additional information: link
BA2Token.slitherConstructorVariables() (#584-1131) uses literals with too many digits:
- distributorGas = 500000 (#622)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
Ownable._previousOwner (#89) is never used in BA2Token (#584-1131)
Ownable._lockTime (#90) is never used in BA2Token (#584-1131)
Remove unused state variables.
Additional information: link
BA2Token._burnFee (#608) should be constant
BA2Token._decimals (#603) should be constant
BA2Token._marketingFee (#613) should be constant
BA2Token._name (#601) should be constant
BA2Token._symbol (#602) should be constant
BA2Token._tTotal (#621) should be constant
BA2Token.distributorGas (#622) should be constant
BA2Token.minPeriod (#623) should be constant
BA2Token.projectAddress (#594) should be constant
BA2Token.sat (#593) should be constant
Ownable._lockTime (#90) should be constant
Ownable._previousOwner (#89) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#109-112)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#114-118)
name() should be declared external:
- BA2Token.name() (#671-673)
symbol() should be declared external:
- BA2Token.symbol() (#675-677)
decimals() should be declared external:
- BA2Token.decimals() (#679-681)
totalSupply() should be declared external:
- BA2Token.totalSupply() (#683-685)
transfer(address,uint256) should be declared external:
- BA2Token.transfer(address,uint256) (#691-698)
allowance(address,address) should be declared external:
- BA2Token.allowance(address,address) (#700-707)
approve(address,uint256) should be declared external:
- BA2Token.approve(address,uint256) (#709-723)
transferFrom(address,address,uint256) should be declared external:
- BA2Token.transferFrom(address,address,uint256) (#725-740)
increaseAllowance(address,uint256) should be declared external:
- BA2Token.increaseAllowance(address,uint256) (#742-753)
decreaseAllowance(address,uint256) should be declared external:
- BA2Token.decreaseAllowance(address,uint256) (#755-769)
totalFees() should be declared external:
- BA2Token.totalFees() (#771-773)
isExcludedFromFee(address) should be declared external:
- BA2Token.isExcludedFromFee(address) (#775-777)
excludeFromFee(address) should be declared external:
- BA2Token.excludeFromFee(address) (#778-780)
includeInFee(address) should be declared external:
- BA2Token.includeInFee(address) (#782-784)
transferContracts() should be declared external:
- BA2Token.transferContracts() (#786-788)
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