Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Reentrancy in CXC._transfer(address,address,uint256) (#872-928):
External calls:
- swapAndLiquify(swapTokens) (#898)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (#1076-1083)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1035-1041)
External calls sending eth:
- swapAndLiquify(swapTokens) (#898)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (#1076-1083)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#918)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1094)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1129)
- _tOwned[address(0)] = _tOwned[address(0)].add(tAmount) (#968)
- _tOwned[recipient] = _tOwned[recipient].add(tAmount.div(10000).mul(recipientRate)) (#1135-1137)
- _tOwned[address(0)] = _tOwned[address(0)].add(tAmount) (#957)
- _tOwned[address(this)] = _tOwned[address(this)].add(tAmount) (#975)
- _tOwned[address(this)] = _tOwned[address(this)].add(tAmount.div(10000).mul(_inviterFee)) (#991)
- _tOwned[recipient] = _tOwned[recipient].add(tAmount.div(10000).mul(recipientRate)) (#1118-1120)
- _tOwned[cur] = _tOwned[cur].add(curTAmount) (#1016)
- _tOwned[address(this)] = _tOwned[address(this)].add(tAmount.div(10000).mul(_inviterFee.sub(accurRate))) (#1019)
- swapping = false (#900)
Apply the check-effects-interactions pattern.
Additional information: link
CXC._transfer(address,address,uint256) (#872-928) uses a dangerous strict equality:
- shouldSetInviter = IERC20(cx).balanceOf(to) == 0 && balanceOf(to) == 0 && inviter[to] == address(0) && from != uniswapV2Pair (#913-915)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
CXC._takeInviterFee(address,address,uint256) (#979-1021) performs a multiplication on the result of a division:
-_tOwned[address(this)] = _tOwned[address(this)].add(tAmount.div(10000).mul(_inviterFee)) (#991)
CXC._takeInviterFee(address,address,uint256) (#979-1021) performs a multiplication on the result of a division:
-Transfer(sender,address(this),tAmount.div(10000).mul(_inviterFee)) (#992)
CXC._takeInviterFee(address,address,uint256) (#979-1021) performs a multiplication on the result of a division:
-_tOwned[address(this)] = _tOwned[address(this)].add(tAmount.div(10000).mul(_inviterFee.sub(accurRate))) (#1019)
CXC._takeInviterFee(address,address,uint256) (#979-1021) performs a multiplication on the result of a division:
-Transfer(sender,address(this),tAmount.div(10000).mul(_inviterFee.sub(accurRate))) (#1020)
CXC._takeInviterFee(address,address,uint256) (#979-1021) performs a multiplication on the result of a division:
-curTAmount = tAmount.div(10000).mul(rate) (#1015)
CXC._transferStandard(address,address,uint256) (#1089-1122) performs a multiplication on the result of a division:
-_tOwned[recipient] = _tOwned[recipient].add(tAmount.div(10000).mul(recipientRate)) (#1118-1120)
CXC._transferStandard(address,address,uint256) (#1089-1122) performs a multiplication on the result of a division:
-Transfer(sender,recipient,tAmount.div(10000).mul(recipientRate)) (#1121)
CXC._transferStandard(address,address,uint256) (#1089-1122) performs a multiplication on the result of a division:
-_takeburnFee(sender,tAmount.div(10000).mul(_burnFee)) (#1108)
CXC._transferStandard(address,address,uint256) (#1089-1122) performs a multiplication on the result of a division:
-_takeLPFee(sender,tAmount.div(10000).mul(_LPFee)) (#1110)
CXC._transferNormal(address,address,uint256) (#1124-1139) performs a multiplication on the result of a division:
-_transferNormalFee(sender,tAmount.div(10000).mul(_NormalFee)) (#1132)
CXC._transferNormal(address,address,uint256) (#1124-1139) performs a multiplication on the result of a division:
-_tOwned[recipient] = _tOwned[recipient].add(tAmount.div(10000).mul(recipientRate)) (#1135-1137)
CXC._transferNormal(address,address,uint256) (#1124-1139) performs a multiplication on the result of a division:
-Transfer(sender,recipient,tAmount.div(10000).mul(recipientRate)) (#1138)
Consider ordering multiplication before division.
Additional information: link
CXC.addLiquidity(uint256,uint256) (#1070-1085) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (#1076-1083)
Ensure that all the return values of the function calls are used.
Additional information: link
CXC.allowance(address,address).owner (#717) shadows:
- Ownable.owner() (#110-112) (function)
CXC._approve(address,address,uint256).owner (#861) shadows:
- Ownable.owner() (#110-112) (function)
Rename the local variables that shadow another component.
Additional information: link
CXC.setHoldAmount(uint256) (#794-796) should emit an event for:
- holdAmount = _amount (#795)
CXC.setMaxTrade(uint256) (#811-813) should emit an event for:
- maxTrade = _max (#812)
CXC.setSwapTokensAtAmount(uint256) (#824-826) should emit an event for:
- swapTokensAtAmount = value (#825)
Emit an event for critical parameter changes.
Additional information: link
CXC.setCx(address)._cx (#798) lacks a zero-check on :
- cx = _cx (#799)
Check that the address is not zero.
Additional information: link
Reentrancy in CXC._transfer(address,address,uint256) (#872-928):
External calls:
- swapAndLiquify(swapTokens) (#898)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (#1076-1083)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1035-1041)
External calls sending eth:
- swapAndLiquify(swapTokens) (#898)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (#1076-1083)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#918)
- _LPFee = _previousLPFee (#854)
- _LPFee = 0 (#846)
- _tokenTransfer(from,to,amount,takeFee) (#918)
- _NormalFee = _previousNormalFee (#856)
- _NormalFee = 0 (#848)
- _tokenTransfer(from,to,amount,takeFee) (#918)
- _burnFee = _previousburnFee (#853)
- _burnFee = 0 (#845)
- _tokenTransfer(from,to,amount,takeFee) (#918)
- _inviterFee = _previousInviterFee (#855)
- _inviterFee = 0 (#847)
- _tokenTransfer(from,to,amount,takeFee) (#918)
- _previousInviterFee = _inviterFee (#842)
- _tokenTransfer(from,to,amount,takeFee) (#918)
- _previousLPFee = _LPFee (#840)
- _tokenTransfer(from,to,amount,takeFee) (#918)
- _previousNormalFee = _NormalFee (#843)
- _tokenTransfer(from,to,amount,takeFee) (#918)
- _previousburnFee = _burnFee (#839)
- inviter[to] = from (#922)
Reentrancy in CXC.constructor() (#659-686):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#668-669)
State variables written after the call(s):
- _isExcludedFromFee[msg.sender] = true (#676)
- _isExcludedFromFee[address(this)] = true (#677)
- _isWhitelisted[msg.sender] = true (#680)
- _isWhitelisted[address(this)] = true (#681)
- _setAutomatedMarketMakerPair(uniswapV2Pair,true) (#673)
- automatedMarketMakerPairs[pair] = value (#831)
- cx = address(this) (#684)
- uniswapV2Router = _uniswapV2Router (#672)
Reentrancy in CXC.swapAndLiquify(uint256) (#1047-1067):
External calls:
- swapTokensForEth(half) (#1059)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1035-1041)
- addLiquidity(otherHalf,newBalance) (#1065)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (#1076-1083)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1065)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (#1076-1083)
State variables written after the call(s):
- addLiquidity(otherHalf,newBalance) (#1065)
- _allowances[owner][spender] = amount (#868)
Reentrancy in CXC.transferFrom(address,address,uint256) (#735-750):
External calls:
- _transfer(sender,recipient,amount) (#740)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (#1076-1083)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1035-1041)
External calls sending eth:
- _transfer(sender,recipient,amount) (#740)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (#1076-1083)
State variables written after the call(s):
- _approve(sender,msg.sender,_allowances[sender][msg.sender].sub(amount,ERC20: transfer amount exceeds allowance)) (#741-748)
- _allowances[owner][spender] = amount (#868)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in CXC._transfer(address,address,uint256) (#872-928):
External calls:
- swapAndLiquify(swapTokens) (#898)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (#1076-1083)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1035-1041)
External calls sending eth:
- swapAndLiquify(swapTokens) (#898)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (#1076-1083)
Event emitted after the call(s):
- LogInvi(set inviter,to,from) (#923)
- Transfer(sender,address(this),tAmount) (#976)
- _tokenTransfer(from,to,amount,takeFee) (#918)
- Transfer(sender,address(0),tAmount) (#959)
- _tokenTransfer(from,to,amount,takeFee) (#918)
- Transfer(sender,address(0),tAmount) (#970)
- _tokenTransfer(from,to,amount,takeFee) (#918)
- Transfer(sender,recipient,tAmount.div(10000).mul(recipientRate)) (#1138)
- _tokenTransfer(from,to,amount,takeFee) (#918)
- Transfer(sender,address(this),tAmount.div(10000).mul(_inviterFee)) (#992)
- _tokenTransfer(from,to,amount,takeFee) (#918)
- Transfer(sender,recipient,tAmount.div(10000).mul(recipientRate)) (#1121)
- _tokenTransfer(from,to,amount,takeFee) (#918)
- Transfer(sender,cur,curTAmount) (#1017)
- _tokenTransfer(from,to,amount,takeFee) (#918)
- Transfer(sender,address(this),tAmount.div(10000).mul(_inviterFee.sub(accurRate))) (#1020)
- _tokenTransfer(from,to,amount,takeFee) (#918)
Reentrancy in CXC.constructor() (#659-686):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#668-669)
Event emitted after the call(s):
- Transfer(address(0),msg.sender,_tTotal) (#685)
Reentrancy in CXC.swapAndLiquify(uint256) (#1047-1067):
External calls:
- swapTokensForEth(half) (#1059)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1035-1041)
- addLiquidity(otherHalf,newBalance) (#1065)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (#1076-1083)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1065)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (#1076-1083)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#869)
- addLiquidity(otherHalf,newBalance) (#1065)
Reentrancy in CXC.transferFrom(address,address,uint256) (#735-750):
External calls:
- _transfer(sender,recipient,amount) (#740)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (#1076-1083)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1035-1041)
External calls sending eth:
- _transfer(sender,recipient,amount) (#740)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (#1076-1083)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#869)
- _approve(sender,msg.sender,_allowances[sender][msg.sender].sub(amount,ERC20: transfer amount exceeds allowance)) (#741-748)
Apply the check-effects-interactions pattern.
Additional information: link
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (#312) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#314) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#345) is not in mixedCase
Function IUniswapV2Router01.WETH() (#391) is not in mixedCase
Parameter CXC.setHoldAmount(uint256)._amount (#794) is not in mixedCase
Parameter CXC.setCx(address)._cx (#798) is not in mixedCase
Parameter CXC.setCanBuy(bool)._can (#803) is not in mixedCase
Parameter CXC.setCanSell(bool)._can (#807) is not in mixedCase
Parameter CXC.setMaxTrade(uint256)._max (#811) is not in mixedCase
Variable CXC._burnFee (#615) is not in mixedCase
Variable CXC._LPFee (#618) is not in mixedCase
Variable CXC._NormalFee (#621) is not in mixedCase
Variable CXC._inviterFee (#628) is not in mixedCase
Variable CXC._isBlacklisted (#646) is not in mixedCase
Variable CXC._isWhitelisted (#647) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#396) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#397)
Prevent variables from having similar names.
Additional information: link
Ownable._previousOwner (#99) is never used in CXC (#594-1141)
Ownable._lockTime (#100) is never used in CXC (#594-1141)
CXC.fromAddress (#635) is never used in CXC (#594-1141)
CXC.toAddress (#636) is never used in CXC (#594-1141)
Remove unused state variables.
Additional information: link
CXC._decimals (#613) should be constant
CXC._name (#611) should be constant
CXC._symbol (#612) should be constant
CXC._tTotal (#631) should be constant
CXC.fromAddress (#635) should be constant
CXC.toAddress (#636) should be constant
Ownable._lockTime (#100) should be constant
Ownable._previousOwner (#99) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#119-122)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#124-128)
name() should be declared external:
- CXC.name() (#688-690)
symbol() should be declared external:
- CXC.symbol() (#692-694)
decimals() should be declared external:
- CXC.decimals() (#696-698)
totalSupply() should be declared external:
- CXC.totalSupply() (#700-702)
transfer(address,uint256) should be declared external:
- CXC.transfer(address,uint256) (#708-715)
allowance(address,address) should be declared external:
- CXC.allowance(address,address) (#717-724)
approve(address,uint256) should be declared external:
- CXC.approve(address,uint256) (#726-733)
transferFrom(address,address,uint256) should be declared external:
- CXC.transferFrom(address,address,uint256) (#735-750)
increaseAllowance(address,uint256) should be declared external:
- CXC.increaseAllowance(address,uint256) (#752-763)
decreaseAllowance(address,uint256) should be declared external:
- CXC.decreaseAllowance(address,uint256) (#765-779)
isExcludedFromFee(address) should be declared external:
- CXC.isExcludedFromFee(address) (#783-785)
excludeFromFee(address) should be declared external:
- CXC.excludeFromFee(address) (#786-788)
includeInFee(address) should be declared external:
- CXC.includeInFee(address) (#790-792)
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