Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
HERO.airdrop(address) (#1021-1034) sends eth to arbitrary user
Dangerous calls:
- address(address(uint160(_refer))).transfer(referEth) (#1030)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in HERO._transfer(address,address,uint256) (#586-634):
External calls:
- swapTokens(contractTokenBalance) (#605)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#656-662)
External calls sending eth:
- swapTokens(contractTokenBalance) (#605)
- recipient.transfer(amount) (#950)
State variables written after the call(s):
- removeAllFee() (#616)
- _liquidityFee = 0 (#839)
- _liquidityFee = _buyLiquidityFee (#618)
- removeAllFee() (#623)
- _liquidityFee = 0 (#839)
- _liquidityFee = _sellLiquidityFee (#625)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _liquidityFee = _previousLiquidityFee (#845)
- _liquidityFee = 0 (#839)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#815)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#740)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#761)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#751)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#752)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#742)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#763)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#729)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#730)
- _rOwned[deadAddress] = _rOwned[deadAddress].add(rBurnAmount) (#731)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _rTotal = _rTotal.sub(rFee) (#770)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (#817)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#750)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#760)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#741)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#762)
Apply the check-effects-interactions pattern.
Additional information: link
HERO.swapTokenForTokens(address,address,uint256) (#684-687) ignores return value by tokenC.transfer(account,amount) (#686)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Ownable._lockTime (#156) is never initialized. It is used in:
- Ownable.getUnlockTime() (#181-183)
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
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.
Combination 2: Unchecked transfer + 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.
Combination 3: Reentrancy vulnerabilities + Unchecked transfer vulnerability. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
HERO._rTotal (#406) is set pre-construction with a non-constant function or state variable:
- (MAX - (MAX % _tTotal))
HERO._previousTaxFee (#415) is set pre-construction with a non-constant function or state variable:
- _taxFee
HERO._previousLiquidityFee (#418) is set pre-construction with a non-constant function or state variable:
- _liquidityFee
HERO._buyTaxFee (#420) is set pre-construction with a non-constant function or state variable:
- _taxFee
HERO._buyLiquidityFee (#421) is set pre-construction with a non-constant function or state variable:
- _liquidityFee
HERO._sellTaxFee (#423) is set pre-construction with a non-constant function or state variable:
- _taxFee
HERO._sellLiquidityFee (#424) is set pre-construction with a non-constant function or state variable:
- _liquidityFee
HERO._previousBurnFee (#427) is set pre-construction with a non-constant function or state variable:
- _burnFee
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
Address._functionCallWithValue(address,bytes,uint256,string) (#133-150) is never used and should be removed
Address.functionCall(address,bytes) (#116-118) is never used and should be removed
Address.functionCall(address,bytes,string) (#120-122) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#124-126) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#128-131) is never used and should be removed
Address.isContract(address) (#96-105) is never used and should be removed
Address.sendValue(address,uint256) (#107-113) is never used and should be removed
Context._msgData() (#29-32) is never used and should be removed
HERO.addLiquidity(uint256,uint256) (#689-702) is never used and should be removed
HERO.swapETHForTokens(uint256) (#667-682) is never used and should be removed
SafeMath.mod(uint256,uint256) (#84-86) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#88-91) is never used and should be removed
Remove unused functions.
Additional information: link
Low level call in Address.sendValue(address,uint256) (#107-113):
- (success) = recipient.call{value: amount}() (#111)
Low level call in Address._functionCallWithValue(address,bytes,uint256,string) (#133-150):
- (success,returndata) = target.call{value: weiValue}(data) (#136)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
HERO.swapTokens(uint256) (#636-644) performs a multiplication on the result of a division:
-charityBnb = transferredBalance.div(_liquidityFee).mul(charityDivisor) (#641)
HERO._transferStandard(address,address,uint256) (#722-736) performs a multiplication on the result of a division:
-tBurnAmount = tAmount.div(100).mul(_burnFee) (#725)
Consider ordering multiplication before division.
Additional information: link
HERO.addLiquidity(uint256,uint256) (#689-702) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#694-701)
Ensure that all the return values of the function calls are used.
Additional information: link
HERO.allowance(address,address).owner (#490) shadows:
- Ownable.owner() (#167-169) (function)
HERO._approve(address,address,uint256).owner (#578) shadows:
- Ownable.owner() (#167-169) (function)
Rename the local variables that shadow another component.
Additional information: link
HERO.setTaxFeePercent(uint256) (#861-863) should emit an event for:
- _taxFee = taxFee (#862)
HERO.setLiquidityFeePercent(uint256) (#865-867) should emit an event for:
- _liquidityFee = liquidityFee (#866)
HERO.setBuyTaxFeePercent(uint256) (#869-871) should emit an event for:
- _buyTaxFee = buyTaxFee (#870)
HERO.setBuyLiquidityFeePercent(uint256) (#873-875) should emit an event for:
- _buyLiquidityFee = buyLiquidityFee (#874)
HERO.setSellTaxFeePercent(uint256) (#877-879) should emit an event for:
- _sellTaxFee = sellTaxFee (#878)
HERO.setSellLiquidityFeePercent(uint256) (#881-883) should emit an event for:
- _sellLiquidityFee = sellLiquidityFee (#882)
HERO.setBurnFeePercent(uint256) (#885-887) should emit an event for:
- _burnFee = burnTaxFee (#886)
HERO.setMaxTxAmount(uint256) (#889-891) should emit an event for:
- _maxTxAmount = maxTxAmount (#890)
HERO.setCharityFeePercent(uint256) (#897-899) should emit an event for:
- charityDivisor = divisor (#898)
HERO.setNumTokensSellToAddToLiquidity(uint256) (#901-903) should emit an event for:
- minimumTokensBeforeSwap = _minimumTokensBeforeSwap (#902)
HERO.setALLFeePercent(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256) (#905-915) should emit an event for:
- charityDivisor = charity (#906)
- _burnFee = burnTaxFee (#908)
- _sellLiquidityFee = sellLiquidityFee (#909)
- _sellTaxFee = sellTaxFee (#910)
- _buyLiquidityFee = buyLiquidityFee (#911)
- _buyTaxFee = buyTaxFee (#912)
- _liquidityFee = liquidityFee (#913)
- _taxFee = taxFee (#914)
HERO.set(uint8,uint256) (#991-1019) should emit an event for:
- _referEth = value (#999)
- _referToken = value (#1001)
- _airdropEth = value (#1003)
- _airdropToken = value (#1005)
- salePrice = value (#1009)
- _airdorpBnb = value (#1012)
- _buyBnb = value (#1014)
Emit an event for critical parameter changes.
Additional information: link
HERO.setMarketingAddress(address)._marketingAddress (#917) lacks a zero-check on :
- marketingAddress = address(_marketingAddress) (#918)
HERO.setCharityAddress(address)._newaddress (#922) lacks a zero-check on :
- charityAddress = address(_newaddress) (#923)
HERO.transferToAddressETH(address,uint256).recipient (#949) lacks a zero-check on :
- recipient.transfer(amount) (#950)
Check that the address is not zero.
Additional information: link
Reentrancy in HERO._transfer(address,address,uint256) (#586-634):
External calls:
- swapTokens(contractTokenBalance) (#605)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#656-662)
External calls sending eth:
- swapTokens(contractTokenBalance) (#605)
- recipient.transfer(amount) (#950)
State variables written after the call(s):
- removeAllFee() (#616)
- _burnFee = 0 (#840)
- _burnFee = _previousBurnFee (#619)
- removeAllFee() (#623)
- _burnFee = 0 (#840)
- _burnFee = _previousBurnFee (#626)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _burnFee = _previousBurnFee (#846)
- _burnFee = 0 (#840)
- removeAllFee() (#616)
- _previousBurnFee = _burnFee (#837)
- removeAllFee() (#623)
- _previousBurnFee = _burnFee (#837)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _previousBurnFee = _burnFee (#837)
- removeAllFee() (#616)
- _previousLiquidityFee = _liquidityFee (#836)
- removeAllFee() (#623)
- _previousLiquidityFee = _liquidityFee (#836)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _previousLiquidityFee = _liquidityFee (#836)
- removeAllFee() (#616)
- _previousTaxFee = _taxFee (#835)
- removeAllFee() (#623)
- _previousTaxFee = _taxFee (#835)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _previousTaxFee = _taxFee (#835)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _tFeeTotal = _tFeeTotal.add(tFee) (#771)
- removeAllFee() (#616)
- _taxFee = 0 (#838)
- _taxFee = _buyTaxFee (#617)
- removeAllFee() (#623)
- _taxFee = 0 (#838)
- _taxFee = _sellTaxFee (#624)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _taxFee = _previousTaxFee (#844)
- _taxFee = 0 (#838)
Reentrancy in HERO.constructor() (#452-462):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#456-457)
State variables written after the call(s):
- _isExcludedFromFee[owner()] = true (#459)
- _isExcludedFromFee[address(this)] = true (#460)
- uniswapV2Router = _uniswapV2Router (#458)
Reentrancy in HERO.transferFrom(address,address,uint256) (#499-503):
External calls:
- _transfer(sender,recipient,amount) (#500)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#656-662)
External calls sending eth:
- _transfer(sender,recipient,amount) (#500)
- recipient.transfer(amount) (#950)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#501)
- _allowances[owner][spender] = amount (#582)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in HERO._transfer(address,address,uint256) (#586-634):
External calls:
- swapTokens(contractTokenBalance) (#605)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#656-662)
External calls sending eth:
- swapTokens(contractTokenBalance) (#605)
- recipient.transfer(amount) (#950)
Event emitted after the call(s):
- Transfer(sender,recipient,tTransferAmount) (#755)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- Transfer(sender,recipient,tTransferAmount) (#745)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- Transfer(sender,recipient,tTransferAmount) (#766)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- Transfer(sender,recipient,tTransferAmount) (#734)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- Transfer(sender,deadAddress,tBurnAmount) (#735)
- _tokenTransfer(from,to,amount,takeFee) (#633)
Reentrancy in HERO.constructor() (#452-462):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#456-457)
Event emitted after the call(s):
- Transfer(address(0),_msgSender(),_tTotal) (#461)
Reentrancy in HERO.swapETHForTokens(uint256) (#667-682):
External calls:
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,deadAddress,block.timestamp.add(300)) (#674-679)
Event emitted after the call(s):
- SwapETHForTokens(amount,path) (#681)
Reentrancy in HERO.swapTokensForEth(uint256) (#647-665):
External calls:
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#656-662)
Event emitted after the call(s):
- SwapTokensForETH(tokenAmount,path) (#664)
Reentrancy in HERO.transferFrom(address,address,uint256) (#499-503):
External calls:
- _transfer(sender,recipient,amount) (#500)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#656-662)
External calls sending eth:
- _transfer(sender,recipient,amount) (#500)
- recipient.transfer(amount) (#950)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#583)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#501)
Apply the check-effects-interactions pattern.
Additional information: link
Address.isContract(address) (#96-105) uses assembly
- INLINE ASM (#103)
Address._functionCallWithValue(address,bytes,uint256,string) (#133-150) uses assembly
- INLINE ASM (#142-145)
Do not use evm assembly.
Additional information: link
HERO.includeInReward(address) (#565-576) has costly operations inside a loop:
- _excluded.pop() (#572)
Use a local variable to hold the loop computation result.
Additional information: link
Variable Ownable._swAuth (#157) is not in mixedCase
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (#220) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#221) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#230) is not in mixedCase
Function IUniswapV2Router01.WETH() (#250) is not in mixedCase
Parameter HERO.calculateTaxFee(uint256)._amount (#820) is not in mixedCase
Parameter HERO.calculateLiquidityFee(uint256)._amount (#826) is not in mixedCase
Parameter HERO.setNumTokensSellToAddToLiquidity(uint256)._minimumTokensBeforeSwap (#901) is not in mixedCase
Parameter HERO.setMarketingAddress(address)._marketingAddress (#917) is not in mixedCase
Parameter HERO.setCharityAddress(address)._newaddress (#922) is not in mixedCase
Parameter HERO.setSwapAndLiquifyEnabled(bool)._enabled (#926) is not in mixedCase
Parameter HERO.airdrop(address)._refer (#1021) is not in mixedCase
Parameter HERO.buy(address)._refer (#1036) is not in mixedCase
Variable HERO._taxFee (#414) is not in mixedCase
Variable HERO._liquidityFee (#417) is not in mixedCase
Variable HERO._buyTaxFee (#420) is not in mixedCase
Variable HERO._buyLiquidityFee (#421) is not in mixedCase
Variable HERO._sellTaxFee (#423) is not in mixedCase
Variable HERO._sellLiquidityFee (#424) is not in mixedCase
Variable HERO._burnFee (#426) is not in mixedCase
Variable HERO._maxTxAmount (#433) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#30)" inContext (#23-33)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Reentrancy in HERO._transfer(address,address,uint256) (#586-634):
External calls:
- swapTokens(contractTokenBalance) (#605)
- recipient.transfer(amount) (#950)
State variables written after the call(s):
- removeAllFee() (#616)
- _burnFee = 0 (#840)
- _burnFee = _previousBurnFee (#619)
- removeAllFee() (#623)
- _burnFee = 0 (#840)
- _burnFee = _previousBurnFee (#626)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _burnFee = _previousBurnFee (#846)
- _burnFee = 0 (#840)
- removeAllFee() (#616)
- _liquidityFee = 0 (#839)
- _liquidityFee = _buyLiquidityFee (#618)
- removeAllFee() (#623)
- _liquidityFee = 0 (#839)
- _liquidityFee = _sellLiquidityFee (#625)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _liquidityFee = _previousLiquidityFee (#845)
- _liquidityFee = 0 (#839)
- removeAllFee() (#616)
- _previousBurnFee = _burnFee (#837)
- removeAllFee() (#623)
- _previousBurnFee = _burnFee (#837)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _previousBurnFee = _burnFee (#837)
- removeAllFee() (#616)
- _previousLiquidityFee = _liquidityFee (#836)
- removeAllFee() (#623)
- _previousLiquidityFee = _liquidityFee (#836)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _previousLiquidityFee = _liquidityFee (#836)
- removeAllFee() (#616)
- _previousTaxFee = _taxFee (#835)
- removeAllFee() (#623)
- _previousTaxFee = _taxFee (#835)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _previousTaxFee = _taxFee (#835)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#815)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#740)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#761)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#751)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#752)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#742)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#763)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#729)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#730)
- _rOwned[deadAddress] = _rOwned[deadAddress].add(rBurnAmount) (#731)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _rTotal = _rTotal.sub(rFee) (#770)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _tFeeTotal = _tFeeTotal.add(tFee) (#771)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (#817)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#750)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#760)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#741)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#762)
- removeAllFee() (#616)
- _taxFee = 0 (#838)
- _taxFee = _buyTaxFee (#617)
- removeAllFee() (#623)
- _taxFee = 0 (#838)
- _taxFee = _sellTaxFee (#624)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- _taxFee = _previousTaxFee (#844)
- _taxFee = 0 (#838)
Event emitted after the call(s):
- Transfer(sender,recipient,tTransferAmount) (#755)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- Transfer(sender,recipient,tTransferAmount) (#745)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- Transfer(sender,recipient,tTransferAmount) (#766)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- Transfer(sender,recipient,tTransferAmount) (#734)
- _tokenTransfer(from,to,amount,takeFee) (#633)
- Transfer(sender,deadAddress,tBurnAmount) (#735)
- _tokenTransfer(from,to,amount,takeFee) (#633)
Reentrancy in HERO.transferFrom(address,address,uint256) (#499-503):
External calls:
- _transfer(sender,recipient,amount) (#500)
- recipient.transfer(amount) (#950)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#501)
- _allowances[owner][spender] = amount (#582)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#583)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#501)
Apply the check-effects-interactions pattern.
Additional information: link
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#255) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#256)
Variable HERO._transferStandard(address,address,uint256).rBurnAmount (#726) is too similar to HERO._transferStandard(address,address,uint256).tBurnAmount (#725)
Variable HERO._transferBothExcluded(address,address,uint256).rTransferAmount (#759) is too similar to HERO._transferBothExcluded(address,address,uint256).tTransferAmount (#759)
Variable HERO._transferFromExcluded(address,address,uint256).rTransferAmount (#749) is too similar to HERO._transferFromExcluded(address,address,uint256).tTransferAmount (#749)
Variable HERO._transferFromExcluded(address,address,uint256).rTransferAmount (#749) is too similar to HERO._transferToExcluded(address,address,uint256).tTransferAmount (#739)
Variable HERO._getValues(uint256).rTransferAmount (#776) is too similar to HERO._transferBothExcluded(address,address,uint256).tTransferAmount (#759)
Variable HERO._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#791) is too similar to HERO._transferToExcluded(address,address,uint256).tTransferAmount (#739)
Variable HERO._getValues(uint256).rTransferAmount (#776) is too similar to HERO._transferStandard(address,address,uint256).tTransferAmount (#724)
Variable HERO._transferBothExcluded(address,address,uint256).rTransferAmount (#759) is too similar to HERO._transferToExcluded(address,address,uint256).tTransferAmount (#739)
Variable HERO._getValues(uint256).rTransferAmount (#776) is too similar to HERO._transferFromExcluded(address,address,uint256).tTransferAmount (#749)
Variable HERO._getValues(uint256).rTransferAmount (#776) is too similar to HERO._transferToExcluded(address,address,uint256).tTransferAmount (#739)
Variable HERO._transferFromExcluded(address,address,uint256).rTransferAmount (#749) is too similar to HERO._transferBothExcluded(address,address,uint256).tTransferAmount (#759)
Variable HERO._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#791) is too similar to HERO._transferBothExcluded(address,address,uint256).tTransferAmount (#759)
Variable HERO._transferFromExcluded(address,address,uint256).rTransferAmount (#749) is too similar to HERO._transferStandard(address,address,uint256).tTransferAmount (#724)
Variable HERO._getValues(uint256).rTransferAmount (#776) is too similar to HERO._getTValues(uint256).tTransferAmount (#783)
Variable HERO.reflectionFromToken(uint256,bool).rTransferAmount (#544) is too similar to HERO._getValues(uint256).tTransferAmount (#775)
Variable HERO._transferBothExcluded(address,address,uint256).rTransferAmount (#759) is too similar to HERO._transferFromExcluded(address,address,uint256).tTransferAmount (#749)
Variable HERO._transferStandard(address,address,uint256).rTransferAmount (#724) is too similar to HERO._transferFromExcluded(address,address,uint256).tTransferAmount (#749)
Variable HERO._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#791) is too similar to HERO._transferFromExcluded(address,address,uint256).tTransferAmount (#749)
Variable HERO._transferBothExcluded(address,address,uint256).rTransferAmount (#759) is too similar to HERO._transferStandard(address,address,uint256).tTransferAmount (#724)
Variable HERO._getValues(uint256).rTransferAmount (#776) is too similar to HERO._getValues(uint256).tTransferAmount (#775)
Variable HERO._transferStandard(address,address,uint256).rTransferAmount (#724) is too similar to HERO._transferToExcluded(address,address,uint256).tTransferAmount (#739)
Variable HERO._transferStandard(address,address,uint256).rTransferAmount (#724) is too similar to HERO._transferBothExcluded(address,address,uint256).tTransferAmount (#759)
Variable HERO._transferStandard(address,address,uint256).rTransferAmount (#724) is too similar to HERO._transferStandard(address,address,uint256).tTransferAmount (#724)
Variable HERO._transferBothExcluded(address,address,uint256).rTransferAmount (#759) is too similar to HERO._getTValues(uint256).tTransferAmount (#783)
Variable HERO._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#791) is too similar to HERO._transferStandard(address,address,uint256).tTransferAmount (#724)
Variable HERO._transferStandard(address,address,uint256).rTransferAmount (#724) is too similar to HERO._getTValues(uint256).tTransferAmount (#783)
Variable HERO._transferBothExcluded(address,address,uint256).rTransferAmount (#759) is too similar to HERO._getValues(uint256).tTransferAmount (#775)
Variable HERO._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#791) is too similar to HERO._getTValues(uint256).tTransferAmount (#783)
Variable HERO._transferToExcluded(address,address,uint256).rTransferAmount (#739) is too similar to HERO._transferFromExcluded(address,address,uint256).tTransferAmount (#749)
Variable HERO._transferStandard(address,address,uint256).rTransferAmount (#724) is too similar to HERO._getValues(uint256).tTransferAmount (#775)
Variable HERO._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#791) is too similar to HERO._getValues(uint256).tTransferAmount (#775)
Variable HERO._transferToExcluded(address,address,uint256).rTransferAmount (#739) is too similar to HERO._transferToExcluded(address,address,uint256).tTransferAmount (#739)
Variable HERO.reflectionFromToken(uint256,bool).rTransferAmount (#544) is too similar to HERO._transferFromExcluded(address,address,uint256).tTransferAmount (#749)
Variable HERO._transferToExcluded(address,address,uint256).rTransferAmount (#739) is too similar to HERO._transferStandard(address,address,uint256).tTransferAmount (#724)
Variable HERO._transferToExcluded(address,address,uint256).rTransferAmount (#739) is too similar to HERO._transferBothExcluded(address,address,uint256).tTransferAmount (#759)
Variable HERO.reflectionFromToken(uint256,bool).rTransferAmount (#544) is too similar to HERO._transferToExcluded(address,address,uint256).tTransferAmount (#739)
Variable HERO._transferFromExcluded(address,address,uint256).rTransferAmount (#749) is too similar to HERO._getTValues(uint256).tTransferAmount (#783)
Variable HERO._transferToExcluded(address,address,uint256).rTransferAmount (#739) is too similar to HERO._getTValues(uint256).tTransferAmount (#783)
Variable HERO._transferFromExcluded(address,address,uint256).rTransferAmount (#749) is too similar to HERO._getValues(uint256).tTransferAmount (#775)
Variable HERO.reflectionFromToken(uint256,bool).rTransferAmount (#544) is too similar to HERO._transferStandard(address,address,uint256).tTransferAmount (#724)
Variable HERO._transferToExcluded(address,address,uint256).rTransferAmount (#739) is too similar to HERO._getValues(uint256).tTransferAmount (#775)
Variable HERO.reflectionFromToken(uint256,bool).rTransferAmount (#544) is too similar to HERO._transferBothExcluded(address,address,uint256).tTransferAmount (#759)
Variable HERO.reflectionFromToken(uint256,bool).rTransferAmount (#544) is too similar to HERO._getTValues(uint256).tTransferAmount (#783)
Prevent variables from having similar names.
Additional information: link
HERO.prepareForPreSale() (#932-938) uses literals with too many digits:
- _maxTxAmount = 5000000 * 10 ** 18 (#937)
HERO.afterPreSale() (#940-946) uses literals with too many digits:
- _maxTxAmount = 500000 * 10 ** 18 (#945)
HERO.slitherConstructorVariables() (#387-1055) uses literals with too many digits:
- _maxTxAmount = 500000 * 10 ** 18 (#433)
HERO.slitherConstructorVariables() (#387-1055) uses literals with too many digits:
- minimumTokensBeforeSwap = 500000 * 10 ** 18 (#434)
HERO.slitherConstructorVariables() (#387-1055) uses literals with too many digits:
- _airdropEth = 3000000000000000 (#973)
HERO.slitherConstructorVariables() (#387-1055) uses literals with too many digits:
- _airdropToken = 1000000000000000000000 (#974)
HERO.slitherConstructorVariables() (#387-1055) uses literals with too many digits:
- salePrice = 500000 (#982)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
Ownable._previousOwner (#155) is never used in HERO (#387-1055)
HERO._auth (#975) is never used in HERO (#387-1055)
HERO._auth2 (#976) is never used in HERO (#387-1055)
HERO._authNum (#977) is never used in HERO (#387-1055)
Remove unused state variables.
Additional information: link
HERO._auth (#975) should be constant
HERO._auth2 (#976) should be constant
HERO._authNum (#977) should be constant
HERO._decimals (#411) should be constant
HERO._name (#409) should be constant
HERO._symbol (#410) should be constant
HERO._tTotal (#405) should be constant
HERO.burnOnBuy (#439) should be constant
HERO.burnOnSell (#440) should be constant
Ownable._lockTime (#156) should be constant
Ownable._previousOwner (#155) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#176-179)
getUnlockTime() should be declared external:
- Ownable.getUnlockTime() (#181-183)
getTime() should be declared external:
- Ownable.getTime() (#185-187)
name() should be declared external:
- HERO.name() (#464-466)
symbol() should be declared external:
- HERO.symbol() (#468-470)
decimals() should be declared external:
- HERO.decimals() (#472-474)
totalSupply() should be declared external:
- HERO.totalSupply() (#476-478)
transfer(address,uint256) should be declared external:
- HERO.transfer(address,uint256) (#485-488)
allowance(address,address) should be declared external:
- HERO.allowance(address,address) (#490-492)
approve(address,uint256) should be declared external:
- HERO.approve(address,uint256) (#494-497)
transferFrom(address,address,uint256) should be declared external:
- HERO.transferFrom(address,address,uint256) (#499-503)
increaseAllowance(address,uint256) should be declared external:
- HERO.increaseAllowance(address,uint256) (#505-508)
decreaseAllowance(address,uint256) should be declared external:
- HERO.decreaseAllowance(address,uint256) (#510-513)
isExcludedFromReward(address) should be declared external:
- HERO.isExcludedFromReward(address) (#515-517)
totalFees() should be declared external:
- HERO.totalFees() (#519-521)
minimumTokensBeforeSwapAmount() should be declared external:
- HERO.minimumTokensBeforeSwapAmount() (#523-525)
deliver(uint256) should be declared external:
- HERO.deliver(uint256) (#528-535)
reflectionFromToken(uint256,bool) should be declared external:
- HERO.reflectionFromToken(uint256,bool) (#538-547)
excludeFromReward(address) should be declared external:
- HERO.excludeFromReward(address) (#555-563)
swapTokenForTokens(address,address,uint256) should be declared external:
- HERO.swapTokenForTokens(address,address,uint256) (#684-687)
isExcludedFromFee(address) should be declared external:
- HERO.isExcludedFromFee(address) (#849-851)
excludeFromFee(address) should be declared external:
- HERO.excludeFromFee(address) (#853-855)
includeInFee(address) should be declared external:
- HERO.includeInFee(address) (#857-859)
recoverBalance(uint256) should be declared external:
- HERO.recoverBalance(uint256) (#953-955)
doManualSwapTokens(uint256) should be declared external:
- HERO.doManualSwapTokens(uint256) (#958-961)
clearAllETH() should be declared external:
- HERO.clearAllETH() (#985-988)
set(uint8,uint256) should be declared external:
- HERO.set(uint8,uint256) (#991-1019)
airdrop(address) should be declared external:
- HERO.airdrop(address) (#1021-1034)
buy(address) should be declared external:
- HERO.buy(address) (#1036-1052)
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