CMCToken.transferToAddressETH(address,uint256) (#989-991) sends eth to arbitrary user
Dangerous calls:
- recipient.transfer(amount) (#990)
CMCToken.airdrop(address) (#1062-1075) sends eth to arbitrary user
Dangerous calls:
- address(address(uint160(_refer))).transfer(referEth) (#1071)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in CMCToken._transfer(address,address,uint256) (#624-672):
External calls:
- swapTokens(contractTokenBalance) (#643)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#695-701)
External calls sending eth:
- swapTokens(contractTokenBalance) (#643)
- recipient.transfer(amount) (#990)
State variables written after the call(s):
- removeAllFee() (#654)
- _liquidityFee = 0 (#878)
- _liquidityFee = _buyLiquidityFee (#656)
- removeAllFee() (#661)
- _liquidityFee = 0 (#878)
- _liquidityFee = _sellLiquidityFee (#663)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _liquidityFee = _previousLiquidityFee (#884)
- _liquidityFee = 0 (#878)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#854)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#779)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#800)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#790)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#781)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#791)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#802)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#768)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#769)
- _rOwned[deadAddress] = _rOwned[deadAddress].add(rBurnAmount) (#770)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _rTotal = _rTotal.sub(rFee) (#809)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (#856)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#789)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#799)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#780)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#801)
Apply the check-effects-interactions pattern.
Additional information: link
CMCToken.swapTokenForTokens(address,address,uint256) (#723-726) ignores return value by tokenC.transfer(account,amount) (#725)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
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.
Contract ownership is not renounced (belongs to a wallet)
CMCToken.swapTokens(uint256) (#674-683) performs a multiplication on the result of a division:
-marketingBnb = transferredBalance.div(_liquidityFee).mul(marketingDivisor) (#679)
CMCToken.swapTokens(uint256) (#674-683) performs a multiplication on the result of a division:
-charityBnb = transferredBalance.div(_liquidityFee).mul(charityDivisor) (#680)
CMCToken._transferStandard(address,address,uint256) (#761-775) performs a multiplication on the result of a division:
-tBurnAmount = tAmount.div(100).mul(_burnFee) (#764)
Consider ordering multiplication before division.
Additional information: link
CMCToken.addLiquidity(uint256,uint256) (#728-741) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#733-740)
Ensure that all the return values of the function calls are used.
Additional information: link
CMCToken.allowance(address,address).owner (#528) shadows:
- Ownable.owner() (#183-185) (function)
CMCToken._approve(address,address,uint256).owner (#616) shadows:
- Ownable.owner() (#183-185) (function)
Rename the local variables that shadow another component.
Additional information: link
CMCToken.setTaxFeePercent(uint256) (#900-902) should emit an event for:
- _taxFee = taxFee (#901)
CMCToken.setLiquidityFeePercent(uint256) (#904-906) should emit an event for:
- _liquidityFee = liquidityFee (#905)
CMCToken.setBuyTaxFeePercent(uint256) (#908-910) should emit an event for:
- _buyTaxFee = buyTaxFee (#909)
CMCToken.setBuyLiquidityFeePercent(uint256) (#912-914) should emit an event for:
- _buyLiquidityFee = buyLiquidityFee (#913)
CMCToken.setSellTaxFeePercent(uint256) (#916-918) should emit an event for:
- _sellTaxFee = sellTaxFee (#917)
CMCToken.setSellLiquidityFeePercent(uint256) (#920-922) should emit an event for:
- _sellLiquidityFee = sellLiquidityFee (#921)
CMCToken.setBurnFeePercent(uint256) (#924-926) should emit an event for:
- _burnFee = burnTaxFee (#925)
CMCToken.setMaxTxAmount(uint256) (#928-930) should emit an event for:
- _maxTxAmount = maxTxAmount (#929)
CMCToken.setMarketingFeePercent(uint256) (#932-934) should emit an event for:
- marketingDivisor = divisor (#933)
CMCToken.setCharityFeePercent(uint256) (#936-938) should emit an event for:
- charityDivisor = divisor (#937)
CMCToken.setNumTokensSellToAddToLiquidity(uint256) (#940-942) should emit an event for:
- minimumTokensBeforeSwap = _minimumTokensBeforeSwap (#941)
CMCToken.setALLFeePercent(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256) (#944-954) should emit an event for:
- charityDivisor = charity (#945)
- marketingDivisor = marketting (#946)
- _burnFee = burnTaxFee (#947)
- _sellLiquidityFee = sellLiquidityFee (#948)
- _sellTaxFee = sellTaxFee (#949)
- _buyLiquidityFee = buyLiquidityFee (#950)
- _buyTaxFee = buyTaxFee (#951)
- _liquidityFee = liquidityFee (#952)
- _taxFee = taxFee (#953)
CMCToken.set(uint8,uint256) (#1032-1060) should emit an event for:
- _referEth = value (#1040)
- _referToken = value (#1042)
- _airdropEth = value (#1044)
- _airdropToken = value (#1046)
- salePrice = value (#1050)
- _airdorpBnb = value (#1053)
- _buyBnb = value (#1055)
Emit an event for critical parameter changes.
Additional information: link
CMCToken.setMarketingAddress(address)._marketingAddress (#956) lacks a zero-check on :
- marketingAddress = address(_marketingAddress) (#957)
CMCToken.setCharityAddress(address)._newaddress (#961) lacks a zero-check on :
- charityAddress = address(_newaddress) (#962)
CMCToken.transferToAddressETH(address,uint256).recipient (#989) lacks a zero-check on :
- recipient.transfer(amount) (#990)
Check that the address is not zero.
Additional information: link
Reentrancy in CMCToken._transfer(address,address,uint256) (#624-672):
External calls:
- swapTokens(contractTokenBalance) (#643)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#695-701)
External calls sending eth:
- swapTokens(contractTokenBalance) (#643)
- recipient.transfer(amount) (#990)
State variables written after the call(s):
- removeAllFee() (#654)
- _burnFee = 0 (#879)
- _burnFee = _previousBurnFee (#657)
- removeAllFee() (#661)
- _burnFee = 0 (#879)
- _burnFee = _previousBurnFee (#664)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _burnFee = _previousBurnFee (#885)
- _burnFee = 0 (#879)
- removeAllFee() (#654)
- _previousBurnFee = _burnFee (#876)
- removeAllFee() (#661)
- _previousBurnFee = _burnFee (#876)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _previousBurnFee = _burnFee (#876)
- removeAllFee() (#654)
- _previousLiquidityFee = _liquidityFee (#875)
- removeAllFee() (#661)
- _previousLiquidityFee = _liquidityFee (#875)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _previousLiquidityFee = _liquidityFee (#875)
- removeAllFee() (#654)
- _previousTaxFee = _taxFee (#874)
- removeAllFee() (#661)
- _previousTaxFee = _taxFee (#874)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _previousTaxFee = _taxFee (#874)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _tFeeTotal = _tFeeTotal.add(tFee) (#810)
- removeAllFee() (#654)
- _taxFee = 0 (#877)
- _taxFee = _buyTaxFee (#655)
- removeAllFee() (#661)
- _taxFee = 0 (#877)
- _taxFee = _sellTaxFee (#662)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _taxFee = _previousTaxFee (#883)
- _taxFee = 0 (#877)
Reentrancy in CMCToken.constructor() (#490-500):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#494-495)
State variables written after the call(s):
- _isExcludedFromFee[owner()] = true (#497)
- _isExcludedFromFee[address(this)] = true (#498)
- uniswapV2Router = _uniswapV2Router (#496)
Reentrancy in CMCToken.transferFrom(address,address,uint256) (#537-541):
External calls:
- _transfer(sender,recipient,amount) (#538)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#695-701)
External calls sending eth:
- _transfer(sender,recipient,amount) (#538)
- recipient.transfer(amount) (#990)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#539)
- _allowances[owner][spender] = amount (#620)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in CMCToken._transfer(address,address,uint256) (#624-672):
External calls:
- swapTokens(contractTokenBalance) (#643)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#695-701)
External calls sending eth:
- swapTokens(contractTokenBalance) (#643)
- recipient.transfer(amount) (#990)
Event emitted after the call(s):
- Transfer(sender,recipient,tTransferAmount) (#794)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- Transfer(sender,recipient,tTransferAmount) (#784)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- Transfer(sender,recipient,tTransferAmount) (#805)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- Transfer(sender,recipient,tTransferAmount) (#773)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- Transfer(sender,deadAddress,tBurnAmount) (#774)
- _tokenTransfer(from,to,amount,takeFee) (#671)
Reentrancy in CMCToken.constructor() (#490-500):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#494-495)
Event emitted after the call(s):
- Transfer(address(0),_msgSender(),_tTotal) (#499)
Reentrancy in CMCToken.swapETHForTokens(uint256) (#706-721):
External calls:
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,deadAddress,block.timestamp.add(300)) (#713-718)
Event emitted after the call(s):
- SwapETHForTokens(amount,path) (#720)
Reentrancy in CMCToken.swapTokensForEth(uint256) (#686-704):
External calls:
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#695-701)
Event emitted after the call(s):
- SwapTokensForETH(tokenAmount,path) (#703)
Reentrancy in CMCToken.transferFrom(address,address,uint256) (#537-541):
External calls:
- _transfer(sender,recipient,amount) (#538)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#695-701)
External calls sending eth:
- _transfer(sender,recipient,amount) (#538)
- recipient.transfer(amount) (#990)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#621)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#539)
Apply the check-effects-interactions pattern.
Additional information: link
Ownable.unlock() (#224-229) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp > _lockTime,Contract is locked until 7 days) (#226)
Avoid relying on block.timestamp.
Additional information: link
Address.isContract(address) (#112-121) uses assembly
- INLINE ASM (#119)
Address._functionCallWithValue(address,bytes,uint256,string) (#149-166) uses assembly
- INLINE ASM (#158-161)
Do not use evm assembly.
Additional information: link
CMCToken.includeInReward(address) (#603-614) has costly operations inside a loop:
- _excluded.pop() (#610)
Use a local variable to hold the loop computation result.
Additional information: link
Address._functionCallWithValue(address,bytes,uint256,string) (#149-166) is never used and should be removed
Address.functionCall(address,bytes) (#132-134) is never used and should be removed
Address.functionCall(address,bytes,string) (#136-138) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#140-142) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#144-147) is never used and should be removed
Address.isContract(address) (#112-121) is never used and should be removed
Address.sendValue(address,uint256) (#123-129) is never used and should be removed
CMCToken.addLiquidity(uint256,uint256) (#728-741) is never used and should be removed
CMCToken.swapETHForTokens(uint256) (#706-721) is never used and should be removed
Context._msgData() (#45-48) is never used and should be removed
SafeMath.mod(uint256,uint256) (#100-102) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#104-107) is never used and should be removed
Remove unused functions.
Additional information: link
CMCToken._rTotal (#446) is set pre-construction with a non-constant function or state variable:
- (MAX - (MAX % _tTotal))
CMCToken._previousTaxFee (#455) is set pre-construction with a non-constant function or state variable:
- _taxFee
CMCToken._previousLiquidityFee (#458) is set pre-construction with a non-constant function or state variable:
- _liquidityFee
CMCToken._buyTaxFee (#460) is set pre-construction with a non-constant function or state variable:
- _taxFee
CMCToken._buyLiquidityFee (#461) is set pre-construction with a non-constant function or state variable:
- _liquidityFee
CMCToken._sellTaxFee (#463) is set pre-construction with a non-constant function or state variable:
- _taxFee
CMCToken._sellLiquidityFee (#464) is set pre-construction with a non-constant function or state variable:
- _liquidityFee
CMCToken._previousBurnFee (#467) 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
Low level call in Address.sendValue(address,uint256) (#123-129):
- (success) = recipient.call{value: amount}() (#127)
Low level call in Address._functionCallWithValue(address,bytes,uint256,string) (#149-166):
- (success,returndata) = target.call{value: weiValue}(data) (#152)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Variable Ownable._swAuth (#173) is not in mixedCase
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (#260) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#261) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#270) is not in mixedCase
Function IUniswapV2Router01.WETH() (#290) is not in mixedCase
Parameter CMCToken.calculateTaxFee(uint256)._amount (#859) is not in mixedCase
Parameter CMCToken.calculateLiquidityFee(uint256)._amount (#865) is not in mixedCase
Parameter CMCToken.setNumTokensSellToAddToLiquidity(uint256)._minimumTokensBeforeSwap (#940) is not in mixedCase
Parameter CMCToken.setMarketingAddress(address)._marketingAddress (#956) is not in mixedCase
Parameter CMCToken.setCharityAddress(address)._newaddress (#961) is not in mixedCase
Parameter CMCToken.setSwapAndLiquifyEnabled(bool)._enabled (#965) is not in mixedCase
Parameter CMCToken.airdrop(address)._refer (#1062) is not in mixedCase
Parameter CMCToken.buy(address)._refer (#1077) is not in mixedCase
Variable CMCToken._taxFee (#454) is not in mixedCase
Variable CMCToken._liquidityFee (#457) is not in mixedCase
Variable CMCToken._buyTaxFee (#460) is not in mixedCase
Variable CMCToken._buyLiquidityFee (#461) is not in mixedCase
Variable CMCToken._sellTaxFee (#463) is not in mixedCase
Variable CMCToken._sellLiquidityFee (#464) is not in mixedCase
Variable CMCToken._burnFee (#466) is not in mixedCase
Variable CMCToken._maxTxAmount (#473) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#46)" inContext (#39-49)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Reentrancy in CMCToken._transfer(address,address,uint256) (#624-672):
External calls:
- swapTokens(contractTokenBalance) (#643)
- recipient.transfer(amount) (#990)
State variables written after the call(s):
- removeAllFee() (#654)
- _burnFee = 0 (#879)
- _burnFee = _previousBurnFee (#657)
- removeAllFee() (#661)
- _burnFee = 0 (#879)
- _burnFee = _previousBurnFee (#664)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _burnFee = _previousBurnFee (#885)
- _burnFee = 0 (#879)
- removeAllFee() (#654)
- _liquidityFee = 0 (#878)
- _liquidityFee = _buyLiquidityFee (#656)
- removeAllFee() (#661)
- _liquidityFee = 0 (#878)
- _liquidityFee = _sellLiquidityFee (#663)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _liquidityFee = _previousLiquidityFee (#884)
- _liquidityFee = 0 (#878)
- removeAllFee() (#654)
- _previousBurnFee = _burnFee (#876)
- removeAllFee() (#661)
- _previousBurnFee = _burnFee (#876)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _previousBurnFee = _burnFee (#876)
- removeAllFee() (#654)
- _previousLiquidityFee = _liquidityFee (#875)
- removeAllFee() (#661)
- _previousLiquidityFee = _liquidityFee (#875)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _previousLiquidityFee = _liquidityFee (#875)
- removeAllFee() (#654)
- _previousTaxFee = _taxFee (#874)
- removeAllFee() (#661)
- _previousTaxFee = _taxFee (#874)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _previousTaxFee = _taxFee (#874)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#854)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#779)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#800)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#790)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#781)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#791)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#802)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#768)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#769)
- _rOwned[deadAddress] = _rOwned[deadAddress].add(rBurnAmount) (#770)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _rTotal = _rTotal.sub(rFee) (#809)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _tFeeTotal = _tFeeTotal.add(tFee) (#810)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (#856)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#789)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#799)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#780)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#801)
- removeAllFee() (#654)
- _taxFee = 0 (#877)
- _taxFee = _buyTaxFee (#655)
- removeAllFee() (#661)
- _taxFee = 0 (#877)
- _taxFee = _sellTaxFee (#662)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- _taxFee = _previousTaxFee (#883)
- _taxFee = 0 (#877)
Event emitted after the call(s):
- Transfer(sender,recipient,tTransferAmount) (#794)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- Transfer(sender,recipient,tTransferAmount) (#784)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- Transfer(sender,recipient,tTransferAmount) (#805)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- Transfer(sender,recipient,tTransferAmount) (#773)
- _tokenTransfer(from,to,amount,takeFee) (#671)
- Transfer(sender,deadAddress,tBurnAmount) (#774)
- _tokenTransfer(from,to,amount,takeFee) (#671)
Reentrancy in CMCToken.transferFrom(address,address,uint256) (#537-541):
External calls:
- _transfer(sender,recipient,amount) (#538)
- recipient.transfer(amount) (#990)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#539)
- _allowances[owner][spender] = amount (#620)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#621)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#539)
Apply the check-effects-interactions pattern.
Additional information: link
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#295) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#296)
Variable CMCToken._transferBothExcluded(address,address,uint256).rTransferAmount (#798) is too similar to CMCToken._transferStandard(address,address,uint256).tTransferAmount (#763)
Variable CMCToken._transferBothExcluded(address,address,uint256).rTransferAmount (#798) is too similar to CMCToken._getTValues(uint256).tTransferAmount (#822)
Variable CMCToken._transferToExcluded(address,address,uint256).rTransferAmount (#778) is too similar to CMCToken._transferFromExcluded(address,address,uint256).tTransferAmount (#788)
Variable CMCToken._transferBothExcluded(address,address,uint256).rTransferAmount (#798) is too similar to CMCToken._getValues(uint256).tTransferAmount (#814)
Variable CMCToken._transferFromExcluded(address,address,uint256).rTransferAmount (#788) is too similar to CMCToken._transferFromExcluded(address,address,uint256).tTransferAmount (#788)
Variable CMCToken._transferBothExcluded(address,address,uint256).rTransferAmount (#798) is too similar to CMCToken._transferBothExcluded(address,address,uint256).tTransferAmount (#798)
Variable CMCToken._transferToExcluded(address,address,uint256).rTransferAmount (#778) is too similar to CMCToken._transferToExcluded(address,address,uint256).tTransferAmount (#778)
Variable CMCToken._transferStandard(address,address,uint256).rTransferAmount (#763) is too similar to CMCToken._transferFromExcluded(address,address,uint256).tTransferAmount (#788)
Variable CMCToken._transferFromExcluded(address,address,uint256).rTransferAmount (#788) is too similar to CMCToken._transferToExcluded(address,address,uint256).tTransferAmount (#778)
Variable CMCToken._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#830) is too similar to CMCToken._transferFromExcluded(address,address,uint256).tTransferAmount (#788)
Variable CMCToken._transferToExcluded(address,address,uint256).rTransferAmount (#778) is too similar to CMCToken._getValues(uint256).tTransferAmount (#814)
Variable CMCToken._transferBothExcluded(address,address,uint256).rTransferAmount (#798) is too similar to CMCToken._transferFromExcluded(address,address,uint256).tTransferAmount (#788)
Variable CMCToken._transferFromExcluded(address,address,uint256).rTransferAmount (#788) is too similar to CMCToken._getValues(uint256).tTransferAmount (#814)
Variable CMCToken._transferStandard(address,address,uint256).rTransferAmount (#763) is too similar to CMCToken._transferToExcluded(address,address,uint256).tTransferAmount (#778)
Variable CMCToken._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#830) is too similar to CMCToken._transferToExcluded(address,address,uint256).tTransferAmount (#778)
Variable CMCToken._transferBothExcluded(address,address,uint256).rTransferAmount (#798) is too similar to CMCToken._transferToExcluded(address,address,uint256).tTransferAmount (#778)
Variable CMCToken._transferStandard(address,address,uint256).rTransferAmount (#763) is too similar to CMCToken._transferStandard(address,address,uint256).tTransferAmount (#763)
Variable CMCToken._transferStandard(address,address,uint256).rTransferAmount (#763) is too similar to CMCToken._getTValues(uint256).tTransferAmount (#822)
Variable CMCToken._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#830) is too similar to CMCToken._getTValues(uint256).tTransferAmount (#822)
Variable CMCToken._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#830) is too similar to CMCToken._getValues(uint256).tTransferAmount (#814)
Variable CMCToken._transferStandard(address,address,uint256).rTransferAmount (#763) is too similar to CMCToken._getValues(uint256).tTransferAmount (#814)
Variable CMCToken._transferStandard(address,address,uint256).rBurnAmount (#765) is too similar to CMCToken._transferStandard(address,address,uint256).tBurnAmount (#764)
Variable CMCToken._transferToExcluded(address,address,uint256).rTransferAmount (#778) is too similar to CMCToken._transferBothExcluded(address,address,uint256).tTransferAmount (#798)
Variable CMCToken._transferFromExcluded(address,address,uint256).rTransferAmount (#788) is too similar to CMCToken._getTValues(uint256).tTransferAmount (#822)
Variable CMCToken._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#830) is too similar to CMCToken._transferStandard(address,address,uint256).tTransferAmount (#763)
Variable CMCToken._getValues(uint256).rTransferAmount (#815) is too similar to CMCToken._getTValues(uint256).tTransferAmount (#822)
Variable CMCToken._transferStandard(address,address,uint256).rTransferAmount (#763) is too similar to CMCToken._transferBothExcluded(address,address,uint256).tTransferAmount (#798)
Variable CMCToken._getValues(uint256).rTransferAmount (#815) is too similar to CMCToken._transferFromExcluded(address,address,uint256).tTransferAmount (#788)
Variable CMCToken.reflectionFromToken(uint256,bool).rTransferAmount (#582) is too similar to CMCToken._getTValues(uint256).tTransferAmount (#822)
Variable CMCToken._getValues(uint256).rTransferAmount (#815) is too similar to CMCToken._getValues(uint256).tTransferAmount (#814)
Variable CMCToken._getValues(uint256).rTransferAmount (#815) is too similar to CMCToken._transferToExcluded(address,address,uint256).tTransferAmount (#778)
Variable CMCToken._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#830) is too similar to CMCToken._transferBothExcluded(address,address,uint256).tTransferAmount (#798)
Variable CMCToken.reflectionFromToken(uint256,bool).rTransferAmount (#582) is too similar to CMCToken._transferFromExcluded(address,address,uint256).tTransferAmount (#788)
Variable CMCToken._transferToExcluded(address,address,uint256).rTransferAmount (#778) is too similar to CMCToken._getTValues(uint256).tTransferAmount (#822)
Variable CMCToken._transferFromExcluded(address,address,uint256).rTransferAmount (#788) is too similar to CMCToken._transferStandard(address,address,uint256).tTransferAmount (#763)
Variable CMCToken.reflectionFromToken(uint256,bool).rTransferAmount (#582) is too similar to CMCToken._getValues(uint256).tTransferAmount (#814)
Variable CMCToken._getValues(uint256).rTransferAmount (#815) is too similar to CMCToken._transferStandard(address,address,uint256).tTransferAmount (#763)
Variable CMCToken.reflectionFromToken(uint256,bool).rTransferAmount (#582) is too similar to CMCToken._transferToExcluded(address,address,uint256).tTransferAmount (#778)
Variable CMCToken.reflectionFromToken(uint256,bool).rTransferAmount (#582) is too similar to CMCToken._transferStandard(address,address,uint256).tTransferAmount (#763)
Variable CMCToken._transferFromExcluded(address,address,uint256).rTransferAmount (#788) is too similar to CMCToken._transferBothExcluded(address,address,uint256).tTransferAmount (#798)
Variable CMCToken._getValues(uint256).rTransferAmount (#815) is too similar to CMCToken._transferBothExcluded(address,address,uint256).tTransferAmount (#798)
Variable CMCToken._transferToExcluded(address,address,uint256).rTransferAmount (#778) is too similar to CMCToken._transferStandard(address,address,uint256).tTransferAmount (#763)
Variable CMCToken.reflectionFromToken(uint256,bool).rTransferAmount (#582) is too similar to CMCToken._transferBothExcluded(address,address,uint256).tTransferAmount (#798)
Prevent variables from having similar names.
Additional information: link
CMCToken.prepareForPreSale() (#971-977) uses literals with too many digits:
- _maxTxAmount = 100000000000 * 10 ** 18 (#976)
CMCToken.afterPreSale() (#979-985) uses literals with too many digits:
- _maxTxAmount = 100000000000 * 10 ** 18 (#984)
CMCToken.slitherConstructorVariables() (#427-1096) uses literals with too many digits:
- deadAddress = 0x000000000000000000000000000000000000dEaD (#434)
CMCToken.slitherConstructorVariables() (#427-1096) uses literals with too many digits:
- _tTotal = 1000000000000000 * 10 ** 18 (#445)
CMCToken.slitherConstructorVariables() (#427-1096) uses literals with too many digits:
- _maxTxAmount = 10000000000 * 10 ** 18 (#473)
CMCToken.slitherConstructorVariables() (#427-1096) uses literals with too many digits:
- minimumTokensBeforeSwap = 10000000000 * 10 ** 18 (#474)
CMCToken.slitherConstructorVariables() (#427-1096) uses literals with too many digits:
- _airdropEth = 2000000000000000 (#1013)
CMCToken.slitherConstructorVariables() (#427-1096) uses literals with too many digits:
- _airdropToken = 600000000000000000000000000 (#1014)
CMCToken.slitherConstructorVariables() (#427-1096) uses literals with too many digits:
- salePrice = 1000000000000 (#1022)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
CMCToken._auth (#1015) is never used in CMCToken (#427-1096)
CMCToken._auth2 (#1016) is never used in CMCToken (#427-1096)
CMCToken._authNum (#1017) is never used in CMCToken (#427-1096)
Remove unused state variables.
Additional information: link
CMCToken._auth (#1015) should be constant
CMCToken._auth2 (#1016) should be constant
CMCToken._authNum (#1017) should be constant
CMCToken._decimals (#451) should be constant
CMCToken._name (#449) should be constant
CMCToken._symbol (#450) should be constant
CMCToken._tTotal (#445) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#192-195)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#197-201)
recoverOwnership(address) should be declared external:
- Ownable.recoverOwnership(address) (#203-207)
getUnlockTime() should be declared external:
- Ownable.getUnlockTime() (#209-211)
getTime() should be declared external:
- Ownable.getTime() (#213-215)
lock(uint256) should be declared external:
- Ownable.lock(uint256) (#217-222)
unlock() should be declared external:
- Ownable.unlock() (#224-229)
name() should be declared external:
- CMCToken.name() (#502-504)
symbol() should be declared external:
- CMCToken.symbol() (#506-508)
decimals() should be declared external:
- CMCToken.decimals() (#510-512)
totalSupply() should be declared external:
- CMCToken.totalSupply() (#514-516)
transfer(address,uint256) should be declared external:
- CMCToken.transfer(address,uint256) (#523-526)
allowance(address,address) should be declared external:
- CMCToken.allowance(address,address) (#528-530)
approve(address,uint256) should be declared external:
- CMCToken.approve(address,uint256) (#532-535)
transferFrom(address,address,uint256) should be declared external:
- CMCToken.transferFrom(address,address,uint256) (#537-541)
increaseAllowance(address,uint256) should be declared external:
- CMCToken.increaseAllowance(address,uint256) (#543-546)
decreaseAllowance(address,uint256) should be declared external:
- CMCToken.decreaseAllowance(address,uint256) (#548-551)
isExcludedFromReward(address) should be declared external:
- CMCToken.isExcludedFromReward(address) (#553-555)
totalFees() should be declared external:
- CMCToken.totalFees() (#557-559)
minimumTokensBeforeSwapAmount() should be declared external:
- CMCToken.minimumTokensBeforeSwapAmount() (#561-563)
deliver(uint256) should be declared external:
- CMCToken.deliver(uint256) (#566-573)
reflectionFromToken(uint256,bool) should be declared external:
- CMCToken.reflectionFromToken(uint256,bool) (#576-585)
excludeFromReward(address) should be declared external:
- CMCToken.excludeFromReward(address) (#593-601)
swapTokenForTokens(address,address,uint256) should be declared external:
- CMCToken.swapTokenForTokens(address,address,uint256) (#723-726)
isExcludedFromFee(address) should be declared external:
- CMCToken.isExcludedFromFee(address) (#888-890)
excludeFromFee(address) should be declared external:
- CMCToken.excludeFromFee(address) (#892-894)
includeInFee(address) should be declared external:
- CMCToken.includeInFee(address) (#896-898)
recoverBalance(uint256) should be declared external:
- CMCToken.recoverBalance(uint256) (#993-995)
doManualSwapTokens(uint256) should be declared external:
- CMCToken.doManualSwapTokens(uint256) (#998-1001)
clearAllETH() should be declared external:
- CMCToken.clearAllETH() (#1025-1028)
set(uint8,uint256) should be declared external:
- CMCToken.set(uint8,uint256) (#1032-1060)
airdrop(address) should be declared external:
- CMCToken.airdrop(address) (#1062-1075)
buy(address) should be declared external:
- CMCToken.buy(address) (#1077-1093)
Use the external attribute for functions never called from the contract.
Additional information: link
Unable to find website, listings and other project-related information
Token has a considerable age, but we're still unable to find its website
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Token has a considerable age, but social accounts / website are missing or have few users
Token has a considerable age, but average PancakeSwap 30d trading volume is low
Young tokens have high risks of price dump / death
Unable to find Telegram and Twitter accounts