The Cheetah Fund was founded by THE CCF Foundation, which partnered with D.E. Shaw to develop cheetah Robot systems.
Reentrancy in CHEETAH._transfer(address,address,uint256) (#958-1024):
External calls:
- swapAndLiquify(AmountLiquidityFee) (#982)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiveAddress,block.timestamp) (#1096-1103)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1082-1088)
External calls sending eth:
- swapAndLiquify(AmountLiquidityFee) (#982)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiveAddress,block.timestamp) (#1096-1103)
State variables written after the call(s):
- AmountLiquidityFee = 0 (#983)
Reentrancy in CHEETAH._transfer(address,address,uint256) (#958-1024):
External calls:
- swapAndLiquify(AmountLiquidityFee) (#982)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiveAddress,block.timestamp) (#1096-1103)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1082-1088)
- swapLPRewardToken(AmountLpRewardFee) (#986)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(dividendTracker),block.timestamp) (#1113-1119)
External calls sending eth:
- swapAndLiquify(AmountLiquidityFee) (#982)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiveAddress,block.timestamp) (#1096-1103)
State variables written after the call(s):
- amount = takeAllFee(from,amount) (#1004)
- AmountLiquidityFee += LFee (#1043)
- AmountLpRewardFee = 0 (#987)
- amount = takeAllFee(from,amount) (#1004)
- AmountLpRewardFee += LPFee (#1047)
- amount = takeAllFee(from,amount) (#1004)
- _balances[sender] = _balances[sender].sub(amount,ERC20: transfer amount exceeds balance) (#583)
- _balances[recipient] = _balances[recipient].add(amount) (#584)
- super._transfer(from,to,amount) (#1007)
- _balances[sender] = _balances[sender].sub(amount,ERC20: transfer amount exceeds balance) (#583)
- _balances[recipient] = _balances[recipient].add(amount) (#584)
- swapping = false (#989)
Reentrancy in CHEETAH._transfer(address,address,uint256) (#958-1024):
External calls:
- swapAndLiquify(AmountLiquidityFee) (#982)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiveAddress,block.timestamp) (#1096-1103)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1082-1088)
- swapLPRewardToken(AmountLpRewardFee) (#986)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(dividendTracker),block.timestamp) (#1113-1119)
- dividendTracker.setShare(fromAddress) (#1011)
- dividendTracker.setShare(toAddress) (#1012)
External calls sending eth:
- swapAndLiquify(AmountLiquidityFee) (#982)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiveAddress,block.timestamp) (#1096-1103)
State variables written after the call(s):
- fromAddress = from (#1013)
- toAddress = to (#1014)
Apply the check-effects-interactions pattern.
Additional information: link
TokenDividendTracker.process(uint256) (#697-728) ignores return value by IERC20(lpRewardToken).transfer(shareholders[currentIndex],amount) (#722)
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...)
Contract ownership is not renounced (belongs to a wallet)
TokenDividendTracker.process(uint256) (#697-728) uses a dangerous strict equality:
- amount == 0 (#716)
TokenDividendTracker.setShare(address) (#730-739) uses a dangerous strict equality:
- IERC20(uniswapV2Pair).balanceOf(shareholder) == 0 (#732)
TokenDividendTracker.setShare(address) (#730-739) uses a dangerous strict equality:
- IERC20(uniswapV2Pair).balanceOf(shareholder) == 0 (#735)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
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.
Context._msgData() (#84-87) is never used and should be removed
ERC20._burn(address,uint256) (#618-626) is never used and should be removed
SafeMath.mod(uint256,uint256) (#386-388) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#390-393) is never used and should be removed
Remove unused functions.
Additional information: link
Reentrancy in TokenDividendTracker.process(uint256) (#697-728):
External calls:
- IERC20(lpRewardToken).transfer(shareholders[currentIndex],amount) (#722)
State variables written after the call(s):
- currentIndex ++ (#725)
Apply the check-effects-interactions pattern.
Additional information: link
CHEETAH.addLiquidity(uint256,uint256) (#1092-1105) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiveAddress,block.timestamp) (#1096-1103)
Ensure that all the return values of the function calls are used.
Additional information: link
CHEETAH.constructor(string,string,uint256,address,address,address).totalSupply (#819) shadows:
- ERC20.totalSupply() (#457-459) (function)
- IERC20.totalSupply() (#8) (function)
Rename the local variables that shadow another component.
Additional information: link
CHEETAH.setSwapTokensAtAmount(uint256) (#907-909) should emit an event for:
- swapTokensAtAmount = amount (#908)
CHEETAH.setLiquidityFee(uint256) (#912-914) should emit an event for:
- liquidityFee = val (#913)
CHEETAH.setMarketingFee(uint256) (#917-919) should emit an event for:
- marketingFee = val (#918)
CHEETAH.setFoundationFee(uint256) (#922-924) should emit an event for:
- foundationFee = val (#923)
CHEETAH.setDeadFee(uint256) (#927-929) should emit an event for:
- deadFee = val (#928)
CHEETAH.setLpRewardFee(uint256) (#932-934) should emit an event for:
- lpRewardFee = val (#933)
CHEETAH.setMinPeriod(uint256) (#937-939) should emit an event for:
- minPeriod = number (#938)
CHEETAH.updateDistributorGas(uint256) (#952-956) should emit an event for:
- distributorGas = newValue (#955)
Emit an event for critical parameter changes.
Additional information: link
Ownable.constructor().msgSender (#315) lacks a zero-check on :
- _owner = msgSender (#316)
TokenDividendTracker.constructor(address,address).uniswapV2Pair_ (#687) lacks a zero-check on :
- uniswapV2Pair = uniswapV2Pair_ (#688)
TokenDividendTracker.constructor(address,address).lpRewardToken_ (#687) lacks a zero-check on :
- lpRewardToken = lpRewardToken_ (#689)
CHEETAH.constructor(string,string,uint256,address,address,address).marketingWalletAddr_ (#815) lacks a zero-check on :
- marketingWalletAddress = marketingWalletAddr_ (#829)
CHEETAH.constructor(string,string,uint256,address,address,address).foundationWalletAddress_ (#816) lacks a zero-check on :
- foundationWalletAddress = foundationWalletAddress_ (#830)
CHEETAH.constructor(string,string,uint256,address,address,address).liquidityReceiveAddress_ (#817) lacks a zero-check on :
- liquidityReceiveAddress = liquidityReceiveAddress_ (#831)
CHEETAH.setMarketingWallet(address).wallet (#892) lacks a zero-check on :
- marketingWalletAddress = wallet (#893)
CHEETAH.setFoundationWallet(address).addr (#897) lacks a zero-check on :
- foundationWalletAddress = addr (#898)
CHEETAH.setLiquidityReceiveAddress(address).val (#942) lacks a zero-check on :
- liquidityReceiveAddress = val (#943)
Check that the address is not zero.
Additional information: link
TokenDividendTracker.process(uint256) (#697-728) has external calls inside a loop: amount = nowbanance.mul(IERC20(uniswapV2Pair).balanceOf(shareholders[currentIndex])).div(IERC20(uniswapV2Pair).totalSupply()) (#715)
TokenDividendTracker.process(uint256) (#697-728) has external calls inside a loop: IERC20(lpRewardToken).balanceOf(address(this)) < amount (#721)
TokenDividendTracker.process(uint256) (#697-728) has external calls inside a loop: IERC20(lpRewardToken).transfer(shareholders[currentIndex],amount) (#722)
Favor pull over push strategy for external calls.
Additional information: link
Reentrancy in CHEETAH._transfer(address,address,uint256) (#958-1024):
External calls:
- swapAndLiquify(AmountLiquidityFee) (#982)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiveAddress,block.timestamp) (#1096-1103)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1082-1088)
- swapLPRewardToken(AmountLpRewardFee) (#986)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(dividendTracker),block.timestamp) (#1113-1119)
External calls sending eth:
- swapAndLiquify(AmountLiquidityFee) (#982)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiveAddress,block.timestamp) (#1096-1103)
State variables written after the call(s):
- swapLPRewardToken(AmountLpRewardFee) (#986)
- _allowances[owner][spender] = amount (#649)
- fromAddress = from (#1009)
- toAddress = to (#1010)
Reentrancy in CHEETAH.constructor(string,string,uint256,address,address,address) (#811-848):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#823-824)
State variables written after the call(s):
- _cast(owner(),totalSupply) (#847)
- _balances[account] = _balances[account].add(amount) (#603)
- excludeFromFees(owner(),true) (#835)
- _isExcludedFromFees[account] = excluded (#855)
- excludeFromFees(marketingWalletAddress,true) (#836)
- _isExcludedFromFees[account] = excluded (#855)
- excludeFromFees(foundationWalletAddress,true) (#837)
- _isExcludedFromFees[account] = excluded (#855)
- excludeFromFees(address(this),true) (#838)
- _isExcludedFromFees[account] = excluded (#855)
- excludeFromFees(address(dividendTracker),true) (#839)
- _isExcludedFromFees[account] = excluded (#855)
- _isSwapWhiteList[msg.sender] = true (#845)
- _cast(owner(),totalSupply) (#847)
- _totalSupply = _totalSupply.add(amount) (#602)
- dividendTracker = new TokenDividendTracker(uniswapV2Pair,lpRewardToken) (#832)
- foundationWalletAddress = foundationWalletAddress_ (#830)
- isDividendExempt[address(this)] = true (#841)
- isDividendExempt[address(0)] = true (#842)
- isDividendExempt[address(dividendTracker)] = true (#843)
- liquidityReceiveAddress = liquidityReceiveAddress_ (#831)
- marketingWalletAddress = marketingWalletAddr_ (#829)
- uniswapV2Pair = _uniswapV2Pair (#827)
- uniswapV2Router = _uniswapV2Router (#826)
Reentrancy in CHEETAH.swapAndLiquify(uint256) (#1056-1071):
External calls:
- swapTokensForEth(half) (#1064)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1082-1088)
- addLiquidity(otherHalf,newBalance) (#1069)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiveAddress,block.timestamp) (#1096-1103)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1069)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiveAddress,block.timestamp) (#1096-1103)
State variables written after the call(s):
- addLiquidity(otherHalf,newBalance) (#1069)
- _allowances[owner][spender] = amount (#649)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in CHEETAH._transfer(address,address,uint256) (#958-1024):
External calls:
- swapAndLiquify(AmountLiquidityFee) (#982)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiveAddress,block.timestamp) (#1096-1103)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1082-1088)
- swapLPRewardToken(AmountLpRewardFee) (#986)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(dividendTracker),block.timestamp) (#1113-1119)
External calls sending eth:
- swapAndLiquify(AmountLiquidityFee) (#982)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiveAddress,block.timestamp) (#1096-1103)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#650)
- swapLPRewardToken(AmountLpRewardFee) (#986)
- Transfer(sender,recipient,amount) (#585)
- amount = takeAllFee(from,amount) (#1004)
- Transfer(sender,recipient,amount) (#585)
- super._transfer(from,to,amount) (#1007)
Reentrancy in CHEETAH.constructor(string,string,uint256,address,address,address) (#811-848):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#823-824)
Event emitted after the call(s):
- ExcludeFromFees(account,excluded) (#856)
- excludeFromFees(address(dividendTracker),true) (#839)
- ExcludeFromFees(account,excluded) (#856)
- excludeFromFees(address(this),true) (#838)
- ExcludeFromFees(account,excluded) (#856)
- excludeFromFees(owner(),true) (#835)
- ExcludeFromFees(account,excluded) (#856)
- excludeFromFees(foundationWalletAddress,true) (#837)
- ExcludeFromFees(account,excluded) (#856)
- excludeFromFees(marketingWalletAddress,true) (#836)
- Transfer(address(0),account,amount) (#604)
- _cast(owner(),totalSupply) (#847)
Reentrancy in CHEETAH.swapAndLiquify(uint256) (#1056-1071):
External calls:
- swapTokensForEth(half) (#1064)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1082-1088)
- addLiquidity(otherHalf,newBalance) (#1069)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiveAddress,block.timestamp) (#1096-1103)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1069)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityReceiveAddress,block.timestamp) (#1096-1103)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#650)
- addLiquidity(otherHalf,newBalance) (#1069)
- SwapAndLiquify(half,newBalance,otherHalf) (#1070)
Apply the check-effects-interactions pattern.
Additional information: link
CHEETAH._transfer(address,address,uint256) (#958-1024) uses timestamp for comparisons
Dangerous comparisons:
- ! swapping && from != owner() && to != owner() && from != address(this) && dividendTracker.LPRewardLastSendTime().add(minPeriod) <= block.timestamp (#1016-1020)
Avoid relying on block.timestamp.
Additional information: link
TokenDividendTracker.process(uint256) (#697-728) has costly operations inside a loop:
- currentIndex = 0 (#710)
TokenDividendTracker.process(uint256) (#697-728) has costly operations inside a loop:
- LPRewardLastSendTime = block.timestamp (#711)
TokenDividendTracker.process(uint256) (#697-728) has costly operations inside a loop:
- currentIndex ++ (#717)
TokenDividendTracker.process(uint256) (#697-728) has costly operations inside a loop:
- currentIndex ++ (#725)
Use a local variable to hold the loop computation result.
Additional information: link
Function IUniswapV2Router01.WETH() (#92) is not in mixedCase
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (#256) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#257) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#274) is not in mixedCase
Variable TokenDividendTracker.LPRewardLastSendTime (#685) is not in mixedCase
Parameter CHEETAH.setSwapAndLiquifyEnabled(bool)._enabled (#868) is not in mixedCase
Variable CHEETAH.AmountLiquidityFee (#775) is not in mixedCase
Variable CHEETAH.AmountLpRewardFee (#776) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#85)" inContext (#79-88)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#97) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#98)
Variable ERC20._totalSupply (#403) is too similar to CHEETAH.constructor(string,string,uint256,address,address,address).totalSupply_ (#814)
Prevent variables from having similar names.
Additional information: link
CHEETAH.updateDistributorGas(uint256) (#952-956) uses literals with too many digits:
- require(bool,string)(newValue >= 100000 && newValue <= 500000,distributorGas must be between 200,000 and 500,000) (#953)
CHEETAH.slitherConstructorVariables() (#759-1124) uses literals with too many digits:
- deadWallet = 0x000000000000000000000000000000000000dEaD (#781)
CHEETAH.slitherConstructorVariables() (#759-1124) uses literals with too many digits:
- distributorGas = 200000 (#798)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
CHEETAH.deadWallet (#781) should be constant
CHEETAH.lpRewardToken (#773) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#329-332)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#334-338)
name() should be declared external:
- ERC20.name() (#425-427)
symbol() should be declared external:
- ERC20.symbol() (#433-435)
decimals() should be declared external:
- ERC20.decimals() (#450-452)
totalSupply() should be declared external:
- ERC20.totalSupply() (#457-459)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (#476-479)
allowance(address,address) should be declared external:
- ERC20.allowance(address,address) (#484-486)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (#495-498)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (#513-521)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (#535-538)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (#554-557)
resetLPRewardLastSendTime() should be declared external:
- TokenDividendTracker.resetLPRewardLastSendTime() (#692-694)
excludeMultipleAccountsFromFees(address[],bool) should be declared external:
- CHEETAH.excludeMultipleAccountsFromFees(address[],bool) (#861-866)
setSwapAndLiquifyEnabled(bool) should be declared external:
- CHEETAH.setSwapAndLiquifyEnabled(bool) (#868-871)
includeSwapWhiteList(address) should be declared external:
- CHEETAH.includeSwapWhiteList(address) (#874-876)
isSwapWhiteList(address) should be declared external:
- CHEETAH.isSwapWhiteList(address) (#878-880)
includeSwapWhiteListBatch(address[]) should be declared external:
- CHEETAH.includeSwapWhiteListBatch(address[]) (#882-886)
excludeSwapWhiteList(address) should be declared external:
- CHEETAH.excludeSwapWhiteList(address) (#888-890)
setFoundationWallet(address) should be declared external:
- CHEETAH.setFoundationWallet(address) (#897-899)
isExcludedFromFees(address) should be declared external:
- CHEETAH.isExcludedFromFees(address) (#902-904)
setSwapTokensAtAmount(uint256) should be declared external:
- CHEETAH.setSwapTokensAtAmount(uint256) (#907-909)
setLiquidityFee(uint256) should be declared external:
- CHEETAH.setLiquidityFee(uint256) (#912-914)
setMarketingFee(uint256) should be declared external:
- CHEETAH.setMarketingFee(uint256) (#917-919)
setFoundationFee(uint256) should be declared external:
- CHEETAH.setFoundationFee(uint256) (#922-924)
setDeadFee(uint256) should be declared external:
- CHEETAH.setDeadFee(uint256) (#927-929)
setLpRewardFee(uint256) should be declared external:
- CHEETAH.setLpRewardFee(uint256) (#932-934)
setMinPeriod(uint256) should be declared external:
- CHEETAH.setMinPeriod(uint256) (#937-939)
setLiquidityReceiveAddress(address) should be declared external:
- CHEETAH.setLiquidityReceiveAddress(address) (#942-944)
resetLPRewardLastSendTime() should be declared external:
- CHEETAH.resetLPRewardLastSendTime() (#947-949)
updateDistributorGas(uint256) should be declared external:
- CHEETAH.updateDistributorGas(uint256) (#952-956)
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 Blog account (Reddit or Medium)
Unable to find Youtube account
Unable to find Discord account