Catcoin Token Logo

CATS [Catcoin] Token

About CATS

Listings

Token 8 months
CoinGecko 6 months
CoinMarketCap 7 months
[CoinMarketCap] alert: CATCOIN has migrated their contract address from v1 to V2. For official announcement, kindly visit here.
[CoinGecko] alert: CatCoin Token has migrated from their old contract to a new one. For more information, please visit this post.
white paper

CatCoin - ✔ World's Best Community Driven Coin ✔ Verified contract source
✔ Ownership renounced or source does not contain an owner contract
✔ Creator not authorized for special permission
✔ Tokens locked (1.19%)
✔ Creator wallet contains less than 5% of token supply (< 0.01%)
✔ All other holders possess less than 5% of the token supply

Laser Scorebeta Last Audit: 21 June 2022

report
Token seems to be (relatively) fine. It still become a scam, but probability is moderate.

Reentrancy in Catcoin._transfer(address,address,uint256) (#738-765):
External calls:
- swapAndLiquify(contractTokenBalance) (#757)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#822-828)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#757)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
- address(withdrawcontract).transfer(marketingAmt) (#801)
- address(_devwallet).transfer(devAmt) (#805)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#764)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#662)
- _rOwned[address(this)] = _rOwned[address(this)].add(rWallet) (#670)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#882)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#906)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#931)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#955)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#883)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#908)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#932)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#957)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- _rTotal = _rTotal.sub(rFee) (#592)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (#664)
- _tOwned[address(this)] = _tOwned[address(this)].add(tWallet) (#672)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#930)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#954)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#907)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#956)
Apply the check-effects-interactions pattern.

Additional information: link

Catcoin.swapAndLiquify(uint256) (#767-813) sends eth to arbitrary user
Dangerous calls:
- address(withdrawcontract).transfer(marketingAmt) (#801)
Ensure that an arbitrary user cannot withdraw unauthorized funds.

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.

Catcoin.allowance(address,address).owner (#393) shadows:
- Ownable.owner() (#184-186) (function)
Catcoin._approve(address,address,uint256).owner (#716) shadows:
- Ownable.owner() (#184-186) (function)
Rename the local variables that shadow another component.

Additional information: link

Address.isContract(address) (#89-96) uses assembly
- INLINE ASM (#92-94)
Address._functionCallWithValue(address,bytes,uint256,string) (#147-169) uses assembly
- INLINE ASM (#161-164)
Do not use evm assembly.

Additional information: link

Low level call in Address.sendValue(address,uint256) (#97-107):
- (success) = recipient.call{value: amount}() (#102)
Low level call in Address._functionCallWithValue(address,bytes,uint256,string) (#147-169):
- (success,returndata) = target.call{value: weiValue}(data) (#154-156)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence

Additional information: link

Redundant expression "this (#84)" inContext (#79-87)
Remove redundant statements if they congest code but offer no value.

Additional information: link

Function IUniswapV2Router01.WETH() (#219) is not in mixedCase
Event CatcoinbotAddedToBlacklist(address) (#305) is not in CapWords
Event CatcoinbotRemovedFromBlacklist(address) (#306) is not in CapWords
Event CatcoinexcludeUserFromReward(address) (#310) is not in CapWords
Event CatcoinincludeUserInReward(address) (#311) is not in CapWords
Event CatcoinexcludeUserFromFees(address) (#312) is not in CapWords
Event CatcoinincludeUserInFees(address) (#313) is not in CapWords
Parameter Catcoin.setMultisig(address)._multisig (#385) is not in mixedCase
Parameter Catcoin.setFees(uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16).buy_tax (#544) is not in mixedCase
Parameter Catcoin.setFees(uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16).buy_liquidity (#545) is not in mixedCase
Parameter Catcoin.setFees(uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16).buy_marketing (#546) is not in mixedCase
Parameter Catcoin.setFees(uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16).buy_dev (#547) is not in mixedCase
Parameter Catcoin.setFees(uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16).sell_tax (#548) is not in mixedCase
Parameter Catcoin.setFees(uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16).sell_liquidity (#549) is not in mixedCase
Parameter Catcoin.setFees(uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16).sell_marketing (#550) is not in mixedCase
Parameter Catcoin.setFees(uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16).sell_dev (#551) is not in mixedCase
Parameter Catcoin.setSwapAndLiquifyEnabled(bool)._enabled (#584) is not in mixedCase
Parameter Catcoin.calculateTaxFee(uint256)._amount (#675) is not in mixedCase
Parameter Catcoin.calculateLiquidityFee(uint256)._amount (#679) is not in mixedCase
Parameter Catcoin.calculateMarketingFee(uint256)._amount (#683) is not in mixedCase
Parameter Catcoin.calculateDevFee(uint256)._amount (#687) is not in mixedCase
Parameter Catcoin.openTrading(address)._withdrawcontract (#723) is not in mixedCase
Constant Catcoin._name (#251) is not in UPPER_CASE_WITH_UNDERSCORES
Constant Catcoin._symbol (#252) is not in UPPER_CASE_WITH_UNDERSCORES
Constant Catcoin._decimals (#253) is not in UPPER_CASE_WITH_UNDERSCORES
Variable Catcoin._isExcludedFromFee (#258) is not in mixedCase
Variable Catcoin._isExcluded (#259) is not in mixedCase
Variable Catcoin._isBlackListedBot (#261) is not in mixedCase
Constant Catcoin._tTotal (#265) is not in UPPER_CASE_WITH_UNDERSCORES
Follow the Solidity naming convention.

Additional information: link

Address._functionCallWithValue(address,bytes,uint256,string) (#147-169) is never used and should be removed
Address.functionCall(address,bytes) (#108-113) is never used and should be removed
Address.functionCall(address,bytes,string) (#114-120) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#121-133) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#134-145) is never used and should be removed
Address.isContract(address) (#89-96) is never used and should be removed
Address.sendValue(address,uint256) (#97-107) is never used and should be removed
Context._msgData() (#83-86) is never used and should be removed
SafeMath.mod(uint256,uint256) (#66-68) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#69-76) is never used and should be removed
Remove unused functions.

Additional information: link

Variable Catcoin._transferToExcluded(address,address,uint256).rTransferAmount (#898) is too similar to Catcoin._transferFromExcluded(address,address,uint256).tTransferAmount (#917)
Variable Catcoin.reflectionFromToken(uint256,bool).rTransferAmount (#451) is too similar to Catcoin._transferFromExcluded(address,address,uint256).tTransferAmount (#917)
Variable Catcoin.reflectionFromToken(uint256,bool).rTransferAmount (#451) is too similar to Catcoin._transferToExcluded(address,address,uint256).tTransferAmount (#893)
Variable Catcoin._transferStandard(address,address,uint256).rTransferAmount (#874) is too similar to Catcoin._transferFromExcluded(address,address,uint256).tTransferAmount (#917)
Variable Catcoin._transferBothExcluded(address,address,uint256).rTransferAmount (#946) is too similar to Catcoin._transferFromExcluded(address,address,uint256).tTransferAmount (#917)
Variable Catcoin._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#632-635) is too similar to Catcoin._transferFromExcluded(address,address,uint256).tTransferAmount (#917)
Variable Catcoin._transferStandard(address,address,uint256).rTransferAmount (#874) is too similar to Catcoin._transferToExcluded(address,address,uint256).tTransferAmount (#893)
Variable Catcoin._transferBothExcluded(address,address,uint256).rTransferAmount (#946) is too similar to Catcoin._transferToExcluded(address,address,uint256).tTransferAmount (#893)
Variable Catcoin._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#632-635) is too similar to Catcoin._transferBothExcluded(address,address,uint256).tTransferAmount (#941)
Variable Catcoin._transferToExcluded(address,address,uint256).rTransferAmount (#898) is too similar to Catcoin._transferToExcluded(address,address,uint256).tTransferAmount (#893)
Variable Catcoin._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#632-635) is too similar to Catcoin._getTValues(uint256).tTransferAmount (#607)
Variable Catcoin._transferStandard(address,address,uint256).rTransferAmount (#874) is too similar to Catcoin._transferStandard(address,address,uint256).tTransferAmount (#869)
Variable Catcoin._transferFromExcluded(address,address,uint256).rTransferAmount (#922) is too similar to Catcoin._transferStandard(address,address,uint256).tTransferAmount (#869)
Variable Catcoin._transferToExcluded(address,address,uint256).rTransferAmount (#898) is too similar to Catcoin._transferStandard(address,address,uint256).tTransferAmount (#869)
Variable Catcoin._transferStandard(address,address,uint256).rTransferAmount (#874) is too similar to Catcoin._transferBothExcluded(address,address,uint256).tTransferAmount (#941)
Variable Catcoin._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#632-635) is too similar to Catcoin._transferToExcluded(address,address,uint256).tTransferAmount (#893)
Variable Catcoin._transferFromExcluded(address,address,uint256).rTransferAmount (#922) is too similar to Catcoin._transferBothExcluded(address,address,uint256).tTransferAmount (#941)
Variable Catcoin._transferStandard(address,address,uint256).rTransferAmount (#874) is too similar to Catcoin._getTValues(uint256).tTransferAmount (#607)
Variable Catcoin.reflectionFromToken(uint256,bool).rTransferAmount (#451) is too similar to Catcoin._transferStandard(address,address,uint256).tTransferAmount (#869)
Variable Catcoin._transferFromExcluded(address,address,uint256).rTransferAmount (#922) is too similar to Catcoin._getTValues(uint256).tTransferAmount (#607)
Variable Catcoin._transferBothExcluded(address,address,uint256).rTransferAmount (#946) is too similar to Catcoin._transferStandard(address,address,uint256).tTransferAmount (#869)
Variable Catcoin._transferToExcluded(address,address,uint256).rTransferAmount (#898) is too similar to Catcoin._transferBothExcluded(address,address,uint256).tTransferAmount (#941)
Variable Catcoin._transferToExcluded(address,address,uint256).rTransferAmount (#898) is too similar to Catcoin._getTValues(uint256).tTransferAmount (#607)
Variable Catcoin.reflectionFromToken(uint256,bool).rTransferAmount (#451) is too similar to Catcoin._transferBothExcluded(address,address,uint256).tTransferAmount (#941)
Variable Catcoin._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#632-635) is too similar to Catcoin._transferStandard(address,address,uint256).tTransferAmount (#869)
Variable Catcoin.reflectionFromToken(uint256,bool).rTransferAmount (#451) is too similar to Catcoin._getTValues(uint256).tTransferAmount (#607)
Variable Catcoin._transferFromExcluded(address,address,uint256).rTransferAmount (#922) is too similar to Catcoin._transferToExcluded(address,address,uint256).tTransferAmount (#893)
Variable Catcoin._transferBothExcluded(address,address,uint256).rTransferAmount (#946) is too similar to Catcoin._transferBothExcluded(address,address,uint256).tTransferAmount (#941)
Variable Catcoin._transferFromExcluded(address,address,uint256).rTransferAmount (#922) is too similar to Catcoin._transferFromExcluded(address,address,uint256).tTransferAmount (#917)
Variable Catcoin._transferBothExcluded(address,address,uint256).rTransferAmount (#946) is too similar to Catcoin._getTValues(uint256).tTransferAmount (#607)
Prevent variables from having similar names.

Additional information: link

Ownable._lockTime (#174) should be constant
Ownable._previousOwner (#173) should be constant
Add the constant attributes to state variables that never change.

Additional information: link

Catcoin.removeBotFromBlacklist(address) (#494-507) has costly operations inside a loop:
- _blackListedBots.pop() (#502)
Catcoin.includeInReward(address) (#519-531) has costly operations inside a loop:
- _excluded.pop() (#526)
Catcoin.lockTheSwap() (#332-336) has costly operations inside a loop:
- inSwapAndLiquify = true (#333)
Catcoin.lockTheSwap() (#332-336) has costly operations inside a loop:
- inSwapAndLiquify = false (#335)
Catcoin.removeAllFee() (#691-696) has costly operations inside a loop:
- _taxFee = 0 (#692)
Catcoin.removeAllFee() (#691-696) has costly operations inside a loop:
- _liquidityFee = 0 (#693)
Catcoin.removeAllFee() (#691-696) has costly operations inside a loop:
- _marketingFee = 0 (#694)
Catcoin.removeAllFee() (#691-696) has costly operations inside a loop:
- _devFee = 0 (#695)
Catcoin.setBuy() (#698-703) has costly operations inside a loop:
- _taxFee = buyFee.tax (#699)
Catcoin.setBuy() (#698-703) has costly operations inside a loop:
- _liquidityFee = buyFee.liquidity (#700)
Catcoin.setBuy() (#698-703) has costly operations inside a loop:
- _marketingFee = buyFee.marketing (#701)
Catcoin.setBuy() (#698-703) has costly operations inside a loop:
- _devFee = buyFee.dev (#702)
Catcoin.setSell() (#705-710) has costly operations inside a loop:
- _taxFee = sellFee.tax (#706)
Catcoin.setSell() (#705-710) has costly operations inside a loop:
- _liquidityFee = sellFee.liquidity (#707)
Catcoin.setSell() (#705-710) has costly operations inside a loop:
- _marketingFee = sellFee.marketing (#708)
Catcoin.setSell() (#705-710) has costly operations inside a loop:
- _devFee = sellFee.dev (#709)
Catcoin._reflectFee(uint256,uint256) (#591-594) has costly operations inside a loop:
- _rTotal = _rTotal.sub(rFee) (#592)
Catcoin._reflectFee(uint256,uint256) (#591-594) has costly operations inside a loop:
- _tFeeTotal = _tFeeTotal.add(tFee) (#593)
Use a local variable to hold the loop computation result.

Additional information: link

Catcoin.addLiquidity(uint256,uint256) (#831-841) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
Ensure that all the return values of the function calls are used.

Additional information: link


Not a direct threat, but may indicate unreliable intentions of developer. Widespread names (e.g. Elon, King, Moon, Doge) are common among meme-tokens and scams. The allow to gain free hype and attract unexperienced investors.

Catcoin.swapTokensForEth(uint256) (#815-829) has external calls inside a loop: path[1] = uniswapV2Router.WETH() (#818)
Catcoin.swapTokensForEth(uint256) (#815-829) has external calls inside a loop: uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#822-828)
Catcoin.addLiquidity(uint256,uint256) (#831-841) has external calls inside a loop: uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
Catcoin.swapAndLiquify(uint256) (#767-813) has external calls inside a loop: address(withdrawcontract).transfer(marketingAmt) (#801)
Catcoin.swapAndLiquify(uint256) (#767-813) has external calls inside a loop: address(_devwallet).transfer(devAmt) (#805)
Favor pull over push strategy for external calls.

Additional information: link

Reentrancy in Catcoin._transfer(address,address,uint256) (#738-765):
External calls:
- swapAndLiquify(contractTokenBalance) (#757)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#822-828)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#757)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
- address(withdrawcontract).transfer(marketingAmt) (#801)
- address(_devwallet).transfer(devAmt) (#805)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#764)
- _devFee = 0 (#695)
- _devFee = sellFee.dev (#709)
- _devFee = buyFee.dev (#702)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- _liquidityFee = 0 (#693)
- _liquidityFee = sellFee.liquidity (#707)
- _liquidityFee = buyFee.liquidity (#700)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- _marketingFee = buyFee.marketing (#701)
- _marketingFee = sellFee.marketing (#708)
- _marketingFee = 0 (#694)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- _tFeeTotal = _tFeeTotal.add(tFee) (#593)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- _taxFee = buyFee.tax (#699)
- _taxFee = sellFee.tax (#706)
- _taxFee = 0 (#692)
Reentrancy in Catcoin.constructor() (#343-374):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#359-360)
State variables written after the call(s):
- _isExcluded[address(this)] = true (#368)
- _isExcluded[multisig] = true (#370)
- _isExcluded[uniswapV2Pair] = true (#372)
- _isExcludedFromFee[owner()] = true (#366)
- _isExcludedFromFee[address(this)] = true (#367)
- _isExcludedFromFee[multisig] = true (#369)
- _isExcludedFromFee[_devwallet] = true (#371)
- uniswapV2Router = _uniswapV2Router (#363)
Reentrancy in Catcoin.swapAndLiquify(uint256) (#767-813):
External calls:
- swapTokensForEth(toSwap) (#781)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#822-828)
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#790)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
External calls sending eth:
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#790)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
State variables written after the call(s):
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#790)
- _allowances[owner][spender] = amount (#719)
Reentrancy in Catcoin.transferFrom(address,address,uint256) (#399-410):
External calls:
- _transfer(sender,recipient,amount) (#400)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#822-828)
External calls sending eth:
- _transfer(sender,recipient,amount) (#400)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
- address(withdrawcontract).transfer(marketingAmt) (#801)
- address(_devwallet).transfer(devAmt) (#805)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#401-408)
- _allowances[owner][spender] = amount (#719)
Apply the check-effects-interactions pattern.

Additional information: link

Reentrancy in Catcoin._transfer(address,address,uint256) (#738-765):
External calls:
- swapAndLiquify(contractTokenBalance) (#757)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#822-828)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#757)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
- address(withdrawcontract).transfer(marketingAmt) (#801)
- address(_devwallet).transfer(devAmt) (#805)
Event emitted after the call(s):
- Transfer(sender,recipient,tTransferAmount) (#887)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- Transfer(sender,recipient,tTransferAmount) (#912)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- Transfer(sender,recipient,tTransferAmount) (#936)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- Transfer(sender,recipient,tTransferAmount) (#961)
- _tokenTransfer(from,to,amount,takeFee) (#764)
Reentrancy in Catcoin.constructor() (#343-374):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#359-360)
Event emitted after the call(s):
- Transfer(address(0),_msgSender(),_tTotal) (#373)
Reentrancy in Catcoin.swapAndLiquify(uint256) (#767-813):
External calls:
- swapTokensForEth(toSwap) (#781)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#822-828)
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#790)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
External calls sending eth:
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#790)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#720)
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#790)
Reentrancy in Catcoin.swapAndLiquify(uint256) (#767-813):
External calls:
- swapTokensForEth(toSwap) (#781)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#822-828)
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#790)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
External calls sending eth:
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#790)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
- address(withdrawcontract).transfer(marketingAmt) (#801)
- address(_devwallet).transfer(devAmt) (#805)
Event emitted after the call(s):
- SwapAndLiquify(toSwap,deltaBalance,tokensToAddLiquidityWith) (#808-812)
Reentrancy in Catcoin.transferFrom(address,address,uint256) (#399-410):
External calls:
- _transfer(sender,recipient,amount) (#400)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#822-828)
External calls sending eth:
- _transfer(sender,recipient,amount) (#400)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
- address(withdrawcontract).transfer(marketingAmt) (#801)
- address(_devwallet).transfer(devAmt) (#805)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#720)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#401-408)
Apply the check-effects-interactions pattern.

Additional information: link

Pragma version=0.8.10 (#1) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
solc-0.8.10 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

Catcoin.swapAndLiquify(uint256) (#767-813) performs a multiplication on the result of a division:
-unitBalance = deltaBalance / (denominator - (buyFee.liquidity + sellFee.liquidity)) (#784-785)
-bnbToAddLiquidityWith = unitBalance * (buyFee.liquidity + sellFee.liquidity) (#786-787)
Catcoin.swapAndLiquify(uint256) (#767-813) performs a multiplication on the result of a division:
-unitBalance = deltaBalance / (denominator - (buyFee.liquidity + sellFee.liquidity)) (#784-785)
-marketingAmt = unitBalance * 2 * (buyFee.marketing + sellFee.marketing) (#792-794)
Catcoin.swapAndLiquify(uint256) (#767-813) performs a multiplication on the result of a division:
-unitBalance = deltaBalance / (denominator - (buyFee.liquidity + sellFee.liquidity)) (#784-785)
-unitBalance * 2 * (buyFee.dev + sellFee.dev) > address(this).balance (#795-798)
Catcoin.swapAndLiquify(uint256) (#767-813) performs a multiplication on the result of a division:
-unitBalance = deltaBalance / (denominator - (buyFee.liquidity + sellFee.liquidity)) (#784-785)
-devAmt = unitBalance * 2 * (buyFee.dev + sellFee.dev) (#795-798)
Consider ordering multiplication before division.

Additional information: link

Reentrancy in Catcoin._transfer(address,address,uint256) (#738-765):
External calls:
- swapAndLiquify(contractTokenBalance) (#757)
- address(withdrawcontract).transfer(marketingAmt) (#801)
- address(_devwallet).transfer(devAmt) (#805)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#757)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
- address(withdrawcontract).transfer(marketingAmt) (#801)
- address(_devwallet).transfer(devAmt) (#805)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#764)
- _devFee = 0 (#695)
- _devFee = sellFee.dev (#709)
- _devFee = buyFee.dev (#702)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- _liquidityFee = 0 (#693)
- _liquidityFee = sellFee.liquidity (#707)
- _liquidityFee = buyFee.liquidity (#700)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- _marketingFee = buyFee.marketing (#701)
- _marketingFee = sellFee.marketing (#708)
- _marketingFee = 0 (#694)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#662)
- _rOwned[address(this)] = _rOwned[address(this)].add(rWallet) (#670)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#882)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#906)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#931)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#955)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#883)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#908)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#932)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#957)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- _rTotal = _rTotal.sub(rFee) (#592)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- _tFeeTotal = _tFeeTotal.add(tFee) (#593)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (#664)
- _tOwned[address(this)] = _tOwned[address(this)].add(tWallet) (#672)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#930)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#954)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#907)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#956)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- _taxFee = buyFee.tax (#699)
- _taxFee = sellFee.tax (#706)
- _taxFee = 0 (#692)
Event emitted after the call(s):
- Transfer(sender,recipient,tTransferAmount) (#887)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- Transfer(sender,recipient,tTransferAmount) (#936)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- Transfer(sender,recipient,tTransferAmount) (#912)
- _tokenTransfer(from,to,amount,takeFee) (#764)
- Transfer(sender,recipient,tTransferAmount) (#961)
- _tokenTransfer(from,to,amount,takeFee) (#764)
Reentrancy in Catcoin.excessFundWithdrawal() (#576-582):
External calls:
- address(withdrawcontract).transfer(amountBNB) (#579)
Event emitted after the call(s):
- RecoverFunds() (#580)
Reentrancy in Catcoin.swapAndLiquify(uint256) (#767-813):
External calls:
- address(withdrawcontract).transfer(marketingAmt) (#801)
- address(_devwallet).transfer(devAmt) (#805)
External calls sending eth:
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#790)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
- address(withdrawcontract).transfer(marketingAmt) (#801)
- address(_devwallet).transfer(devAmt) (#805)
Event emitted after the call(s):
- SwapAndLiquify(toSwap,deltaBalance,tokensToAddLiquidityWith) (#808-812)
Reentrancy in Catcoin.transferFrom(address,address,uint256) (#399-410):
External calls:
- _transfer(sender,recipient,amount) (#400)
- address(withdrawcontract).transfer(marketingAmt) (#801)
- address(_devwallet).transfer(devAmt) (#805)
External calls sending eth:
- _transfer(sender,recipient,amount) (#400)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,withdrawcontract,block.timestamp) (#833-840)
- address(withdrawcontract).transfer(marketingAmt) (#801)
- address(_devwallet).transfer(devAmt) (#805)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#401-408)
- _allowances[owner][spender] = amount (#719)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#720)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#401-408)
Apply the check-effects-interactions pattern.

Additional information: link

Ownable._previousOwner (#173) is never used in Catcoin (#246-972)
Ownable._lockTime (#174) is never used in Catcoin (#246-972)
Remove unused state variables.

Additional information: link

Catcoin.setMultisig(address)._multisig (#385) lacks a zero-check on :
- multisig = _multisig (#386)
Catcoin.openTrading(address)._withdrawcontract (#723) lacks a zero-check on :
- withdrawcontract = _withdrawcontract (#734)
Check that the address is not zero.

Additional information: link

Catcoin._transfer(address,address,uint256) (#738-765) uses tx.origin for authorization: require(bool,string)(! _isBlackListedBot[tx.origin],blacklisted) (#745)
Do not use tx.origin for authorization.

Additional information: link

allowance(address,address) should be declared external:
- Catcoin.allowance(address,address) (#393-394)
isExcludedFromReward(address) should be declared external:
- Catcoin.isExcludedFromReward(address) (#433-435)
totalFees() should be declared external:
- Catcoin.totalFees() (#437-439)
setSwapTreshold(uint256) should be declared external:
- Catcoin.setSwapTreshold(uint256) (#441-445)
reflectionFromToken(uint256,bool) should be declared external:
- Catcoin.reflectionFromToken(uint256,bool) (#447-464)
isExcludedFromFee(address) should be declared external:
- Catcoin.isExcludedFromFee(address) (#712-714)
multiSendTokens(address[],uint256[]) should be declared external:
- Catcoin.multiSendTokens(address[],uint256[]) (#964-970)
Use the external attribute for functions never called from the contract.

Additional information: link

Holders:


Swap operations require suspiciously high gas. Contract logic is complex and may disguise some form of scam.


Token is deployed only at one blockchain

Contract has 5% buy tax and 6% sell tax.
Taxes are low and contract ownership is renounced.

No disclosed threats


Unable to find KYC or doxxing proof


Young tokens have high risks of price dump / death


Young tokens have high risks of price dump / death


Young tokens have high risks of price dump / death


Token has relatively low CoinGecko rank


Young tokens have high risks of price dump / death


Young tokens have high risks of price dump / death

Price for CATS

News for CATS