Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Chad._claimBNBTo(address,address,uint256) (#560-571) sends eth to arbitrary user
Dangerous calls:
- (sent) = to.call{value: (amountWei)}() (#567)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in Chad._claimBNBTo(address,address,uint256) (#560-571):
External calls:
- (sent) = to.call{value: (amountWei)}() (#567)
State variables written after the call(s):
- _isWithdrawing = false (#569)
Reentrancy in Chad._taxedTransfer(address,address,uint256,bool,bool) (#887-935):
External calls:
- claimToken(recipient,MainReward,0) (#908)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#536-540)
- _swapContractToken(AutoLPThreshold,false) (#925)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#834-840)
- (sent) = to.call{value: (amountWei)}() (#567)
External calls sending eth:
- claimToken(recipient,MainReward,0) (#908)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#536-540)
- _swapContractToken(AutoLPThreshold,false) (#925)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- (sent) = to.call{value: (amountWei)}() (#567)
State variables written after the call(s):
- _removeToken(sender,amount) (#929)
- _balances[addr] = newAmount (#739)
- _balances[addr] = newAmount (#745)
- _addToken(address(this),contractToken) (#930)
- _balances[addr] = newAmount (#721)
- _balances[addr] = newAmount (#727)
- _balances[addr] = newAmount (#732)
- _addToken(recipient,taxedAmount) (#933)
- _balances[addr] = newAmount (#721)
- _balances[addr] = newAmount (#727)
- _balances[addr] = newAmount (#732)
- _swapContractToken(AutoLPThreshold,false) (#925)
- _isWithdrawing = true (#563)
- _isWithdrawing = false (#569)
- _removeToken(sender,amount) (#929)
- _totalShares -= amount (#742)
- _addToken(address(this),contractToken) (#930)
- _totalShares += amount (#724)
- _addToken(recipient,taxedAmount) (#933)
- _totalShares += amount (#724)
- _removeToken(sender,amount) (#929)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#746)
- _addToken(address(this),contractToken) (#930)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#728)
- _addToken(recipient,taxedAmount) (#933)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#728)
- _swapContractToken(AutoLPThreshold,false) (#925)
- alreadyPaidMisc[addr] = miscRewardShare * _balances[addr] (#582)
- _removeToken(sender,amount) (#929)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#748)
- _addToken(address(this),contractToken) (#930)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#730)
- _addToken(recipient,taxedAmount) (#933)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#730)
- _swapContractToken(AutoLPThreshold,false) (#925)
- mainRewardShare += ((MainAmount * DistributionMultiplier) / totalShares) (#783)
- _swapContractToken(AutoLPThreshold,false) (#925)
- miscRewardShare += ((MiscAmount * DistributionMultiplier) / totalShares) (#784)
- _removeToken(sender,amount) (#929)
- toBePaidMain[addr] += mainPayment (#747)
- _addToken(address(this),contractToken) (#930)
- toBePaidMain[addr] += mainPayment (#729)
- _addToken(recipient,taxedAmount) (#933)
- toBePaidMain[addr] += mainPayment (#729)
- _swapContractToken(AutoLPThreshold,false) (#925)
- toBePaidMisc[addr] -= amount (#578)
- toBePaidMisc[addr] += newAmount (#583)
- toBePaidMisc[addr] -= amount (#584)
- _removeToken(sender,amount) (#929)
- toBePaidMisc[addr] += miscPayment (#749)
- _addToken(address(this),contractToken) (#930)
- toBePaidMisc[addr] += miscPayment (#731)
- _addToken(recipient,taxedAmount) (#933)
- toBePaidMisc[addr] += miscPayment (#731)
- _swapContractToken(AutoLPThreshold,false) (#925)
- totalPayouts += amountWei (#566)
Reentrancy in Chad.claimToken(address,address,uint256) (#499-544):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#536-540)
State variables written after the call(s):
- _isWithdrawing = false (#543)
Apply the check-effects-interactions pattern.
Additional information: link
Chad.ReleaseLP() (#643-648) ignores return value by liquidityToken.transfer(msg.sender,amount) (#647)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Chad._subtractDividents(address,uint256) (#573-586) uses a dangerous strict equality:
- amount == 0 (#574)
Don't use strict equality to determine if an account has enough Ether or tokens.
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.
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.
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.
Chad._distributeStake(uint256,bool) (#764-788) performs a multiplication on the result of a division:
-StakingSplit = (BNBamount * _stakingTax) / totalRatio (#769)
-MainAmount = (StakingSplit * _MainRewardSplit) / 100 (#770)
Chad._distributeStake(uint256,bool) (#764-788) performs a multiplication on the result of a division:
-StakingSplit = (BNBamount * _stakingTax) / totalRatio (#769)
-MiscAmount = (StakingSplit * _MiscRewardSplit) / 100 (#771)
Chad._distributeStake(uint256,bool) (#764-788) performs a multiplication on the result of a division:
-MainAmount = (StakingSplit * _MainRewardSplit) / 100 (#770)
-mainRewardShare += ((MainAmount * DistributionMultiplier) / totalShares) (#783)
Chad._distributeStake(uint256,bool) (#764-788) performs a multiplication on the result of a division:
-MiscAmount = (StakingSplit * _MiscRewardSplit) / 100 (#771)
-miscRewardShare += ((MiscAmount * DistributionMultiplier) / totalShares) (#784)
Chad._swapContractToken(uint16,bool) (#799-827) performs a multiplication on the result of a division:
-tokenToSwap = _balances[_pancakePairAddress] * permilleOfPancake / 1000 (#805)
-tokenForLiquidity = (tokenToSwap * _liquidityTax) / totalTax (#814)
Consider ordering multiplication before division.
Additional information: link
Chad.constructor() (#421-452) ignores return value by _excluded.add(msg.sender) (#442)
Chad.constructor() (#421-452) ignores return value by _excluded.add(MarketingWallet) (#443)
Chad.constructor() (#421-452) ignores return value by _excluded.add(Developer) (#444)
Chad.constructor() (#421-452) ignores return value by _excluded.add(address(this)) (#445)
Chad.constructor() (#421-452) ignores return value by _excluded.add(BurnAddress) (#446)
Chad.constructor() (#421-452) ignores return value by _excludedFromStaking.add(address(this)) (#447)
Chad.constructor() (#421-452) ignores return value by _excludedFromStaking.add(BurnAddress) (#448)
Chad.constructor() (#421-452) ignores return value by _excludedFromStaking.add(address(_pancakeRouter)) (#449)
Chad.constructor() (#421-452) ignores return value by _excludedFromStaking.add(_pancakePairAddress) (#450)
Chad.RemoveLP() (#651-667) ignores return value by liquidityToken.approve(address(_pancakeRouter),amount) (#656)
Chad.RemoveLP() (#651-667) ignores return value by _pancakeRouter.removeLiquidityETHSupportingFeeOnTransferTokens(address(this),amount,0,0,address(this),block.timestamp) (#657-664)
Chad._addLiquidity(uint256,uint256) (#843-854) ignores return value by _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
Chad.ExcludeFromStaking(address) (#1034-1045) ignores return value by _excludedFromStaking.add(addr) (#1043)
Chad.IncludeMeToStaking() (#1048-1054) ignores return value by _excludedFromStaking.remove(msg.sender) (#1051)
Chad.IncludeToStaking(address) (#1057-1064) ignores return value by _excludedFromStaking.remove(addr) (#1060)
Chad.SetMarketingWallet(address) (#1080-1086) ignores return value by _excluded.remove(prevMarketing) (#1082)
Chad.SetMarketingWallet(address) (#1080-1086) ignores return value by _excluded.add(MarketingWallet) (#1084)
Chad.SetDevWallet(address) (#1090-1096) ignores return value by _excluded.remove(prevDev) (#1092)
Chad.SetDevWallet(address) (#1090-1096) ignores return value by _excluded.add(Developer) (#1094)
Chad.ExcludeAccountFromFees(address) (#1100-1103) ignores return value by _excluded.add(account) (#1101)
Chad.IncludeAccountToFees(address) (#1106-1109) ignores return value by _excluded.remove(account) (#1107)
Chad.setPresale(address) (#1111-1114) ignores return value by _excluded.add(presaleAddress) (#1112)
Chad.setPresale(address) (#1111-1114) ignores return value by _excludedFromStaking.add(presaleAddress) (#1113)
Ensure that all the return values of the function calls are used.
Additional information: link
Chad.allowance(address,address)._owner (#453) shadows:
- Ownable._owner (#178) (state variable)
Chad._approve(address,address,uint256).owner (#460) shadows:
- Ownable.owner() (#185-187) (function)
Rename the local variables that shadow another component.
Additional information: link
Chad.WithdrawDev(uint256) (#1008-1013) should emit an event for:
- DevBalance -= amount (#1010)
Chad.WithdrawMarketing(uint256) (#1024-1029) should emit an event for:
- MarketingBalance -= amount (#1026)
Emit an event for critical parameter changes.
Additional information: link
Chad.ChangeMiscReward(address).newReward (#620) lacks a zero-check on :
- MiscReward = newReward (#621)
Chad.SetMarketingWallet(address).addr (#1080) lacks a zero-check on :
- MarketingWallet = addr (#1083)
Chad.SetDevWallet(address).addr (#1090) lacks a zero-check on :
- Developer = addr (#1093)
Check that the address is not zero.
Additional information: link
Reentrancy in Chad.TriggerBuyBack(uint256) (#965-983):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: weiAmount}(0,path,BurnAddress,block.timestamp) (#973-977)
State variables written after the call(s):
- _circulatingSupply -= boughtTokens (#980)
- tokensBurnt += boughtTokens (#981)
Reentrancy in Chad._swapContractToken(uint16,bool) (#799-827):
External calls:
- _swapTokenForBNB(swapToken) (#820)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#834-840)
- _addLiquidity(liqToken,liqBNB) (#823)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
External calls sending eth:
- _addLiquidity(liqToken,liqBNB) (#823)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
State variables written after the call(s):
- _distributeStake(distributeBNB,true) (#826)
- BuyBackBalance += BuyBackSplit (#774)
- _distributeStake(distributeBNB,true) (#826)
- DevBalance += DevSplit (#773)
- _distributeStake(distributeBNB,true) (#826)
- MarketingBalance += MarketingSplit (#772)
- MarketingBalance += StakingSplit (#781)
- _addLiquidity(liqToken,liqBNB) (#823)
- _allowances[owner][spender] = amount (#464)
- _distributeStake(distributeBNB,true) (#826)
- mainRewardShare += ((MainAmount * DistributionMultiplier) / totalShares) (#783)
- _distributeStake(distributeBNB,true) (#826)
- miscRewardShare += ((MiscAmount * DistributionMultiplier) / totalShares) (#784)
- _distributeStake(distributeBNB,true) (#826)
- totalRewards += StakingSplit (#777)
Reentrancy in Chad._taxedTransfer(address,address,uint256,bool,bool) (#887-935):
External calls:
- claimToken(recipient,MainReward,0) (#908)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#536-540)
- _swapContractToken(AutoLPThreshold,false) (#925)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#834-840)
- (sent) = to.call{value: (amountWei)}() (#567)
External calls sending eth:
- claimToken(recipient,MainReward,0) (#908)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#536-540)
- _swapContractToken(AutoLPThreshold,false) (#925)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- (sent) = to.call{value: (amountWei)}() (#567)
State variables written after the call(s):
- _swapContractToken(AutoLPThreshold,false) (#925)
- _allowances[owner][spender] = amount (#464)
- _circulatingSupply -= tokensToBeBurnt (#931)
- tokensBurnt += tokensToBeBurnt (#932)
Reentrancy in Chad.constructor() (#421-452):
External calls:
- _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this),_pancakeRouter.WETH()) (#430)
State variables written after the call(s):
- Developer = msg.sender (#437)
- MarketingWallet = msg.sender (#436)
- MaxWallet = _totalSupply / MaxWalletDivider (#440)
- _allowances[address(this)][address(_pancakeRouter)] = type()(uint256).max (#433)
- _approve(address(this),address(_pancakeRouter),type()(uint256).max) (#451)
- _allowances[owner][spender] = amount (#464)
- _addToken(msg.sender,_totalSupply) (#431)
- _balances[addr] = newAmount (#721)
- _balances[addr] = newAmount (#727)
- _balances[addr] = newAmount (#732)
- _addToken(msg.sender,_totalSupply) (#431)
- _totalShares += amount (#724)
- _addToken(msg.sender,_totalSupply) (#431)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#728)
- _addToken(msg.sender,_totalSupply) (#431)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#730)
- sellLimit = _totalSupply / SellLimitDivider (#439)
- _addToken(msg.sender,_totalSupply) (#431)
- toBePaidMain[addr] += mainPayment (#729)
- _addToken(msg.sender,_totalSupply) (#431)
- toBePaidMisc[addr] += miscPayment (#731)
Reentrancy in Chad.transferFrom(address,address,uint256) (#485-493):
External calls:
- _transfer(sender,recipient,amount) (#486)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#834-840)
- (sent) = to.call{value: (amountWei)}() (#567)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#536-540)
External calls sending eth:
- _transfer(sender,recipient,amount) (#486)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- (sent) = to.call{value: (amountWei)}() (#567)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#536-540)
State variables written after the call(s):
- _approve(sender,msg.sender,currentAllowance - amount) (#491)
- _allowances[owner][spender] = amount (#464)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in Chad.TriggerBuyBack(uint256) (#965-983):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: weiAmount}(0,path,BurnAddress,block.timestamp) (#973-977)
Event emitted after the call(s):
- Buyback(weiAmount,boughtTokens) (#982)
Reentrancy in Chad._claimBNBTo(address,address,uint256) (#560-571):
External calls:
- (sent) = to.call{value: (amountWei)}() (#567)
Event emitted after the call(s):
- OnClaimBNB(from,to,amountWei) (#570)
Reentrancy in Chad._swapContractToken(uint16,bool) (#799-827):
External calls:
- _swapTokenForBNB(swapToken) (#820)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#834-840)
- _addLiquidity(liqToken,liqBNB) (#823)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
External calls sending eth:
- _addLiquidity(liqToken,liqBNB) (#823)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#465)
- _addLiquidity(liqToken,liqBNB) (#823)
Reentrancy in Chad._swapContractToken(uint16,bool) (#799-827):
External calls:
- _swapTokenForBNB(swapToken) (#820)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#834-840)
- _addLiquidity(liqToken,liqBNB) (#823)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- _claimBNBTo(distribute,distribute,newLiq) (#826)
- (sent) = to.call{value: (amountWei)}() (#567)
External calls sending eth:
- _addLiquidity(liqToken,liqBNB) (#823)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- _claimBNBTo(distribute,distribute,newLiq) (#826)
- (sent) = to.call{value: (amountWei)}() (#567)
Event emitted after the call(s):
- OnClaimBNB(from,to,amountWei) (#570)
- _claimBNBTo(distribute,distribute,newLiq) (#826)
Reentrancy in Chad._taxedTransfer(address,address,uint256,bool,bool) (#887-935):
External calls:
- claimToken(recipient,MainReward,0) (#908)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#536-540)
- _swapContractToken(AutoLPThreshold,false) (#925)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#834-840)
- (sent) = to.call{value: (amountWei)}() (#567)
External calls sending eth:
- claimToken(recipient,MainReward,0) (#908)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#536-540)
- _swapContractToken(AutoLPThreshold,false) (#925)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- (sent) = to.call{value: (amountWei)}() (#567)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#465)
- _swapContractToken(AutoLPThreshold,false) (#925)
- OnClaimBNB(from,to,amountWei) (#570)
- _swapContractToken(AutoLPThreshold,false) (#925)
- Transfer(sender,recipient,taxedAmount) (#934)
Reentrancy in Chad.claimToken(address,address,uint256) (#499-544):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#536-540)
Event emitted after the call(s):
- OnWithdrawToken(amount,token,addr) (#542)
Reentrancy in Chad.constructor() (#421-452):
External calls:
- _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this),_pancakeRouter.WETH()) (#430)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#465)
- _approve(address(this),address(_pancakeRouter),type()(uint256).max) (#451)
- Transfer(address(0),msg.sender,_totalSupply) (#432)
Reentrancy in Chad.transferFrom(address,address,uint256) (#485-493):
External calls:
- _transfer(sender,recipient,amount) (#486)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#834-840)
- (sent) = to.call{value: (amountWei)}() (#567)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#536-540)
External calls sending eth:
- _transfer(sender,recipient,amount) (#486)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- (sent) = to.call{value: (amountWei)}() (#567)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#536-540)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#465)
- _approve(sender,msg.sender,currentAllowance - amount) (#491)
Apply the check-effects-interactions pattern.
Additional information: link
Chad._lockLiquidityTokens(uint256) (#636-640) uses timestamp for comparisons
Dangerous comparisons:
- require(bool)(newUnlockTime > _liquidityUnlockTime) (#638)
Chad.ReleaseLP() (#643-648) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= _liquidityUnlockTime,Not yet unlocked) (#644)
Chad.RemoveLP() (#651-667) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= _liquidityUnlockTime,Not yet unlocked) (#652)
Chad.RecoverBNB() (#670-675) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= _liquidityUnlockTime,Not yet unlocked) (#671)
Chad.getLiquidityUnlockInSeconds() (#1194-1199) uses timestamp for comparisons
Dangerous comparisons:
- block.timestamp < _liquidityUnlockTime (#1195)
Avoid relying on block.timestamp.
Additional information: link
Address.isContract(address) (#203-207) uses assembly
- INLINE ASM (#205)
Address._verifyCallResult(bool,bytes,string) (#244-257) uses assembly
- INLINE ASM (#249-252)
Do not use evm assembly.
Additional information: link
Address._verifyCallResult(bool,bytes,string) (#244-257) is never used and should be removed
Address.functionCall(address,bytes) (#213-215) is never used and should be removed
Address.functionCall(address,bytes,string) (#216-218) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#219-221) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#222-227) is never used and should be removed
Address.functionDelegateCall(address,bytes) (#236-238) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (#239-243) is never used and should be removed
Address.functionStaticCall(address,bytes) (#228-230) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (#231-235) is never used and should be removed
Address.isContract(address) (#203-207) is never used and should be removed
Address.sendValue(address,uint256) (#208-212) is never used and should be removed
EnumerableSet._at(EnumerableSet.Set,uint256) (#294-297) is never used and should be removed
EnumerableSet._length(EnumerableSet.Set) (#291-293) is never used and should be removed
EnumerableSet.add(EnumerableSet.Bytes32Set,bytes32) (#301-303) is never used and should be removed
EnumerableSet.add(EnumerableSet.UintSet,uint256) (#337-339) is never used and should be removed
EnumerableSet.at(EnumerableSet.AddressSet,uint256) (#331-333) is never used and should be removed
EnumerableSet.at(EnumerableSet.Bytes32Set,uint256) (#313-315) is never used and should be removed
EnumerableSet.at(EnumerableSet.UintSet,uint256) (#349-351) is never used and should be removed
EnumerableSet.contains(EnumerableSet.Bytes32Set,bytes32) (#307-309) is never used and should be removed
EnumerableSet.contains(EnumerableSet.UintSet,uint256) (#343-345) is never used and should be removed
EnumerableSet.length(EnumerableSet.AddressSet) (#328-330) is never used and should be removed
EnumerableSet.length(EnumerableSet.Bytes32Set) (#310-312) is never used and should be removed
EnumerableSet.length(EnumerableSet.UintSet) (#346-348) is never used and should be removed
EnumerableSet.remove(EnumerableSet.Bytes32Set,bytes32) (#304-306) is never used and should be removed
EnumerableSet.remove(EnumerableSet.UintSet,uint256) (#340-342) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.11 (#3) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
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
Low level call in Address.sendValue(address,uint256) (#208-212):
- (success) = recipient.call{value: amount}() (#210)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (#222-227):
- (success,returndata) = target.call{value: value}(data) (#225)
Low level call in Address.functionStaticCall(address,bytes,string) (#231-235):
- (success,returndata) = target.staticcall(data) (#233)
Low level call in Address.functionDelegateCall(address,bytes,string) (#239-243):
- (success,returndata) = target.delegatecall(data) (#241)
Low level call in Chad._claimBNBTo(address,address,uint256) (#560-571):
- (sent) = to.call{value: (amountWei)}() (#567)
Low level call in Chad.RemoveLP() (#651-667):
- (sent) = msg.sender.call{value: (address(this).balance)}() (#665)
Low level call in Chad.RecoverBNB() (#670-675):
- (sent) = msg.sender.call{value: (address(this).balance)}() (#673)
Low level call in Chad.WithdrawAllDev() (#1000-1005):
- (sent) = Developer.call{value: (amount)}() (#1003)
Low level call in Chad.WithdrawDev(uint256) (#1008-1013):
- (sent) = Developer.call{value: (amount)}() (#1011)
Low level call in Chad.WithdrawAllMarketing() (#1016-1021):
- (sent) = MarketingWallet.call{value: (amount)}() (#1019)
Low level call in Chad.WithdrawMarketing(uint256) (#1024-1029):
- (sent) = MarketingWallet.call{value: (amount)}() (#1027)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IPancakeERC20.DOMAIN_SEPARATOR() (#31) is not in mixedCase
Function IPancakeERC20.PERMIT_TYPEHASH() (#32) is not in mixedCase
Function IPancakeRouter01.WETH() (#131) is not in mixedCase
Event ChadonUpdateLPThreshold(uint16) (#696) is not in CapWords
Event ChadonBurnTokens(uint256) (#986) is not in CapWords
Parameter Chad.allowance(address,address)._owner (#453) is not in mixedCase
Function Chad.ClaimMainReward() (#547-549) is not in mixedCase
Function Chad.ClaimMiscReward() (#552-556) is not in mixedCase
Function Chad.ChangeMainReward(address) (#612-616) is not in mixedCase
Function Chad.ChangeMiscReward(address) (#620-623) is not in mixedCase
Function Chad.LockLiquidityTokens(uint256) (#632-635) is not in mixedCase
Function Chad.ReleaseLP() (#643-648) is not in mixedCase
Function Chad.RemoveLP() (#651-667) is not in mixedCase
Function Chad.RecoverBNB() (#670-675) is not in mixedCase
Function Chad.UpdateAutoLPThreshold(uint16) (#697-702) is not in mixedCase
Parameter Chad.UpdateAutoLPThreshold(uint16).Threshold (#697) is not in mixedCase
Function Chad.CreateLPandBNB(uint16,bool) (#705-707) is not in mixedCase
Parameter Chad.CreateLPandBNB(uint16,bool).PermilleOfPancake (#705) is not in mixedCase
Function Chad.ManualBNBSwap(bool) (#858-860) is not in mixedCase
Function Chad.TriggerBuyBack(uint256) (#965-983) is not in mixedCase
Function Chad.BurnTokens(uint256) (#987-997) is not in mixedCase
Function Chad.WithdrawAllDev() (#1000-1005) is not in mixedCase
Function Chad.WithdrawDev(uint256) (#1008-1013) is not in mixedCase
Function Chad.WithdrawAllMarketing() (#1016-1021) is not in mixedCase
Function Chad.WithdrawMarketing(uint256) (#1024-1029) is not in mixedCase
Function Chad.ExcludeFromStaking(address) (#1034-1045) is not in mixedCase
Function Chad.IncludeMeToStaking() (#1048-1054) is not in mixedCase
Function Chad.IncludeToStaking(address) (#1057-1064) is not in mixedCase
Function Chad.SetMarketingWallet(address) (#1080-1086) is not in mixedCase
Function Chad.SetDevWallet(address) (#1090-1096) is not in mixedCase
Function Chad.ExcludeAccountFromFees(address) (#1100-1103) is not in mixedCase
Function Chad.IncludeAccountToFees(address) (#1106-1109) is not in mixedCase
Function Chad.UpdateTaxes(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8) (#1122-1140) is not in mixedCase
Function Chad.UpdateRewardSplit(uint8,uint8) (#1144-1150) is not in mixedCase
Parameter Chad.UpdateRewardSplit(uint8,uint8).MainSplit (#1144) is not in mixedCase
Parameter Chad.UpdateRewardSplit(uint8,uint8).MiscSplit (#1144) is not in mixedCase
Function Chad.UpdateLimits(uint256,uint256) (#1153-1167) is not in mixedCase
Constant Chad._name (#364) is not in UPPER_CASE_WITH_UNDERSCORES
Constant Chad._symbol (#365) is not in UPPER_CASE_WITH_UNDERSCORES
Constant Chad._decimals (#366) is not in UPPER_CASE_WITH_UNDERSCORES
Constant Chad._totalSupply (#367) is not in UPPER_CASE_WITH_UNDERSCORES
Variable Chad._circulatingSupply (#368) is not in mixedCase
Constant Chad.MaxWalletDivider (#369) is not in UPPER_CASE_WITH_UNDERSCORES
Constant Chad.SellLimitDivider (#370) is not in UPPER_CASE_WITH_UNDERSCORES
Constant Chad.MaxTax (#371) is not in UPPER_CASE_WITH_UNDERSCORES
Variable Chad._MainRewardSplit (#384) is not in mixedCase
Variable Chad._MiscRewardSplit (#385) is not in mixedCase
Variable Chad.MaxWallet (#386) is not in mixedCase
Variable Chad.MarketingWallet (#388) is not in mixedCase
Variable Chad.Developer (#389) is not in mixedCase
Variable Chad.BurnAddress (#390) is not in mixedCase
Constant Chad.blacklistBlocks (#396) is not in UPPER_CASE_WITH_UNDERSCORES
Variable Chad.MainReward (#404) is not in mixedCase
Variable Chad.MiscReward (#405) is not in mixedCase
Variable Chad.PancakeRouter (#409) is not in mixedCase
Constant Chad.StakeMulti (#679) is not in UPPER_CASE_WITH_UNDERSCORES
Constant Chad.DistributionMultiplier (#680) is not in UPPER_CASE_WITH_UNDERSCORES
Variable Chad.MarketingBalance (#686) is not in mixedCase
Variable Chad.DevBalance (#687) is not in mixedCase
Variable Chad.BuyBackBalance (#688) is not in mixedCase
Variable Chad.AutoLPThreshold (#689) is not in mixedCase
Variable Chad.Staker (#792) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IPancakeRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#51) is too similar to IPancakeRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#52)
Prevent variables from having similar names.
Additional information: link
Chad.slitherConstructorVariables() (#355-1207) uses literals with too many digits:
- BurnAddress = 0x000000000000000000000000000000000000dEaD (#390)
Chad.slitherConstructorConstantVariables() (#355-1207) uses literals with too many digits:
- _totalSupply = 1000000000 * 10 ** _decimals (#367)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
Chad.BurnAddress (#390) should be constant
Chad.Staker (#792) 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) (#196-200)
ClaimMainReward() should be declared external:
- Chad.ClaimMainReward() (#547-549)
ClaimMiscReward() should be declared external:
- Chad.ClaimMiscReward() (#552-556)
getMainBalance(address) should be declared external:
- Chad.getMainBalance(address) (#599-602)
getMiscBalance(address) should be declared external:
- Chad.getMiscBalance(address) (#605-608)
ChangeMainReward(address) should be declared external:
- Chad.ChangeMainReward(address) (#612-616)
ChangeMiscReward(address) should be declared external:
- Chad.ChangeMiscReward(address) (#620-623)
LockLiquidityTokens(uint256) should be declared external:
- Chad.LockLiquidityTokens(uint256) (#632-635)
ReleaseLP() should be declared external:
- Chad.ReleaseLP() (#643-648)
RemoveLP() should be declared external:
- Chad.RemoveLP() (#651-667)
RecoverBNB() should be declared external:
- Chad.RecoverBNB() (#670-675)
UpdateAutoLPThreshold(uint16) should be declared external:
- Chad.UpdateAutoLPThreshold(uint16) (#697-702)
CreateLPandBNB(uint16,bool) should be declared external:
- Chad.CreateLPandBNB(uint16,bool) (#705-707)
ManualBNBSwap(bool) should be declared external:
- Chad.ManualBNBSwap(bool) (#858-860)
TriggerBuyBack(uint256) should be declared external:
- Chad.TriggerBuyBack(uint256) (#965-983)
BurnTokens(uint256) should be declared external:
- Chad.BurnTokens(uint256) (#987-997)
WithdrawAllDev() should be declared external:
- Chad.WithdrawAllDev() (#1000-1005)
WithdrawDev(uint256) should be declared external:
- Chad.WithdrawDev(uint256) (#1008-1013)
WithdrawAllMarketing() should be declared external:
- Chad.WithdrawAllMarketing() (#1016-1021)
WithdrawMarketing(uint256) should be declared external:
- Chad.WithdrawMarketing(uint256) (#1024-1029)
ExcludeFromStaking(address) should be declared external:
- Chad.ExcludeFromStaking(address) (#1034-1045)
IncludeMeToStaking() should be declared external:
- Chad.IncludeMeToStaking() (#1048-1054)
IncludeToStaking(address) should be declared external:
- Chad.IncludeToStaking(address) (#1057-1064)
setBlacklistStatus(address[],bool) should be declared external:
- Chad.setBlacklistStatus(address[],bool) (#1066-1070)
enableBlacklist(bool) should be declared external:
- Chad.enableBlacklist(bool) (#1073-1076)
SetMarketingWallet(address) should be declared external:
- Chad.SetMarketingWallet(address) (#1080-1086)
SetDevWallet(address) should be declared external:
- Chad.SetDevWallet(address) (#1090-1096)
ExcludeAccountFromFees(address) should be declared external:
- Chad.ExcludeAccountFromFees(address) (#1100-1103)
IncludeAccountToFees(address) should be declared external:
- Chad.IncludeAccountToFees(address) (#1106-1109)
setPresale(address) should be declared external:
- Chad.setPresale(address) (#1111-1114)
UpdateTaxes(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8) should be declared external:
- Chad.UpdateTaxes(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8) (#1122-1140)
UpdateRewardSplit(uint8,uint8) should be declared external:
- Chad.UpdateRewardSplit(uint8,uint8) (#1144-1150)
UpdateLimits(uint256,uint256) should be declared external:
- Chad.UpdateLimits(uint256,uint256) (#1153-1167)
getLimits() should be declared external:
- Chad.getLimits() (#1190-1192)
getLiquidityUnlockInSeconds() should be declared external:
- Chad.getLiquidityUnlockInSeconds() (#1194-1199)
getTaxes() should be declared external:
- Chad.getTaxes() (#1201-1203)
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