Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
CaiShen._addLiquidity(uint256,uint256,address) (CaiShen.sol#342-352) sends eth to arbitrary user
Dangerous calls:
- _uniswapV2Router.addLiquidityETH{value: bnb_amount}(address(this),token_amount,0,0,to,block.timestamp) (CaiShen.sol#344-351)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in CaiShen._transfer(address,address,uint256) (CaiShen.sol#205-288):
External calls:
- _swapFees() (CaiShen.sol#283)
- _uniswapV2Router.addLiquidityETH{value: bnb_amount}(address(this),token_amount,0,0,to,block.timestamp) (CaiShen.sol#344-351)
- _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,to,block.timestamp) (CaiShen.sol#335)
External calls sending eth:
- _swapFees() (CaiShen.sol#283)
- _uniswapV2Router.addLiquidityETH{value: bnb_amount}(address(this),token_amount,0,0,to,block.timestamp) (CaiShen.sol#344-351)
State variables written after the call(s):
- _simpleTransfer(sender,recipient,amount) (CaiShen.sol#287)
- _balances[sender] = _balances[sender] - amount (CaiShen.sol#295)
- _balances[recipient] = _balances[recipient] + amount (CaiShen.sol#296)
Apply the check-effects-interactions pattern.
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.
CaiShen._addLiquidity(uint256,uint256,address) (CaiShen.sol#342-352) ignores return value by _uniswapV2Router.addLiquidityETH{value: bnb_amount}(address(this),token_amount,0,0,to,block.timestamp) (CaiShen.sol#344-351)
Ensure that all the return values of the function calls are used.
Additional information: link
CaiShen.allowance(address,address).owner (CaiShen.sol#142) shadows:
- Ownable.owner() (Ownable.sol#39-41) (function)
CaiShen._approve(address,address,uint256).owner (CaiShen.sol#372) shadows:
- Ownable.owner() (Ownable.sol#39-41) (function)
Rename the local variables that shadow another component.
Additional information: link
CaiShen.setMarketingAddress(address).addr (CaiShen.sol#421) lacks a zero-check on :
- _marketingAddress = addr (CaiShen.sol#423)
Check that the address is not zero.
Additional information: link
Reentrancy in CaiShen._swapFees() (CaiShen.sol#300-317):
External calls:
- swapped = _swapTokensForBNBs(tokens_to_swap,address(this)) (CaiShen.sol#309)
- _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,to,block.timestamp) (CaiShen.sol#335)
- _addLiquidity(liquidity_token,liquidity_bnb,_liquidityTokenWallet) (CaiShen.sol#312)
- _uniswapV2Router.addLiquidityETH{value: bnb_amount}(address(this),token_amount,0,0,to,block.timestamp) (CaiShen.sol#344-351)
External calls sending eth:
- _addLiquidity(liquidity_token,liquidity_bnb,_liquidityTokenWallet) (CaiShen.sol#312)
- _uniswapV2Router.addLiquidityETH{value: bnb_amount}(address(this),token_amount,0,0,to,block.timestamp) (CaiShen.sol#344-351)
State variables written after the call(s):
- _addLiquidity(liquidity_token,liquidity_bnb,_liquidityTokenWallet) (CaiShen.sol#312)
- _allowances[owner][spender] = amount (CaiShen.sol#385)
- isSwapping = false (CaiShen.sol#315)
Reentrancy in CaiShen.constructor(address) (CaiShen.sol#51-77):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (CaiShen.sol#69-72)
State variables written after the call(s):
- _liqAutoSwap = false (CaiShen.sol#76)
- _permissions[msg.sender] = true (CaiShen.sol#75)
- automatedMarketMakerPairs[_uniswapV2Pair] = true (CaiShen.sol#73)
Reentrancy in CaiShen.transferFrom(address,address,uint256) (CaiShen.sol#170-183):
External calls:
- _transfer(sender,recipient,amount) (CaiShen.sol#175)
- _uniswapV2Router.addLiquidityETH{value: bnb_amount}(address(this),token_amount,0,0,to,block.timestamp) (CaiShen.sol#344-351)
- _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,to,block.timestamp) (CaiShen.sol#335)
External calls sending eth:
- _transfer(sender,recipient,amount) (CaiShen.sol#175)
- _uniswapV2Router.addLiquidityETH{value: bnb_amount}(address(this),token_amount,0,0,to,block.timestamp) (CaiShen.sol#344-351)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()] - amount) (CaiShen.sol#177-181)
- _allowances[owner][spender] = amount (CaiShen.sol#385)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in CaiShen._swapFees() (CaiShen.sol#300-317):
External calls:
- swapped = _swapTokensForBNBs(tokens_to_swap,address(this)) (CaiShen.sol#309)
- _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,to,block.timestamp) (CaiShen.sol#335)
- _addLiquidity(liquidity_token,liquidity_bnb,_liquidityTokenWallet) (CaiShen.sol#312)
- _uniswapV2Router.addLiquidityETH{value: bnb_amount}(address(this),token_amount,0,0,to,block.timestamp) (CaiShen.sol#344-351)
External calls sending eth:
- _addLiquidity(liquidity_token,liquidity_bnb,_liquidityTokenWallet) (CaiShen.sol#312)
- _uniswapV2Router.addLiquidityETH{value: bnb_amount}(address(this),token_amount,0,0,to,block.timestamp) (CaiShen.sol#344-351)
Event emitted after the call(s):
- Approval(owner,spender,amount) (CaiShen.sol#386)
- _addLiquidity(liquidity_token,liquidity_bnb,_liquidityTokenWallet) (CaiShen.sol#312)
Reentrancy in CaiShen._transfer(address,address,uint256) (CaiShen.sol#205-288):
External calls:
- _swapFees() (CaiShen.sol#283)
- _uniswapV2Router.addLiquidityETH{value: bnb_amount}(address(this),token_amount,0,0,to,block.timestamp) (CaiShen.sol#344-351)
- _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,to,block.timestamp) (CaiShen.sol#335)
External calls sending eth:
- _swapFees() (CaiShen.sol#283)
- _uniswapV2Router.addLiquidityETH{value: bnb_amount}(address(this),token_amount,0,0,to,block.timestamp) (CaiShen.sol#344-351)
Event emitted after the call(s):
- Transfer(sender,recipient,amount) (CaiShen.sol#297)
- _simpleTransfer(sender,recipient,amount) (CaiShen.sol#287)
Reentrancy in CaiShen.transferFrom(address,address,uint256) (CaiShen.sol#170-183):
External calls:
- _transfer(sender,recipient,amount) (CaiShen.sol#175)
- _uniswapV2Router.addLiquidityETH{value: bnb_amount}(address(this),token_amount,0,0,to,block.timestamp) (CaiShen.sol#344-351)
- _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,to,block.timestamp) (CaiShen.sol#335)
External calls sending eth:
- _transfer(sender,recipient,amount) (CaiShen.sol#175)
- _uniswapV2Router.addLiquidityETH{value: bnb_amount}(address(this),token_amount,0,0,to,block.timestamp) (CaiShen.sol#344-351)
Event emitted after the call(s):
- Approval(owner,spender,amount) (CaiShen.sol#386)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()] - amount) (CaiShen.sol#177-181)
Apply the check-effects-interactions pattern.
Additional information: link
CaiShen._transfer(address,address,uint256) (CaiShen.sol#205-288) uses timestamp for comparisons
Dangerous comparisons:
- _feeDiscountUntil >= block.timestamp (CaiShen.sol#253)
- _feeDiscountUntil >= block.timestamp (CaiShen.sol#259)
CaiShen.launchAirdrop(uint256,address[],uint256) (CaiShen.sol#464-476) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(deadline > block.timestamp,CaiShen: bad deadline) (CaiShen.sol#469)
Avoid relying on block.timestamp.
Additional information: link
Different versions of Solidity is used:
- Version used: ['>=0.6.2', '^0.8.0']
- ^0.8.0 (CaiShen.sol#3)
- ^0.8.0 (Context.sol#3)
- ^0.8.0 (IBEP20.sol#3)
- >=0.6.2 (IUniswapV2Factory.sol#3)
- >=0.6.2 (IUniswapV2Router.sol#3)
- ^0.8.0 (Ownable.sol#3)
Use one Solidity version.
Additional information: link
Context._msgData() (Context.sol#20-23) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.0 (CaiShen.sol#3) allows old versions
Pragma version^0.8.0 (Context.sol#3) allows old versions
Pragma version^0.8.0 (IBEP20.sol#3) allows old versions
Pragma version>=0.6.2 (IUniswapV2Factory.sol#3) allows old versions
Pragma version>=0.6.2 (IUniswapV2Router.sol#3) allows old versions
Pragma version^0.8.0 (Ownable.sol#3) allows old versions
solc-0.8.11 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
Parameter CaiShen.startTrading(uint256)._as (CaiShen.sol#185) is not in mixedCase
Parameter CaiShen.setBlock(address[],bool)._addr (CaiShen.sol#394) is not in mixedCase
Parameter CaiShen.isBlocked(address)._addr (CaiShen.sol#400) is not in mixedCase
Variable CaiShen._marketingAddress (CaiShen.sol#23) is not in mixedCase
Variable CaiShen._buyMarketingFee (CaiShen.sol#24) is not in mixedCase
Variable CaiShen._sellMarketingFee (CaiShen.sol#25) is not in mixedCase
Variable CaiShen._liquidityFee (CaiShen.sol#27) is not in mixedCase
Variable CaiShen._liquidityTokenWallet (CaiShen.sol#28) is not in mixedCase
Variable CaiShen._liqAutoSwapThreshold (CaiShen.sol#30) is not in mixedCase
Variable CaiShen._burnFee (CaiShen.sol#32) is not in mixedCase
Variable CaiShen._burnAddress (CaiShen.sol#33) is not in mixedCase
Variable CaiShen._uniswapV2Router (CaiShen.sol#41) is not in mixedCase
Variable CaiShen._uniswapV2Pair (CaiShen.sol#42) is not in mixedCase
Variable CaiShen._launched (CaiShen.sol#47) is not in mixedCase
Function IUniswapV2Router01.WETH() (IUniswapV2Router.sol#7) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (Context.sol#21)" inContext (Context.sol#15-25)
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 (IUniswapV2Router.sol#12) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (IUniswapV2Router.sol#13)
Prevent variables from having similar names.
Additional information: link
CaiShen.slitherConstructorVariables() (CaiShen.sol#11-486) uses literals with too many digits:
- _liquidityTokenWallet = 0x000000000000000000000000000000000000dEaD (CaiShen.sol#28)
CaiShen.slitherConstructorVariables() (CaiShen.sol#11-486) uses literals with too many digits:
- _burnAddress = 0x000000000000000000000000000000000000dEaD (CaiShen.sol#33)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
CaiShen._abf (CaiShen.sol#49) should be constant
CaiShen._burnAddress (CaiShen.sol#33) should be constant
CaiShen._liquidityTokenWallet (CaiShen.sol#28) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
startTrading(uint256) should be declared external:
- CaiShen.startTrading(uint256) (CaiShen.sol#185-189)
swapFees() should be declared external:
- CaiShen.swapFees() (CaiShen.sol#319-321)
setABlks(uint256) should be declared external:
- CaiShen.setABlks(uint256) (CaiShen.sol#354-356)
setBlock(address[],bool) should be declared external:
- CaiShen.setBlock(address[],bool) (CaiShen.sol#394-398)
isBlocked(address) should be declared external:
- CaiShen.isBlocked(address) (CaiShen.sol#400-402)
setFee(uint256,uint256,uint256,uint256) should be declared external:
- CaiShen.setFee(uint256,uint256,uint256,uint256) (CaiShen.sol#404-409)
setPermission(address,bool) should be declared external:
- CaiShen.setPermission(address,bool) (CaiShen.sol#411-414)
hasPermission(address) should be declared external:
- CaiShen.hasPermission(address) (CaiShen.sol#416-419)
setMarketingAddress(address) should be declared external:
- CaiShen.setMarketingAddress(address) (CaiShen.sol#421-426)
setFeeWhitelist(address,bool) should be declared external:
- CaiShen.setFeeWhitelist(address,bool) (CaiShen.sol#428-430)
bulkSetFeeWhitelist(address[],bool) should be declared external:
- CaiShen.bulkSetFeeWhitelist(address[],bool) (CaiShen.sol#432-436)
feeWhitelisted(address) should be declared external:
- CaiShen.feeWhitelisted(address) (CaiShen.sol#438-440)
setAutoSwap(bool,uint256) should be declared external:
- CaiShen.setAutoSwap(bool,uint256) (CaiShen.sol#442-445)
setFeeDiscount(uint256,uint256) should be declared external:
- CaiShen.setFeeDiscount(uint256,uint256) (CaiShen.sol#447-452)
setAutomatedMarketMakerPair(address,bool) should be declared external:
- CaiShen.setAutomatedMarketMakerPair(address,bool) (CaiShen.sol#454-457)
launchAirdrop(uint256,address[],uint256) should be declared external:
- CaiShen.launchAirdrop(uint256,address[],uint256) (CaiShen.sol#464-476)
sendAirdrop(address,uint256) should be declared external:
- CaiShen.sendAirdrop(address,uint256) (CaiShen.sol#478-480)
claimRewards() should be declared external:
- CaiShen.claimRewards() (CaiShen.sol#482-485)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (Ownable.sol#58-62)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (Ownable.sol#68-71)
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