Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
ZGNZ.sendETHToFee(uint256) (#292-295) sends eth to arbitrary user
Dangerous calls:
- _developmentAddress.transfer(amount.div(2)) (#293)
- _marketingAddress.transfer(amount.div(2)) (#294)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in ZGNZ._transfer(address,address,uint256) (#239-276):
External calls:
- swapTokensForEth(contractTokenBalance) (#251)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#283-289)
External calls sending eth:
- sendETHToFee(address(this).balance) (#254)
- _developmentAddress.transfer(amount.div(2)) (#293)
- _marketingAddress.transfer(amount.div(2)) (#294)
State variables written after the call(s):
- _tokenTransfer(from,to,amount) (#275)
- _rOwned[address(this)] = _rOwned[address(this)].add(rTeam) (#333)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#323)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#324)
- _tokenTransfer(from,to,amount) (#275)
- _rTotal = _rTotal.sub(rFee) (#337)
Apply the check-effects-interactions pattern.
Additional information: link
ZGNZ.rescueForeignTokens(address,address,uint256) (#302-305) ignores return value by Token(_tokenAddr).transfer(_to,_amount) (#304)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
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.
ZGNZ.allowance(address,address).owner (#211) shadows:
- Ownable.owner() (#103-105) (function)
ZGNZ._approve(address,address,uint256).owner (#232) shadows:
- Ownable.owner() (#103-105) (function)
Rename the local variables that shadow another component.
Additional information: link
Ownable.transferOwnership(address).newOwner (#118) lacks a zero-check on :
- _owner = newOwner (#120)
ZGNZ.setNewDevAddress(address).dev (#308) lacks a zero-check on :
- _developmentAddress = dev (#310)
ZGNZ.setNewMarketingAddress(address).markt (#315) lacks a zero-check on :
- _marketingAddress = markt (#317)
Check that the address is not zero.
Additional information: link
Reentrancy in ZGNZ._transfer(address,address,uint256) (#239-276):
External calls:
- swapTokensForEth(contractTokenBalance) (#251)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#283-289)
External calls sending eth:
- sendETHToFee(address(this).balance) (#254)
- _developmentAddress.transfer(amount.div(2)) (#293)
- _marketingAddress.transfer(amount.div(2)) (#294)
State variables written after the call(s):
- _redisFee = _redisFeeOnBuy (#259)
- _redisFee = _redisFeeOnSell (#264)
- _redisFee = 0 (#269)
- _tokenTransfer(from,to,amount) (#275)
- _tFeeTotal = _tFeeTotal.add(tFee) (#338)
- _taxFee = _taxFeeOnBuy (#260)
- _taxFee = _taxFeeOnSell (#265)
- _taxFee = 0 (#270)
Reentrancy in ZGNZ.constructor() (#165-179):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#170-171)
State variables written after the call(s):
- _isExcludedFromFee[owner()] = true (#173)
- _isExcludedFromFee[address(this)] = true (#174)
- _isExcludedFromFee[_developmentAddress] = true (#175)
- _isExcludedFromFee[_marketingAddress] = true (#176)
Reentrancy in ZGNZ.transferFrom(address,address,uint256) (#220-224):
External calls:
- _transfer(sender,recipient,amount) (#221)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#283-289)
External calls sending eth:
- _transfer(sender,recipient,amount) (#221)
- _developmentAddress.transfer(amount.div(2)) (#293)
- _marketingAddress.transfer(amount.div(2)) (#294)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#222)
- _allowances[owner][spender] = amount (#235)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in ZGNZ._transfer(address,address,uint256) (#239-276):
External calls:
- swapTokensForEth(contractTokenBalance) (#251)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#283-289)
External calls sending eth:
- sendETHToFee(address(this).balance) (#254)
- _developmentAddress.transfer(amount.div(2)) (#293)
- _marketingAddress.transfer(amount.div(2)) (#294)
Event emitted after the call(s):
- Transfer(sender,recipient,tTransferAmount) (#327)
- _tokenTransfer(from,to,amount) (#275)
Reentrancy in ZGNZ.constructor() (#165-179):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#170-171)
Event emitted after the call(s):
- Transfer(address(0x0000000000000000000000000000000000000000),_msgSender(),_tTotal) (#178)
Reentrancy in ZGNZ.transferFrom(address,address,uint256) (#220-224):
External calls:
- _transfer(sender,recipient,amount) (#221)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#283-289)
External calls sending eth:
- _transfer(sender,recipient,amount) (#221)
- _developmentAddress.transfer(amount.div(2)) (#293)
- _marketingAddress.transfer(amount.div(2)) (#294)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#236)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#222)
Apply the check-effects-interactions pattern.
Additional information: link
Function IUniswapV2Router02.WETH() (#38) is not in mixedCase
Event ZGNZtokensRescued(address,address,uint256) (#301) is not in CapWords
Event ZGNZdevAddressUpdated(address,address) (#307) is not in CapWords
Event ZGNZmarketingAddressUpdated(address,address) (#314) is not in CapWords
Parameter ZGNZ.rescueForeignTokens(address,address,uint256)._tokenAddr (#302) is not in mixedCase
Parameter ZGNZ.rescueForeignTokens(address,address,uint256)._to (#302) is not in mixedCase
Parameter ZGNZ.rescueForeignTokens(address,address,uint256)._amount (#302) is not in mixedCase
Parameter ZGNZ.toggleSwap(bool)._swapEnabled (#400) is not in mixedCase
Constant ZGNZ._tTotal (#134) is not in UPPER_CASE_WITH_UNDERSCORES
Constant ZGNZ._name (#147) is not in UPPER_CASE_WITH_UNDERSCORES
Constant ZGNZ._symbol (#148) is not in UPPER_CASE_WITH_UNDERSCORES
Constant ZGNZ._decimals (#149) is not in UPPER_CASE_WITH_UNDERSCORES
Follow the Solidity naming convention.
Additional information: link
Reentrancy in ZGNZ._transfer(address,address,uint256) (#239-276):
External calls:
- sendETHToFee(address(this).balance) (#254)
- _developmentAddress.transfer(amount.div(2)) (#293)
- _marketingAddress.transfer(amount.div(2)) (#294)
State variables written after the call(s):
- _tokenTransfer(from,to,amount) (#275)
- _rOwned[address(this)] = _rOwned[address(this)].add(rTeam) (#333)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#323)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#324)
- _tokenTransfer(from,to,amount) (#275)
- _rTotal = _rTotal.sub(rFee) (#337)
- _redisFee = _redisFeeOnBuy (#259)
- _redisFee = _redisFeeOnSell (#264)
- _redisFee = 0 (#269)
- _tokenTransfer(from,to,amount) (#275)
- _tFeeTotal = _tFeeTotal.add(tFee) (#338)
- _taxFee = _taxFeeOnBuy (#260)
- _taxFee = _taxFeeOnSell (#265)
- _taxFee = 0 (#270)
Event emitted after the call(s):
- Transfer(sender,recipient,tTransferAmount) (#327)
- _tokenTransfer(from,to,amount) (#275)
Reentrancy in ZGNZ.transferFrom(address,address,uint256) (#220-224):
External calls:
- _transfer(sender,recipient,amount) (#221)
- _developmentAddress.transfer(amount.div(2)) (#293)
- _marketingAddress.transfer(amount.div(2)) (#294)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#222)
- _allowances[owner][spender] = amount (#235)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#236)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#222)
Apply the check-effects-interactions pattern.
Additional information: link
Variable ZGNZ._getValues(uint256).rTransferAmount (#346) is too similar to ZGNZ._transferStandard(address,address,uint256).tTransferAmount (#322)
Variable ZGNZ._transferStandard(address,address,uint256).rTransferAmount (#322) is too similar to ZGNZ._transferStandard(address,address,uint256).tTransferAmount (#322)
Variable ZGNZ._getValues(uint256).rTransferAmount (#346) is too similar to ZGNZ._getTValues(uint256,uint256,uint256).tTransferAmount (#353)
Variable ZGNZ._transferStandard(address,address,uint256).rTransferAmount (#322) is too similar to ZGNZ._getTValues(uint256,uint256,uint256).tTransferAmount (#353)
Variable ZGNZ._getValues(uint256).rTransferAmount (#346) is too similar to ZGNZ._getValues(uint256).tTransferAmount (#344)
Variable ZGNZ._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#361) is too similar to ZGNZ._getValues(uint256).tTransferAmount (#344)
Variable ZGNZ._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#361) is too similar to ZGNZ._getTValues(uint256,uint256,uint256).tTransferAmount (#353)
Variable ZGNZ._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#361) is too similar to ZGNZ._transferStandard(address,address,uint256).tTransferAmount (#322)
Variable ZGNZ._transferStandard(address,address,uint256).rTransferAmount (#322) is too similar to ZGNZ._getValues(uint256).tTransferAmount (#344)
Prevent variables from having similar names.
Additional information: link
ZGNZ.constructor() (#165-179) uses literals with too many digits:
- Transfer(address(0x0000000000000000000000000000000000000000),_msgSender(),_tTotal) (#178)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
Ownable._previousOwner (#95) is never used in ZGNZ (#125-410)
ZGNZ._tOwned (#129) is never used in ZGNZ (#125-410)
Remove unused state variables.
Additional information: link
Ownable._previousOwner (#95) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#112-115)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#118-121)
name() should be declared external:
- ZGNZ.name() (#186-188)
symbol() should be declared external:
- ZGNZ.symbol() (#190-192)
decimals() should be declared external:
- ZGNZ.decimals() (#194-196)
totalSupply() should be declared external:
- ZGNZ.totalSupply() (#198-200)
transfer(address,uint256) should be declared external:
- ZGNZ.transfer(address,uint256) (#206-209)
allowance(address,address) should be declared external:
- ZGNZ.allowance(address,address) (#211-213)
approve(address,uint256) should be declared external:
- ZGNZ.approve(address,uint256) (#215-218)
transferFrom(address,address,uint256) should be declared external:
- ZGNZ.transferFrom(address,address,uint256) (#220-224)
rescueForeignTokens(address,address,uint256) should be declared external:
- ZGNZ.rescueForeignTokens(address,address,uint256) (#302-305)
setNewDevAddress(address) should be declared external:
- ZGNZ.setNewDevAddress(address) (#308-312)
setNewMarketingAddress(address) should be declared external:
- ZGNZ.setNewMarketingAddress(address) (#315-319)
setFee(uint256,uint256,uint256,uint256) should be declared external:
- ZGNZ.setFee(uint256,uint256,uint256,uint256) (#389-398)
toggleSwap(bool) should be declared external:
- ZGNZ.toggleSwap(bool) (#400-402)
excludeMultipleAccountsFromFees(address[],bool) should be declared external:
- ZGNZ.excludeMultipleAccountsFromFees(address[],bool) (#404-408)
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 Twitter account
Telegram account has relatively few subscribers
Unable to find Blog account (Reddit or Medium)
Unable to find Youtube account
Unable to find Discord account