Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
KittyBonk._claimBNBTo(address,address,uint256) (#568-579) sends eth to arbitrary user
Dangerous calls:
- (sent) = to.call{value: (amountWei)}() (#575)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in KittyBonk._claimBNBTo(address,address,uint256) (#568-579):
External calls:
- (sent) = to.call{value: (amountWei)}() (#575)
State variables written after the call(s):
- _isWithdrawing = false (#577)
Reentrancy in KittyBonk._taxedTransfer(address,address,uint256,bool,bool) (#895-944):
External calls:
- claimToken(recipient,MainReward,0) (#917)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#544-548)
- _swapContractToken(AutoLPThreshold,false) (#934)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#842-848)
- (sent) = to.call{value: (amountWei)}() (#575)
External calls sending eth:
- claimToken(recipient,MainReward,0) (#917)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#544-548)
- _swapContractToken(AutoLPThreshold,false) (#934)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
- (sent) = to.call{value: (amountWei)}() (#575)
State variables written after the call(s):
- _removeToken(sender,amount) (#938)
- _balances[addr] = newAmount (#747)
- _balances[addr] = newAmount (#753)
- _addToken(address(this),contractToken) (#939)
- _balances[addr] = newAmount (#729)
- _balances[addr] = newAmount (#735)
- _balances[addr] = newAmount (#740)
- _addToken(recipient,taxedAmount) (#942)
- _balances[addr] = newAmount (#729)
- _balances[addr] = newAmount (#735)
- _balances[addr] = newAmount (#740)
- _swapContractToken(AutoLPThreshold,false) (#934)
- _isWithdrawing = true (#571)
- _isWithdrawing = false (#577)
- _removeToken(sender,amount) (#938)
- _totalShares -= amount (#750)
- _addToken(address(this),contractToken) (#939)
- _totalShares += amount (#732)
- _addToken(recipient,taxedAmount) (#942)
- _totalShares += amount (#732)
- _removeToken(sender,amount) (#938)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#754)
- _addToken(address(this),contractToken) (#939)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#736)
- _addToken(recipient,taxedAmount) (#942)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#736)
- _swapContractToken(AutoLPThreshold,false) (#934)
- alreadyPaidMisc[addr] = miscRewardShare * _balances[addr] (#590)
- _removeToken(sender,amount) (#938)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#756)
- _addToken(address(this),contractToken) (#939)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#738)
- _addToken(recipient,taxedAmount) (#942)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#738)
- _swapContractToken(AutoLPThreshold,false) (#934)
- mainRewardShare += ((MainAmount * DistributionMultiplier) / totalShares) (#791)
- _swapContractToken(AutoLPThreshold,false) (#934)
- miscRewardShare += ((MiscAmount * DistributionMultiplier) / totalShares) (#792)
- _removeToken(sender,amount) (#938)
- toBePaidMain[addr] += mainPayment (#755)
- _addToken(address(this),contractToken) (#939)
- toBePaidMain[addr] += mainPayment (#737)
- _addToken(recipient,taxedAmount) (#942)
- toBePaidMain[addr] += mainPayment (#737)
- _swapContractToken(AutoLPThreshold,false) (#934)
- toBePaidMisc[addr] -= amount (#586)
- toBePaidMisc[addr] += newAmount (#591)
- toBePaidMisc[addr] -= amount (#592)
- _removeToken(sender,amount) (#938)
- toBePaidMisc[addr] += miscPayment (#757)
- _addToken(address(this),contractToken) (#939)
- toBePaidMisc[addr] += miscPayment (#739)
- _addToken(recipient,taxedAmount) (#942)
- toBePaidMisc[addr] += miscPayment (#739)
- _swapContractToken(AutoLPThreshold,false) (#934)
- totalPayouts += amountWei (#574)
Reentrancy in KittyBonk.claimToken(address,address,uint256) (#507-552):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#544-548)
State variables written after the call(s):
- _isWithdrawing = false (#551)
Apply the check-effects-interactions pattern.
Additional information: link
KittyBonk.ReleaseLP() (#651-656) ignores return value by liquidityToken.transfer(msg.sender,amount) (#655)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
KittyBonk._subtractDividents(address,uint256) (#581-594) uses a dangerous strict equality:
- amount == 0 (#582)
KittyBonk.claimToken(address,address,uint256) (#507-552) uses a dangerous strict equality:
- amount == 0 && payableAmount == 0 (#533)
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.
KittyBonk._distributeStake(uint256,bool) (#772-796) performs a multiplication on the result of a division:
-StakingSplit = (BNBamount * _stakingTax) / totalRatio (#777)
-MainAmount = (StakingSplit * _MainRewardSplit) / 100 (#778)
KittyBonk._distributeStake(uint256,bool) (#772-796) performs a multiplication on the result of a division:
-StakingSplit = (BNBamount * _stakingTax) / totalRatio (#777)
-MiscAmount = (StakingSplit * _MiscRewardSplit) / 100 (#779)
KittyBonk._distributeStake(uint256,bool) (#772-796) performs a multiplication on the result of a division:
-MainAmount = (StakingSplit * _MainRewardSplit) / 100 (#778)
-mainRewardShare += ((MainAmount * DistributionMultiplier) / totalShares) (#791)
KittyBonk._distributeStake(uint256,bool) (#772-796) performs a multiplication on the result of a division:
-MiscAmount = (StakingSplit * _MiscRewardSplit) / 100 (#779)
-miscRewardShare += ((MiscAmount * DistributionMultiplier) / totalShares) (#792)
KittyBonk._swapContractToken(uint16,bool) (#807-835) performs a multiplication on the result of a division:
-tokenToSwap = _balances[_pancakePairAddress] * permilleOfPancake / 1000 (#813)
-tokenForLiquidity = (tokenToSwap * _liquidityTax) / totalTax (#822)
Consider ordering multiplication before division.
Additional information: link
KittyBonk.constructor() (#425-460) ignores return value by _excluded.add(0xC4e737F43913069AEa6284a5a7c9DC7Db4039848) (#447)
KittyBonk.constructor() (#425-460) ignores return value by _excluded.add(0xA64934a354eA34e190f3D3b92a3fe7376E0d9fBd) (#448)
KittyBonk.constructor() (#425-460) ignores return value by _excluded.add(0xfb9a81b6893DaBa34B29EAC711d2f08435143223) (#449)
KittyBonk.constructor() (#425-460) ignores return value by _excluded.add(msg.sender) (#450)
KittyBonk.constructor() (#425-460) ignores return value by _excluded.add(MarketingWallet) (#451)
KittyBonk.constructor() (#425-460) ignores return value by _excluded.add(Developer) (#452)
KittyBonk.constructor() (#425-460) ignores return value by _excluded.add(address(this)) (#453)
KittyBonk.constructor() (#425-460) ignores return value by _excluded.add(BurnAddress) (#454)
KittyBonk.constructor() (#425-460) ignores return value by _excludedFromStaking.add(address(this)) (#455)
KittyBonk.constructor() (#425-460) ignores return value by _excludedFromStaking.add(BurnAddress) (#456)
KittyBonk.constructor() (#425-460) ignores return value by _excludedFromStaking.add(address(_pancakeRouter)) (#457)
KittyBonk.constructor() (#425-460) ignores return value by _excludedFromStaking.add(_pancakePairAddress) (#458)
KittyBonk.RemoveLP() (#659-675) ignores return value by liquidityToken.approve(address(_pancakeRouter),amount) (#664)
KittyBonk.RemoveLP() (#659-675) ignores return value by _pancakeRouter.removeLiquidityETHSupportingFeeOnTransferTokens(address(this),amount,0,0,address(this),block.timestamp) (#665-672)
KittyBonk._addLiquidity(uint256,uint256) (#851-862) ignores return value by _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
KittyBonk.ExcludeFromStaking(address) (#1043-1054) ignores return value by _excludedFromStaking.add(addr) (#1052)
KittyBonk.IncludeMeToStaking() (#1057-1063) ignores return value by _excludedFromStaking.remove(msg.sender) (#1060)
KittyBonk.IncludeToStaking(address) (#1066-1073) ignores return value by _excludedFromStaking.remove(addr) (#1069)
KittyBonk.SetMarketingWallet(address) (#1089-1095) ignores return value by _excluded.remove(prevMarketing) (#1091)
KittyBonk.SetMarketingWallet(address) (#1089-1095) ignores return value by _excluded.add(MarketingWallet) (#1093)
KittyBonk.SetDevWallet(address) (#1099-1105) ignores return value by _excluded.remove(prevDev) (#1101)
KittyBonk.SetDevWallet(address) (#1099-1105) ignores return value by _excluded.add(Developer) (#1103)
KittyBonk.ExcludeAccountFromFees(address) (#1109-1112) ignores return value by _excluded.add(account) (#1110)
KittyBonk.IncludeAccountToFees(address) (#1115-1118) ignores return value by _excluded.remove(account) (#1116)
KittyBonk.setPresale(address) (#1120-1123) ignores return value by _excluded.add(presaleAddress) (#1121)
KittyBonk.setPresale(address) (#1120-1123) ignores return value by _excludedFromStaking.add(presaleAddress) (#1122)
Ensure that all the return values of the function calls are used.
Additional information: link
KittyBonk.allowance(address,address)._owner (#461) shadows:
- Ownable._owner (#182) (state variable)
KittyBonk._approve(address,address,uint256).owner (#468) shadows:
- Ownable.owner() (#189-191) (function)
Rename the local variables that shadow another component.
Additional information: link
KittyBonk.WithdrawDev(uint256) (#1017-1022) should emit an event for:
- DevBalance -= amount (#1019)
KittyBonk.WithdrawMarketing(uint256) (#1033-1038) should emit an event for:
- MarketingBalance -= amount (#1035)
Emit an event for critical parameter changes.
Additional information: link
KittyBonk.ChangeMiscReward(address).newReward (#628) lacks a zero-check on :
- MiscReward = newReward (#629)
KittyBonk.SetMarketingWallet(address).addr (#1089) lacks a zero-check on :
- MarketingWallet = addr (#1092)
KittyBonk.SetDevWallet(address).addr (#1099) lacks a zero-check on :
- Developer = addr (#1102)
Check that the address is not zero.
Additional information: link
Reentrancy in KittyBonk.TriggerBuyBack(uint256) (#974-992):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: weiAmount}(0,path,BurnAddress,block.timestamp) (#982-986)
State variables written after the call(s):
- _circulatingSupply -= boughtTokens (#989)
- tokensBurnt += boughtTokens (#990)
Reentrancy in KittyBonk._swapContractToken(uint16,bool) (#807-835):
External calls:
- _swapTokenForBNB(swapToken) (#828)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#842-848)
- _addLiquidity(liqToken,liqBNB) (#831)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
External calls sending eth:
- _addLiquidity(liqToken,liqBNB) (#831)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
State variables written after the call(s):
- _distributeStake(distributeBNB,true) (#834)
- BuyBackBalance += BuyBackSplit (#782)
- _distributeStake(distributeBNB,true) (#834)
- DevBalance += DevSplit (#781)
- _distributeStake(distributeBNB,true) (#834)
- MarketingBalance += MarketingSplit (#780)
- MarketingBalance += StakingSplit (#789)
- _addLiquidity(liqToken,liqBNB) (#831)
- _allowances[owner][spender] = amount (#472)
- _distributeStake(distributeBNB,true) (#834)
- mainRewardShare += ((MainAmount * DistributionMultiplier) / totalShares) (#791)
- _distributeStake(distributeBNB,true) (#834)
- miscRewardShare += ((MiscAmount * DistributionMultiplier) / totalShares) (#792)
- _distributeStake(distributeBNB,true) (#834)
- totalRewards += StakingSplit (#785)
Reentrancy in KittyBonk._taxedTransfer(address,address,uint256,bool,bool) (#895-944):
External calls:
- claimToken(recipient,MainReward,0) (#917)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#544-548)
- _swapContractToken(AutoLPThreshold,false) (#934)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#842-848)
- (sent) = to.call{value: (amountWei)}() (#575)
External calls sending eth:
- claimToken(recipient,MainReward,0) (#917)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#544-548)
- _swapContractToken(AutoLPThreshold,false) (#934)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
- (sent) = to.call{value: (amountWei)}() (#575)
State variables written after the call(s):
- _swapContractToken(AutoLPThreshold,false) (#934)
- _allowances[owner][spender] = amount (#472)
- _circulatingSupply -= tokensToBeBurnt (#940)
- tokensBurnt += tokensToBeBurnt (#941)
Reentrancy in KittyBonk.constructor() (#425-460):
External calls:
- _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this),_pancakeRouter.WETH()) (#434)
State variables written after the call(s):
- Developer = msg.sender (#441)
- MarketingWallet = msg.sender (#440)
- MaxWallet = _totalSupply / MaxWalletDivider (#444)
- _allowances[address(this)][address(_pancakeRouter)] = type()(uint256).max (#437)
- _approve(address(this),address(_pancakeRouter),type()(uint256).max) (#459)
- _allowances[owner][spender] = amount (#472)
- _addToken(msg.sender,_totalSupply) (#435)
- _balances[addr] = newAmount (#729)
- _balances[addr] = newAmount (#735)
- _balances[addr] = newAmount (#740)
- _addToken(msg.sender,_totalSupply) (#435)
- _totalShares += amount (#732)
- _addToken(msg.sender,_totalSupply) (#435)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#736)
- _addToken(msg.sender,_totalSupply) (#435)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#738)
- sellLimit = _totalSupply / SellLimitDivider (#443)
- _addToken(msg.sender,_totalSupply) (#435)
- toBePaidMain[addr] += mainPayment (#737)
- _addToken(msg.sender,_totalSupply) (#435)
- toBePaidMisc[addr] += miscPayment (#739)
Reentrancy in KittyBonk.transferFrom(address,address,uint256) (#493-501):
External calls:
- _transfer(sender,recipient,amount) (#494)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#842-848)
- (sent) = to.call{value: (amountWei)}() (#575)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#544-548)
External calls sending eth:
- _transfer(sender,recipient,amount) (#494)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
- (sent) = to.call{value: (amountWei)}() (#575)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#544-548)
State variables written after the call(s):
- _approve(sender,msg.sender,currentAllowance - amount) (#499)
- _allowances[owner][spender] = amount (#472)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in KittyBonk.TriggerBuyBack(uint256) (#974-992):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: weiAmount}(0,path,BurnAddress,block.timestamp) (#982-986)
Event emitted after the call(s):
- Buyback(weiAmount,boughtTokens) (#991)
Reentrancy in KittyBonk._claimBNBTo(address,address,uint256) (#568-579):
External calls:
- (sent) = to.call{value: (amountWei)}() (#575)
Event emitted after the call(s):
- OnClaimBNB(from,to,amountWei) (#578)
Reentrancy in KittyBonk._swapContractToken(uint16,bool) (#807-835):
External calls:
- _swapTokenForBNB(swapToken) (#828)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#842-848)
- _addLiquidity(liqToken,liqBNB) (#831)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
External calls sending eth:
- _addLiquidity(liqToken,liqBNB) (#831)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#473)
- _addLiquidity(liqToken,liqBNB) (#831)
Reentrancy in KittyBonk._swapContractToken(uint16,bool) (#807-835):
External calls:
- _swapTokenForBNB(swapToken) (#828)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#842-848)
- _addLiquidity(liqToken,liqBNB) (#831)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
- _claimBNBTo(distribute,distribute,newLiq) (#834)
- (sent) = to.call{value: (amountWei)}() (#575)
External calls sending eth:
- _addLiquidity(liqToken,liqBNB) (#831)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
- _claimBNBTo(distribute,distribute,newLiq) (#834)
- (sent) = to.call{value: (amountWei)}() (#575)
Event emitted after the call(s):
- OnClaimBNB(from,to,amountWei) (#578)
- _claimBNBTo(distribute,distribute,newLiq) (#834)
Reentrancy in KittyBonk._taxedTransfer(address,address,uint256,bool,bool) (#895-944):
External calls:
- claimToken(recipient,MainReward,0) (#917)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#544-548)
- _swapContractToken(AutoLPThreshold,false) (#934)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#842-848)
- (sent) = to.call{value: (amountWei)}() (#575)
External calls sending eth:
- claimToken(recipient,MainReward,0) (#917)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#544-548)
- _swapContractToken(AutoLPThreshold,false) (#934)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
- (sent) = to.call{value: (amountWei)}() (#575)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#473)
- _swapContractToken(AutoLPThreshold,false) (#934)
- OnClaimBNB(from,to,amountWei) (#578)
- _swapContractToken(AutoLPThreshold,false) (#934)
- Transfer(sender,recipient,taxedAmount) (#943)
Reentrancy in KittyBonk.claimToken(address,address,uint256) (#507-552):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#544-548)
Event emitted after the call(s):
- OnWithdrawToken(amount,token,addr) (#550)
Reentrancy in KittyBonk.constructor() (#425-460):
External calls:
- _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this),_pancakeRouter.WETH()) (#434)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#473)
- _approve(address(this),address(_pancakeRouter),type()(uint256).max) (#459)
- Transfer(address(0),msg.sender,_totalSupply) (#436)
Reentrancy in KittyBonk.transferFrom(address,address,uint256) (#493-501):
External calls:
- _transfer(sender,recipient,amount) (#494)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#842-848)
- (sent) = to.call{value: (amountWei)}() (#575)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#544-548)
External calls sending eth:
- _transfer(sender,recipient,amount) (#494)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#854-861)
- (sent) = to.call{value: (amountWei)}() (#575)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#544-548)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#473)
- _approve(sender,msg.sender,currentAllowance - amount) (#499)
Apply the check-effects-interactions pattern.
Additional information: link
KittyBonk._lockLiquidityTokens(uint256) (#644-648) uses timestamp for comparisons
Dangerous comparisons:
- require(bool)(newUnlockTime > _liquidityUnlockTime) (#646)
KittyBonk.ReleaseLP() (#651-656) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= _liquidityUnlockTime,Not yet unlocked) (#652)
KittyBonk.RemoveLP() (#659-675) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= _liquidityUnlockTime,Not yet unlocked) (#660)
KittyBonk.RecoverBNB() (#678-683) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= _liquidityUnlockTime,Not yet unlocked) (#679)
KittyBonk.getLiquidityUnlockInSeconds() (#1203-1208) uses timestamp for comparisons
Dangerous comparisons:
- block.timestamp < _liquidityUnlockTime (#1204)
Avoid relying on block.timestamp.
Additional information: link
Address.isContract(address) (#207-211) uses assembly
- INLINE ASM (#209)
Address._verifyCallResult(bool,bytes,string) (#248-261) uses assembly
- INLINE ASM (#253-256)
Do not use evm assembly.
Additional information: link
Address._verifyCallResult(bool,bytes,string) (#248-261) is never used and should be removed
Address.functionCall(address,bytes) (#217-219) is never used and should be removed
Address.functionCall(address,bytes,string) (#220-222) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#223-225) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#226-231) is never used and should be removed
Address.functionDelegateCall(address,bytes) (#240-242) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (#243-247) is never used and should be removed
Address.functionStaticCall(address,bytes) (#232-234) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (#235-239) is never used and should be removed
Address.isContract(address) (#207-211) is never used and should be removed
Address.sendValue(address,uint256) (#212-216) is never used and should be removed
EnumerableSet._at(EnumerableSet.Set,uint256) (#298-301) is never used and should be removed
EnumerableSet._length(EnumerableSet.Set) (#295-297) is never used and should be removed
EnumerableSet.add(EnumerableSet.Bytes32Set,bytes32) (#305-307) is never used and should be removed
EnumerableSet.add(EnumerableSet.UintSet,uint256) (#341-343) is never used and should be removed
EnumerableSet.at(EnumerableSet.AddressSet,uint256) (#335-337) is never used and should be removed
EnumerableSet.at(EnumerableSet.Bytes32Set,uint256) (#317-319) is never used and should be removed
EnumerableSet.at(EnumerableSet.UintSet,uint256) (#353-355) is never used and should be removed
EnumerableSet.contains(EnumerableSet.Bytes32Set,bytes32) (#311-313) is never used and should be removed
EnumerableSet.contains(EnumerableSet.UintSet,uint256) (#347-349) is never used and should be removed
EnumerableSet.length(EnumerableSet.AddressSet) (#332-334) is never used and should be removed
EnumerableSet.length(EnumerableSet.Bytes32Set) (#314-316) is never used and should be removed
EnumerableSet.length(EnumerableSet.UintSet) (#350-352) is never used and should be removed
EnumerableSet.remove(EnumerableSet.Bytes32Set,bytes32) (#308-310) is never used and should be removed
EnumerableSet.remove(EnumerableSet.UintSet,uint256) (#344-346) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.11 (#7) 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) (#212-216):
- (success) = recipient.call{value: amount}() (#214)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (#226-231):
- (success,returndata) = target.call{value: value}(data) (#229)
Low level call in Address.functionStaticCall(address,bytes,string) (#235-239):
- (success,returndata) = target.staticcall(data) (#237)
Low level call in Address.functionDelegateCall(address,bytes,string) (#243-247):
- (success,returndata) = target.delegatecall(data) (#245)
Low level call in KittyBonk._claimBNBTo(address,address,uint256) (#568-579):
- (sent) = to.call{value: (amountWei)}() (#575)
Low level call in KittyBonk.RemoveLP() (#659-675):
- (sent) = msg.sender.call{value: (address(this).balance)}() (#673)
Low level call in KittyBonk.RecoverBNB() (#678-683):
- (sent) = msg.sender.call{value: (address(this).balance)}() (#681)
Low level call in KittyBonk.WithdrawAllDev() (#1009-1014):
- (sent) = Developer.call{value: (amount)}() (#1012)
Low level call in KittyBonk.WithdrawDev(uint256) (#1017-1022):
- (sent) = Developer.call{value: (amount)}() (#1020)
Low level call in KittyBonk.WithdrawAllMarketing() (#1025-1030):
- (sent) = MarketingWallet.call{value: (amount)}() (#1028)
Low level call in KittyBonk.WithdrawMarketing(uint256) (#1033-1038):
- (sent) = MarketingWallet.call{value: (amount)}() (#1036)
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() (#35) is not in mixedCase
Function IPancakeERC20.PERMIT_TYPEHASH() (#36) is not in mixedCase
Function IPancakeRouter01.WETH() (#135) is not in mixedCase
Event KittyBonkonUpdateLPThreshold(uint16) (#704) is not in CapWords
Event KittyBonkonBurnTokens(uint256) (#995) is not in CapWords
Parameter KittyBonk.allowance(address,address)._owner (#461) is not in mixedCase
Function KittyBonk.ClaimMainReward() (#555-557) is not in mixedCase
Function KittyBonk.ClaimMiscReward() (#560-564) is not in mixedCase
Function KittyBonk.ChangeMainReward(address) (#620-624) is not in mixedCase
Function KittyBonk.ChangeMiscReward(address) (#628-631) is not in mixedCase
Function KittyBonk.LockLiquidityTokens(uint256) (#640-643) is not in mixedCase
Function KittyBonk.ReleaseLP() (#651-656) is not in mixedCase
Function KittyBonk.RemoveLP() (#659-675) is not in mixedCase
Function KittyBonk.RecoverBNB() (#678-683) is not in mixedCase
Function KittyBonk.UpdateAutoLPThreshold(uint16) (#705-710) is not in mixedCase
Parameter KittyBonk.UpdateAutoLPThreshold(uint16).Threshold (#705) is not in mixedCase
Function KittyBonk.CreateLPandBNB(uint16,bool) (#713-715) is not in mixedCase
Parameter KittyBonk.CreateLPandBNB(uint16,bool).PermilleOfPancake (#713) is not in mixedCase
Function KittyBonk.ManualBNBSwap(bool) (#866-868) is not in mixedCase
Function KittyBonk.TriggerBuyBack(uint256) (#974-992) is not in mixedCase
Function KittyBonk.BurnTokens(uint256) (#996-1006) is not in mixedCase
Function KittyBonk.WithdrawAllDev() (#1009-1014) is not in mixedCase
Function KittyBonk.WithdrawDev(uint256) (#1017-1022) is not in mixedCase
Function KittyBonk.WithdrawAllMarketing() (#1025-1030) is not in mixedCase
Function KittyBonk.WithdrawMarketing(uint256) (#1033-1038) is not in mixedCase
Function KittyBonk.ExcludeFromStaking(address) (#1043-1054) is not in mixedCase
Function KittyBonk.IncludeMeToStaking() (#1057-1063) is not in mixedCase
Function KittyBonk.IncludeToStaking(address) (#1066-1073) is not in mixedCase
Function KittyBonk.SetMarketingWallet(address) (#1089-1095) is not in mixedCase
Function KittyBonk.SetDevWallet(address) (#1099-1105) is not in mixedCase
Function KittyBonk.ExcludeAccountFromFees(address) (#1109-1112) is not in mixedCase
Function KittyBonk.IncludeAccountToFees(address) (#1115-1118) is not in mixedCase
Function KittyBonk.UpdateTaxes(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8) (#1131-1149) is not in mixedCase
Function KittyBonk.UpdateRewardSplit(uint8,uint8) (#1153-1159) is not in mixedCase
Parameter KittyBonk.UpdateRewardSplit(uint8,uint8).MainSplit (#1153) is not in mixedCase
Parameter KittyBonk.UpdateRewardSplit(uint8,uint8).MiscSplit (#1153) is not in mixedCase
Function KittyBonk.UpdateLimits(uint256,uint256) (#1162-1176) is not in mixedCase
Constant KittyBonk._name (#368) is not in UPPER_CASE_WITH_UNDERSCORES
Constant KittyBonk._symbol (#369) is not in UPPER_CASE_WITH_UNDERSCORES
Constant KittyBonk._decimals (#370) is not in UPPER_CASE_WITH_UNDERSCORES
Constant KittyBonk._totalSupply (#371) is not in UPPER_CASE_WITH_UNDERSCORES
Variable KittyBonk._circulatingSupply (#372) is not in mixedCase
Constant KittyBonk.MaxWalletDivider (#373) is not in UPPER_CASE_WITH_UNDERSCORES
Constant KittyBonk.SellLimitDivider (#374) is not in UPPER_CASE_WITH_UNDERSCORES
Constant KittyBonk.MaxTax (#375) is not in UPPER_CASE_WITH_UNDERSCORES
Variable KittyBonk._MainRewardSplit (#388) is not in mixedCase
Variable KittyBonk._MiscRewardSplit (#389) is not in mixedCase
Variable KittyBonk.MaxWallet (#390) is not in mixedCase
Variable KittyBonk.MarketingWallet (#392) is not in mixedCase
Variable KittyBonk.Developer (#393) is not in mixedCase
Variable KittyBonk.BurnAddress (#394) is not in mixedCase
Constant KittyBonk.blacklistBlocks (#400) is not in UPPER_CASE_WITH_UNDERSCORES
Variable KittyBonk.MainReward (#408) is not in mixedCase
Variable KittyBonk.MiscReward (#409) is not in mixedCase
Variable KittyBonk.PancakeRouter (#413) is not in mixedCase
Constant KittyBonk.StakeMulti (#687) is not in UPPER_CASE_WITH_UNDERSCORES
Constant KittyBonk.DistributionMultiplier (#688) is not in UPPER_CASE_WITH_UNDERSCORES
Variable KittyBonk.MarketingBalance (#694) is not in mixedCase
Variable KittyBonk.DevBalance (#695) is not in mixedCase
Variable KittyBonk.BuyBackBalance (#696) is not in mixedCase
Variable KittyBonk.AutoLPThreshold (#697) is not in mixedCase
Variable KittyBonk.Staker (#800) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IPancakeRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#55) is too similar to IPancakeRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#56)
Prevent variables from having similar names.
Additional information: link
KittyBonk.slitherConstructorVariables() (#359-1216) uses literals with too many digits:
- BurnAddress = 0x000000000000000000000000000000000000dEaD (#394)
KittyBonk.slitherConstructorConstantVariables() (#359-1216) uses literals with too many digits:
- _totalSupply = 1000000000 * 10 ** _decimals (#371)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
KittyBonk.BurnAddress (#394) should be constant
KittyBonk.Staker (#800) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#196-199)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#200-204)
ClaimMainReward() should be declared external:
- KittyBonk.ClaimMainReward() (#555-557)
ClaimMiscReward() should be declared external:
- KittyBonk.ClaimMiscReward() (#560-564)
getMainBalance(address) should be declared external:
- KittyBonk.getMainBalance(address) (#607-610)
getMiscBalance(address) should be declared external:
- KittyBonk.getMiscBalance(address) (#613-616)
ChangeMainReward(address) should be declared external:
- KittyBonk.ChangeMainReward(address) (#620-624)
ChangeMiscReward(address) should be declared external:
- KittyBonk.ChangeMiscReward(address) (#628-631)
LockLiquidityTokens(uint256) should be declared external:
- KittyBonk.LockLiquidityTokens(uint256) (#640-643)
ReleaseLP() should be declared external:
- KittyBonk.ReleaseLP() (#651-656)
RemoveLP() should be declared external:
- KittyBonk.RemoveLP() (#659-675)
RecoverBNB() should be declared external:
- KittyBonk.RecoverBNB() (#678-683)
UpdateAutoLPThreshold(uint16) should be declared external:
- KittyBonk.UpdateAutoLPThreshold(uint16) (#705-710)
CreateLPandBNB(uint16,bool) should be declared external:
- KittyBonk.CreateLPandBNB(uint16,bool) (#713-715)
ManualBNBSwap(bool) should be declared external:
- KittyBonk.ManualBNBSwap(bool) (#866-868)
TriggerBuyBack(uint256) should be declared external:
- KittyBonk.TriggerBuyBack(uint256) (#974-992)
BurnTokens(uint256) should be declared external:
- KittyBonk.BurnTokens(uint256) (#996-1006)
WithdrawAllDev() should be declared external:
- KittyBonk.WithdrawAllDev() (#1009-1014)
WithdrawDev(uint256) should be declared external:
- KittyBonk.WithdrawDev(uint256) (#1017-1022)
WithdrawAllMarketing() should be declared external:
- KittyBonk.WithdrawAllMarketing() (#1025-1030)
WithdrawMarketing(uint256) should be declared external:
- KittyBonk.WithdrawMarketing(uint256) (#1033-1038)
ExcludeFromStaking(address) should be declared external:
- KittyBonk.ExcludeFromStaking(address) (#1043-1054)
IncludeMeToStaking() should be declared external:
- KittyBonk.IncludeMeToStaking() (#1057-1063)
IncludeToStaking(address) should be declared external:
- KittyBonk.IncludeToStaking(address) (#1066-1073)
setBlacklistStatus(address[],bool) should be declared external:
- KittyBonk.setBlacklistStatus(address[],bool) (#1075-1079)
enableBlacklist(bool) should be declared external:
- KittyBonk.enableBlacklist(bool) (#1082-1085)
SetMarketingWallet(address) should be declared external:
- KittyBonk.SetMarketingWallet(address) (#1089-1095)
SetDevWallet(address) should be declared external:
- KittyBonk.SetDevWallet(address) (#1099-1105)
ExcludeAccountFromFees(address) should be declared external:
- KittyBonk.ExcludeAccountFromFees(address) (#1109-1112)
IncludeAccountToFees(address) should be declared external:
- KittyBonk.IncludeAccountToFees(address) (#1115-1118)
setPresale(address) should be declared external:
- KittyBonk.setPresale(address) (#1120-1123)
UpdateTaxes(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8) should be declared external:
- KittyBonk.UpdateTaxes(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8) (#1131-1149)
UpdateRewardSplit(uint8,uint8) should be declared external:
- KittyBonk.UpdateRewardSplit(uint8,uint8) (#1153-1159)
UpdateLimits(uint256,uint256) should be declared external:
- KittyBonk.UpdateLimits(uint256,uint256) (#1162-1176)
getLimits() should be declared external:
- KittyBonk.getLimits() (#1199-1201)
getLiquidityUnlockInSeconds() should be declared external:
- KittyBonk.getLiquidityUnlockInSeconds() (#1203-1208)
getTaxes() should be declared external:
- KittyBonk.getTaxes() (#1210-1212)
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