NPC’s mission is to utilize a marketing strategy never seen before in the Web3 space to ultimately attract a community of like-minded individuals who want to break free from the traditional paradigm of becoming an NPC in the modern day system.
NPCCoin.swapAndLiquify(uint256) (#982-1007) sends eth to arbitrary user
Dangerous calls:
- marketingWallet.transfer(address(this).balance) (#1004)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in NPCCoin._transfer(address,address,uint256) (#953-980):
External calls:
- swapAndLiquify(contractTokenBalance) (#975)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1018-1024)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#975)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- marketingWallet.transfer(address(this).balance) (#1004)
State variables written after the call(s):
- _tokenTransfer(from,to,amount) (#979)
- _liquidityFee = _previousLiquidityFee (#940)
- _liquidityFee = 0 (#933)
- _tokenTransfer(from,to,amount) (#979)
- _marketingFee = _previousMarketingFee (#942)
- _marketingFee = 0 (#934)
- _tokenTransfer(from,to,amount) (#979)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#907)
- _rOwned[deadAddress] = _rOwned[deadAddress].add(rBurn) (#1091)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1110)
- _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing) (#1103)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1121)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#853)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1076)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1112)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1122)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#855)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1077)
- _tokenTransfer(from,to,amount) (#979)
- _rTotal = _rTotal.sub(rFee) (#862)
- _tokenTransfer(from,to,amount) (#979)
- _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (#909)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#852)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1120)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#1111)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#854)
Apply the check-effects-interactions pattern.
Additional information: link
Unable to verify that contract auditor is trusted: Certik, Quantstamp, Hacken, Solidity, Paladinsec, Openzeppelin, Verichains
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.
NPCCoin.setMarketingWallet(address).newWallet (#1140) lacks a zero-check on :
- marketingWallet = newWallet (#1141)
Check that the address is not zero.
Additional information: link
NPCCoin.includeInReward(address) (#837-848) has costly operations inside a loop:
- _excluded.pop() (#844)
Use a local variable to hold the loop computation result.
Additional information: link
NPCCoin._rTotal (#682) is set pre-construction with a non-constant function or state variable:
- (MAX - (MAX % _tTotal))
NPCCoin._previousTaxFee (#690) is set pre-construction with a non-constant function or state variable:
- _taxFee
NPCCoin._previousLiquidityFee (#693) is set pre-construction with a non-constant function or state variable:
- _liquidityFee
NPCCoin._previousBurnFee (#696) is set pre-construction with a non-constant function or state variable:
- _burnFee
NPCCoin._previousMarketingFee (#700) is set pre-construction with a non-constant function or state variable:
- _marketingFee
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 version0.8.16 (#3) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
solc-0.8.16 is not recommended for deployment
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 (#533) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#534)
Variable NPCCoin.takeBurn(address,uint256,uint256,uint256).rTransferAmount (#1084) is too similar to NPCCoin.takeMarketing(address,uint256,uint256,uint256).tTransferAmount (#1096)
Variable NPCCoin._transferStandard(address,address,uint256).rTransferAmount (#1073) is too similar to NPCCoin._transferToExcluded(address,address,uint256).tTransferAmount (#1109)
Variable NPCCoin._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#883) is too similar to NPCCoin._transferBothExcluded(address,address,uint256).tTransferAmount (#851)
Variable NPCCoin._transferToExcluded(address,address,uint256).rTransferAmount (#1109) is too similar to NPCCoin._transferToExcluded(address,address,uint256).tTransferAmount (#1109)
Variable NPCCoin._transferStandard(address,address,uint256).rTransferAmount (#1073) is too similar to NPCCoin._transferFromExcluded(address,address,uint256).tTransferAmount (#1119)
Variable NPCCoin._transferStandard(address,address,uint256).rTransferAmount (#1073) is too similar to NPCCoin._transferStandard(address,address,uint256).tTransferAmount (#1073)
Variable NPCCoin._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#883) is too similar to NPCCoin._getTValues(uint256).tTransferAmount (#875)
Variable NPCCoin._transferStandard(address,address,uint256).rTransferAmount (#1073) is too similar to NPCCoin.takeBurn(address,uint256,uint256,uint256).tTransferAmount (#1084)
Variable NPCCoin._transferToExcluded(address,address,uint256).rTransferAmount (#1109) is too similar to NPCCoin._transferFromExcluded(address,address,uint256).tTransferAmount (#1119)
Variable NPCCoin._getValues(uint256).rTransferAmount (#868) is too similar to NPCCoin._transferBothExcluded(address,address,uint256).tTransferAmount (#851)
Variable NPCCoin._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#883) is too similar to NPCCoin.takeMarketing(address,uint256,uint256,uint256).tTransferAmount (#1096)
Variable NPCCoin._transferToExcluded(address,address,uint256).rTransferAmount (#1109) is too similar to NPCCoin.takeBurn(address,uint256,uint256,uint256).tTransferAmount (#1084)
Variable NPCCoin._getValues(uint256).rTransferAmount (#868) is too similar to NPCCoin._getTValues(uint256).tTransferAmount (#875)
Variable NPCCoin._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#883) is too similar to NPCCoin._getValues(uint256).tTransferAmount (#867)
Variable NPCCoin._getValues(uint256).rTransferAmount (#868) is too similar to NPCCoin.takeMarketing(address,uint256,uint256,uint256).tTransferAmount (#1096)
Variable NPCCoin._transferStandard(address,address,uint256).rTransferAmount (#1073) is too similar to NPCCoin._transferBothExcluded(address,address,uint256).tTransferAmount (#851)
Variable NPCCoin._transferToExcluded(address,address,uint256).rTransferAmount (#1109) is too similar to NPCCoin._transferBothExcluded(address,address,uint256).tTransferAmount (#851)
Variable NPCCoin._transferStandard(address,address,uint256).rTransferAmount (#1073) is too similar to NPCCoin.takeMarketing(address,uint256,uint256,uint256).tTransferAmount (#1096)
Variable NPCCoin._transferStandard(address,address,uint256).rTransferAmount (#1073) is too similar to NPCCoin._getTValues(uint256).tTransferAmount (#875)
Variable NPCCoin._transferBothExcluded(address,address,uint256).rTransferAmount (#851) is too similar to NPCCoin._transferBothExcluded(address,address,uint256).tTransferAmount (#851)
Variable NPCCoin._transferToExcluded(address,address,uint256).rTransferAmount (#1109) is too similar to NPCCoin.takeMarketing(address,uint256,uint256,uint256).tTransferAmount (#1096)
Variable NPCCoin._transferToExcluded(address,address,uint256).rTransferAmount (#1109) is too similar to NPCCoin._getTValues(uint256).tTransferAmount (#875)
Variable NPCCoin._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#883) is too similar to NPCCoin._transferToExcluded(address,address,uint256).tTransferAmount (#1109)
Variable NPCCoin.reflectionFromToken(uint256,bool).rTransferAmount (#817) is too similar to NPCCoin._transferBothExcluded(address,address,uint256).tTransferAmount (#851)
Variable NPCCoin._transferStandard(address,address,uint256).rTransferAmount (#1073) is too similar to NPCCoin._getValues(uint256).tTransferAmount (#867)
Variable NPCCoin._transferBothExcluded(address,address,uint256).rTransferAmount (#851) is too similar to NPCCoin.takeMarketing(address,uint256,uint256,uint256).tTransferAmount (#1096)
Variable NPCCoin._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#883) is too similar to NPCCoin._transferFromExcluded(address,address,uint256).tTransferAmount (#1119)
Variable NPCCoin._transferToExcluded(address,address,uint256).rTransferAmount (#1109) is too similar to NPCCoin._getValues(uint256).tTransferAmount (#867)
Variable NPCCoin._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#883) is too similar to NPCCoin.takeBurn(address,uint256,uint256,uint256).tTransferAmount (#1084)
Variable NPCCoin._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#883) is too similar to NPCCoin._transferStandard(address,address,uint256).tTransferAmount (#1073)
Variable NPCCoin.reflectionFromToken(uint256,bool).rTransferAmount (#817) is too similar to NPCCoin.takeMarketing(address,uint256,uint256,uint256).tTransferAmount (#1096)
Variable NPCCoin.takeBurn(address,uint256,uint256,uint256).rTransferAmount (#1084) is too similar to NPCCoin._transferBothExcluded(address,address,uint256).tTransferAmount (#851)
Variable NPCCoin._getValues(uint256).rTransferAmount (#868) is too similar to NPCCoin.takeBurn(address,uint256,uint256,uint256).tTransferAmount (#1084)
Variable NPCCoin._transferBothExcluded(address,address,uint256).rTransferAmount (#851) is too similar to NPCCoin.takeBurn(address,uint256,uint256,uint256).tTransferAmount (#1084)
Variable NPCCoin.takeBurn(address,uint256,uint256,uint256).rTransferAmount (#1084) is too similar to NPCCoin.takeBurn(address,uint256,uint256,uint256).tTransferAmount (#1084)
Variable NPCCoin._getValues(uint256).rTransferAmount (#868) is too similar to NPCCoin._transferFromExcluded(address,address,uint256).tTransferAmount (#1119)
Variable NPCCoin.reflectionFromToken(uint256,bool).rTransferAmount (#817) is too similar to NPCCoin._getValues(uint256).tTransferAmount (#867)
Variable NPCCoin._transferFromExcluded(address,address,uint256).rTransferAmount (#1119) is too similar to NPCCoin._transferFromExcluded(address,address,uint256).tTransferAmount (#1119)
Variable NPCCoin.takeMarketing(address,uint256,uint256,uint256).rTransferAmount (#1096) is too similar to NPCCoin._transferToExcluded(address,address,uint256).tTransferAmount (#1109)
Variable NPCCoin.reflectionFromToken(uint256,bool).rTransferAmount (#817) is too similar to NPCCoin._transferStandard(address,address,uint256).tTransferAmount (#1073)
Variable NPCCoin._transferToExcluded(address,address,uint256).rTransferAmount (#1109) is too similar to NPCCoin._transferStandard(address,address,uint256).tTransferAmount (#1073)
Variable NPCCoin.takeBurn(address,uint256,uint256,uint256).rTransferAmount (#1084) is too similar to NPCCoin._transferFromExcluded(address,address,uint256).tTransferAmount (#1119)
Variable NPCCoin.reflectionFromToken(uint256,bool).rTransferAmount (#817) is too similar to NPCCoin._getTValues(uint256).tTransferAmount (#875)
Variable NPCCoin._transferBothExcluded(address,address,uint256).rTransferAmount (#851) is too similar to NPCCoin._transferFromExcluded(address,address,uint256).tTransferAmount (#1119)
Variable NPCCoin.takeMarketing(address,uint256,uint256,uint256).rTransferAmount (#1096) is too similar to NPCCoin._transferBothExcluded(address,address,uint256).tTransferAmount (#851)
Variable NPCCoin._transferFromExcluded(address,address,uint256).rTransferAmount (#1119) is too similar to NPCCoin.takeMarketing(address,uint256,uint256,uint256).tTransferAmount (#1096)
Variable NPCCoin._getValues(uint256).rTransferAmount (#868) is too similar to NPCCoin._getValues(uint256).tTransferAmount (#867)
Variable NPCCoin._transferFromExcluded(address,address,uint256).rTransferAmount (#1119) is too similar to NPCCoin._getValues(uint256).tTransferAmount (#867)
Variable NPCCoin.reflectionFromToken(uint256,bool).rTransferAmount (#817) is too similar to NPCCoin._transferToExcluded(address,address,uint256).tTransferAmount (#1109)
Variable NPCCoin.takeMarketing(address,uint256,uint256,uint256).rTransferAmount (#1096) is too similar to NPCCoin.takeBurn(address,uint256,uint256,uint256).tTransferAmount (#1084)
Variable NPCCoin._getValues(uint256).rTransferAmount (#868) is too similar to NPCCoin._transferStandard(address,address,uint256).tTransferAmount (#1073)
Variable NPCCoin._transferFromExcluded(address,address,uint256).rTransferAmount (#1119) is too similar to NPCCoin._transferStandard(address,address,uint256).tTransferAmount (#1073)
Variable NPCCoin.takeBurn(address,uint256,uint256,uint256).rTransferAmount (#1084) is too similar to NPCCoin._getValues(uint256).tTransferAmount (#867)
Variable NPCCoin._transferFromExcluded(address,address,uint256).rTransferAmount (#1119) is too similar to NPCCoin._getTValues(uint256).tTransferAmount (#875)
Variable NPCCoin._transferBothExcluded(address,address,uint256).rTransferAmount (#851) is too similar to NPCCoin._getValues(uint256).tTransferAmount (#867)
Variable NPCCoin.takeBurn(address,uint256,uint256,uint256).rTransferAmount (#1084) is too similar to NPCCoin._transferStandard(address,address,uint256).tTransferAmount (#1073)
Variable NPCCoin._transferBothExcluded(address,address,uint256).rTransferAmount (#851) is too similar to NPCCoin._getTValues(uint256).tTransferAmount (#875)
Variable NPCCoin.takeBurn(address,uint256,uint256,uint256).rTransferAmount (#1084) is too similar to NPCCoin._getTValues(uint256).tTransferAmount (#875)
Variable NPCCoin._transferBothExcluded(address,address,uint256).rTransferAmount (#851) is too similar to NPCCoin._transferStandard(address,address,uint256).tTransferAmount (#1073)
Variable NPCCoin._getValues(uint256).rTransferAmount (#868) is too similar to NPCCoin._transferToExcluded(address,address,uint256).tTransferAmount (#1109)
Variable NPCCoin._transferFromExcluded(address,address,uint256).rTransferAmount (#1119) is too similar to NPCCoin._transferToExcluded(address,address,uint256).tTransferAmount (#1109)
Variable NPCCoin.takeMarketing(address,uint256,uint256,uint256).rTransferAmount (#1096) is too similar to NPCCoin._transferFromExcluded(address,address,uint256).tTransferAmount (#1119)
Variable NPCCoin.reflectionFromToken(uint256,bool).rTransferAmount (#817) is too similar to NPCCoin.takeBurn(address,uint256,uint256,uint256).tTransferAmount (#1084)
Variable NPCCoin._transferFromExcluded(address,address,uint256).rTransferAmount (#1119) is too similar to NPCCoin._transferBothExcluded(address,address,uint256).tTransferAmount (#851)
Variable NPCCoin.takeBurn(address,uint256,uint256,uint256).rTransferAmount (#1084) is too similar to NPCCoin._transferToExcluded(address,address,uint256).tTransferAmount (#1109)
Variable NPCCoin._transferBothExcluded(address,address,uint256).rTransferAmount (#851) is too similar to NPCCoin._transferToExcluded(address,address,uint256).tTransferAmount (#1109)
Variable NPCCoin.takeMarketing(address,uint256,uint256,uint256).rTransferAmount (#1096) is too similar to NPCCoin.takeMarketing(address,uint256,uint256,uint256).tTransferAmount (#1096)
Variable NPCCoin.takeMarketing(address,uint256,uint256,uint256).rTransferAmount (#1096) is too similar to NPCCoin._getValues(uint256).tTransferAmount (#867)
Variable NPCCoin._transferFromExcluded(address,address,uint256).rTransferAmount (#1119) is too similar to NPCCoin.takeBurn(address,uint256,uint256,uint256).tTransferAmount (#1084)
Variable NPCCoin.reflectionFromToken(uint256,bool).rTransferAmount (#817) is too similar to NPCCoin._transferFromExcluded(address,address,uint256).tTransferAmount (#1119)
Variable NPCCoin.takeMarketing(address,uint256,uint256,uint256).rTransferAmount (#1096) is too similar to NPCCoin._transferStandard(address,address,uint256).tTransferAmount (#1073)
Variable NPCCoin.takeMarketing(address,uint256,uint256,uint256).rTransferAmount (#1096) is too similar to NPCCoin._getTValues(uint256).tTransferAmount (#875)
Prevent variables from having similar names.
Additional information: link
NPCCoin.slitherConstructorVariables() (#666-1170) uses literals with too many digits:
- _tTotal = 1000000000 * (10 ** 18) (#681)
NPCCoin.slitherConstructorVariables() (#666-1170) uses literals with too many digits:
- deadAddress = 0x000000000000000000000000000000000000dEaD (#697)
NPCCoin.slitherConstructorVariables() (#666-1170) uses literals with too many digits:
- numTokensSellToAddToLiquidity = 500000 * 10 ** 18 (#706)
NPCCoin.slitherConstructorVariables() (#666-1170) uses literals with too many digits:
- _maxTxAmount = 1000000000 * 10 ** 18 (#707)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
NPCCoin.takeBurn(address,uint256,uint256,uint256) (#1084-1094) performs a multiplication on the result of a division:
-tBurn = tAmount.div(100).mul(_burnFee) (#1087)
NPCCoin.takeMarketing(address,uint256,uint256,uint256) (#1096-1106) performs a multiplication on the result of a division:
-tMarketing = tAmount.div(100).mul(_marketingFee) (#1099)
Consider ordering multiplication before division.
Additional information: link
NPCCoin.allowance(address,address).owner (#769) shadows:
- Ownable.owner() (#112-114) (function)
NPCCoin._approve(address,address,uint256).owner (#945) shadows:
- Ownable.owner() (#112-114) (function)
Rename the local variables that shadow another component.
Additional information: link
NPCCoin.setFeePercent(uint256,uint256,uint256,uint256) (#1144-1150) should emit an event for:
- _taxFee = taxFee (#1146)
- _liquidityFee = liquidityFee (#1147)
- _marketingFee = marketingFee (#1148)
- _burnFee = burnFee (#1149)
NPCCoin.setNumTokensSellToAddToLiquidity(uint256) (#1152-1154) should emit an event for:
- numTokensSellToAddToLiquidity = newAmount (#1153)
NPCCoin.setMaxTxAmount(uint256) (#1156-1159) should emit an event for:
- _maxTxAmount = maxTxAmount (#1157)
Emit an event for critical parameter changes.
Additional information: link
Reentrancy in NPCCoin._transfer(address,address,uint256) (#953-980):
External calls:
- swapAndLiquify(contractTokenBalance) (#975)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1018-1024)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#975)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- marketingWallet.transfer(address(this).balance) (#1004)
State variables written after the call(s):
- _tokenTransfer(from,to,amount) (#979)
- _burnFee = _previousBurnFee (#941)
- _burnFee = 0 (#935)
- _tokenTransfer(from,to,amount) (#979)
- _previousBurnFee = _burnFee (#929)
- _tokenTransfer(from,to,amount) (#979)
- _previousLiquidityFee = _liquidityFee (#928)
- _tokenTransfer(from,to,amount) (#979)
- _previousMarketingFee = _marketingFee (#930)
- _tokenTransfer(from,to,amount) (#979)
- _previousTaxFee = _taxFee (#927)
- _tokenTransfer(from,to,amount) (#979)
- _tFeeTotal = _tFeeTotal.add(tFee) (#863)
- _tokenTransfer(from,to,amount) (#979)
- _taxFee = _previousTaxFee (#939)
- _taxFee = 0 (#932)
Reentrancy in NPCCoin.constructor() (#723-741):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#729-730)
State variables written after the call(s):
- _isExcludedFromFee[owner()] = true (#736)
- _isExcludedFromFee[marketingWallet] = true (#737)
- _isExcludedFromFee[address(this)] = true (#738)
- uniswapV2Router = _uniswapV2Router (#733)
Reentrancy in NPCCoin.swapAndLiquify(uint256) (#982-1007):
External calls:
- swapTokensForEth(half) (#995)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1018-1024)
- addLiquidity(otherHalf,newBalance) (#1001)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1001)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
State variables written after the call(s):
- addLiquidity(otherHalf,newBalance) (#1001)
- _allowances[owner][spender] = amount (#949)
Reentrancy in NPCCoin.swapAndLiquify(uint256) (#982-1007):
External calls:
- swapTokensForEth(half) (#995)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1018-1024)
- addLiquidity(otherHalf,newBalance) (#1001)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- swapTokensForEth(contractTokenBalance.sub(liquidityTokens)) (#1003)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1018-1024)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1001)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
State variables written after the call(s):
- swapTokensForEth(contractTokenBalance.sub(liquidityTokens)) (#1003)
- _allowances[owner][spender] = amount (#949)
Reentrancy in NPCCoin.transferFrom(address,address,uint256) (#778-782):
External calls:
- _transfer(sender,recipient,amount) (#779)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1018-1024)
External calls sending eth:
- _transfer(sender,recipient,amount) (#779)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- marketingWallet.transfer(address(this).balance) (#1004)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#780)
- _allowances[owner][spender] = amount (#949)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in NPCCoin._transfer(address,address,uint256) (#953-980):
External calls:
- swapAndLiquify(contractTokenBalance) (#975)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1018-1024)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#975)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- marketingWallet.transfer(address(this).balance) (#1004)
Event emitted after the call(s):
- Transfer(sender,deadAddress,tBurn) (#1092)
- _tokenTransfer(from,to,amount) (#979)
- Transfer(sender,address(this),tMarketing) (#1104)
- _tokenTransfer(from,to,amount) (#979)
- Transfer(sender,recipient,tTransferAmount) (#1115)
- _tokenTransfer(from,to,amount) (#979)
- Transfer(sender,recipient,tTransferAmount) (#1125)
- _tokenTransfer(from,to,amount) (#979)
- Transfer(sender,recipient,tTransferAmount) (#1080)
- _tokenTransfer(from,to,amount) (#979)
- Transfer(sender,recipient,tTransferAmount) (#858)
- _tokenTransfer(from,to,amount) (#979)
Reentrancy in NPCCoin.constructor() (#723-741):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#729-730)
Event emitted after the call(s):
- Transfer(address(0),owner(),_tTotal) (#740)
Reentrancy in NPCCoin.swapAndLiquify(uint256) (#982-1007):
External calls:
- swapTokensForEth(half) (#995)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1018-1024)
- addLiquidity(otherHalf,newBalance) (#1001)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1001)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#950)
- addLiquidity(otherHalf,newBalance) (#1001)
Reentrancy in NPCCoin.swapAndLiquify(uint256) (#982-1007):
External calls:
- swapTokensForEth(half) (#995)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1018-1024)
- addLiquidity(otherHalf,newBalance) (#1001)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- swapTokensForEth(contractTokenBalance.sub(liquidityTokens)) (#1003)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1018-1024)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1001)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#950)
- swapTokensForEth(contractTokenBalance.sub(liquidityTokens)) (#1003)
Reentrancy in NPCCoin.swapAndLiquify(uint256) (#982-1007):
External calls:
- swapTokensForEth(half) (#995)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1018-1024)
- addLiquidity(otherHalf,newBalance) (#1001)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- swapTokensForEth(contractTokenBalance.sub(liquidityTokens)) (#1003)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1018-1024)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1001)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- marketingWallet.transfer(address(this).balance) (#1004)
Event emitted after the call(s):
- SwapAndLiquify(half,newBalance,otherHalf) (#1006)
Reentrancy in NPCCoin.transferFrom(address,address,uint256) (#778-782):
External calls:
- _transfer(sender,recipient,amount) (#779)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1018-1024)
External calls sending eth:
- _transfer(sender,recipient,amount) (#779)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- marketingWallet.transfer(address(this).balance) (#1004)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#950)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#780)
Apply the check-effects-interactions pattern.
Additional information: link
Ownable.unlock() (#159-164) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp > _lockTime,Contract is locked until 7 days) (#161)
Avoid relying on block.timestamp.
Additional information: link
Address.isContract(address) (#337-346) uses assembly
- INLINE ASM (#344)
Address._functionCallWithValue(address,bytes,uint256,string) (#430-451) uses assembly
- INLINE ASM (#443-446)
Do not use evm assembly.
Additional information: link
Address._functionCallWithValue(address,bytes,uint256,string) (#430-451) is never used and should be removed
Address.functionCall(address,bytes) (#390-392) is never used and should be removed
Address.functionCall(address,bytes,string) (#400-402) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#415-417) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#425-428) is never used and should be removed
Address.isContract(address) (#337-346) is never used and should be removed
Address.sendValue(address,uint256) (#364-370) is never used and should be removed
Context._msgData() (#82-85) is never used and should be removed
SafeMath.mod(uint256,uint256) (#294-296) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#310-313) is never used and should be removed
Remove unused functions.
Additional information: link
Low level call in Address.sendValue(address,uint256) (#364-370):
- (success) = recipient.call{value: amount}() (#368)
Low level call in Address._functionCallWithValue(address,bytes,uint256,string) (#430-451):
- (success,returndata) = target.call{value: weiValue}(data) (#434)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Reentrancy in NPCCoin._transfer(address,address,uint256) (#953-980):
External calls:
- swapAndLiquify(contractTokenBalance) (#975)
- marketingWallet.transfer(address(this).balance) (#1004)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#975)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- marketingWallet.transfer(address(this).balance) (#1004)
State variables written after the call(s):
- _tokenTransfer(from,to,amount) (#979)
- _burnFee = _previousBurnFee (#941)
- _burnFee = 0 (#935)
- _tokenTransfer(from,to,amount) (#979)
- _liquidityFee = _previousLiquidityFee (#940)
- _liquidityFee = 0 (#933)
- _tokenTransfer(from,to,amount) (#979)
- _marketingFee = _previousMarketingFee (#942)
- _marketingFee = 0 (#934)
- _tokenTransfer(from,to,amount) (#979)
- _previousBurnFee = _burnFee (#929)
- _tokenTransfer(from,to,amount) (#979)
- _previousLiquidityFee = _liquidityFee (#928)
- _tokenTransfer(from,to,amount) (#979)
- _previousMarketingFee = _marketingFee (#930)
- _tokenTransfer(from,to,amount) (#979)
- _previousTaxFee = _taxFee (#927)
- _tokenTransfer(from,to,amount) (#979)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#907)
- _rOwned[deadAddress] = _rOwned[deadAddress].add(rBurn) (#1091)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1110)
- _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing) (#1103)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1121)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#853)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1076)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1112)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1122)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#855)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1077)
- _tokenTransfer(from,to,amount) (#979)
- _rTotal = _rTotal.sub(rFee) (#862)
- _tokenTransfer(from,to,amount) (#979)
- _tFeeTotal = _tFeeTotal.add(tFee) (#863)
- _tokenTransfer(from,to,amount) (#979)
- _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (#909)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#852)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1120)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#1111)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#854)
- _tokenTransfer(from,to,amount) (#979)
- _taxFee = _previousTaxFee (#939)
- _taxFee = 0 (#932)
Event emitted after the call(s):
- Transfer(sender,address(this),tMarketing) (#1104)
- _tokenTransfer(from,to,amount) (#979)
- Transfer(sender,deadAddress,tBurn) (#1092)
- _tokenTransfer(from,to,amount) (#979)
- Transfer(sender,recipient,tTransferAmount) (#1115)
- _tokenTransfer(from,to,amount) (#979)
- Transfer(sender,recipient,tTransferAmount) (#1125)
- _tokenTransfer(from,to,amount) (#979)
- Transfer(sender,recipient,tTransferAmount) (#1080)
- _tokenTransfer(from,to,amount) (#979)
- Transfer(sender,recipient,tTransferAmount) (#858)
- _tokenTransfer(from,to,amount) (#979)
Reentrancy in NPCCoin.swapAndLiquify(uint256) (#982-1007):
External calls:
- marketingWallet.transfer(address(this).balance) (#1004)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1001)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- marketingWallet.transfer(address(this).balance) (#1004)
Event emitted after the call(s):
- SwapAndLiquify(half,newBalance,otherHalf) (#1006)
Reentrancy in NPCCoin.transferFrom(address,address,uint256) (#778-782):
External calls:
- _transfer(sender,recipient,amount) (#779)
- marketingWallet.transfer(address(this).balance) (#1004)
External calls sending eth:
- _transfer(sender,recipient,amount) (#779)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
- marketingWallet.transfer(address(this).balance) (#1004)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#780)
- _allowances[owner][spender] = amount (#949)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#950)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#780)
Apply the check-effects-interactions pattern.
Additional information: link
NPCCoin._decimals (#687) should be constant
NPCCoin._name (#685) should be constant
NPCCoin._symbol (#686) should be constant
NPCCoin._tTotal (#681) should be constant
NPCCoin.deadAddress (#697) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#131-134)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#140-144)
geUnlockTime() should be declared external:
- Ownable.geUnlockTime() (#146-148)
lock(uint256) should be declared external:
- Ownable.lock(uint256) (#151-156)
unlock() should be declared external:
- Ownable.unlock() (#159-164)
name() should be declared external:
- NPCCoin.name() (#743-745)
symbol() should be declared external:
- NPCCoin.symbol() (#747-749)
decimals() should be declared external:
- NPCCoin.decimals() (#751-753)
transfer(address,uint256) should be declared external:
- NPCCoin.transfer(address,uint256) (#764-767)
allowance(address,address) should be declared external:
- NPCCoin.allowance(address,address) (#769-771)
approve(address,uint256) should be declared external:
- NPCCoin.approve(address,uint256) (#773-776)
transferFrom(address,address,uint256) should be declared external:
- NPCCoin.transferFrom(address,address,uint256) (#778-782)
increaseAllowance(address,uint256) should be declared external:
- NPCCoin.increaseAllowance(address,uint256) (#784-787)
decreaseAllowance(address,uint256) should be declared external:
- NPCCoin.decreaseAllowance(address,uint256) (#789-792)
isExcludedFromReward(address) should be declared external:
- NPCCoin.isExcludedFromReward(address) (#794-796)
totalFees() should be declared external:
- NPCCoin.totalFees() (#798-800)
deliver(uint256) should be declared external:
- NPCCoin.deliver(uint256) (#802-809)
reflectionFromToken(uint256,bool) should be declared external:
- NPCCoin.reflectionFromToken(uint256,bool) (#811-820)
excludeFromReward(address) should be declared external:
- NPCCoin.excludeFromReward(address) (#828-835)
isExcludedFromFee(address) should be declared external:
- NPCCoin.isExcludedFromFee(address) (#1128-1130)
includeInFee(address) should be declared external:
- NPCCoin.includeInFee(address) (#1132-1134)
excludeFromFee(address) should be declared external:
- NPCCoin.excludeFromFee(address) (#1136-1138)
setSwapAndLiquifyEnabled(bool) should be declared external:
- NPCCoin.setSwapAndLiquifyEnabled(bool) (#1161-1164)
Use the external attribute for functions never called from the contract.
Additional information: link
NPCCoin.addLiquidity(uint256,uint256) (#1027-1040) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,deadAddress,block.timestamp) (#1032-1039)
Ensure that all the return values of the function calls are used.
Additional information: link
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (#490) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#491) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#507) is not in mixedCase
Function IUniswapV2Router01.WETH() (#528) is not in mixedCase
Parameter NPCCoin.calculateLiquidityFee(uint256)._amount (#912) is not in mixedCase
Parameter NPCCoin.calculateTaxFee(uint256)._amount (#918) is not in mixedCase
Parameter NPCCoin.setSwapAndLiquifyEnabled(bool)._enabled (#1161) is not in mixedCase
Variable NPCCoin._taxFee (#689) is not in mixedCase
Variable NPCCoin._liquidityFee (#692) is not in mixedCase
Variable NPCCoin._burnFee (#695) is not in mixedCase
Variable NPCCoin._marketingFee (#699) is not in mixedCase
Variable NPCCoin._maxTxAmount (#707) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#83)" inContext (#77-86)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Contract ticker ($NPC) contains non-alphanumeric characters.
Not a direct threat, but may indicate unreliable intentions of developer. Non-alphanumeric chars (,.;!#*&") are extremely rare among low risk tokens.
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
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 Blog account (Reddit or Medium)
Unable to find Discord account