Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
CupidBSC._claimBNBTo(address,address,uint256) (#565-576) sends eth to arbitrary user
Dangerous calls:
- (sent) = to.call{value: (amountWei)}() (#572)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in CupidBSC._claimBNBTo(address,address,uint256) (#565-576):
External calls:
- (sent) = to.call{value: (amountWei)}() (#572)
State variables written after the call(s):
- _isWithdrawing = false (#574)
Reentrancy in CupidBSC._taxedTransfer(address,address,uint256,bool,bool) (#892-940):
External calls:
- claimToken(recipient,MainReward,0) (#913)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#541-545)
- _swapContractToken(AutoLPThreshold,false) (#930)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#839-845)
- (sent) = to.call{value: (amountWei)}() (#572)
External calls sending eth:
- claimToken(recipient,MainReward,0) (#913)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#541-545)
- _swapContractToken(AutoLPThreshold,false) (#930)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
- (sent) = to.call{value: (amountWei)}() (#572)
State variables written after the call(s):
- _removeToken(sender,amount) (#934)
- _balances[addr] = newAmount (#744)
- _balances[addr] = newAmount (#750)
- _addToken(address(this),contractToken) (#935)
- _balances[addr] = newAmount (#726)
- _balances[addr] = newAmount (#732)
- _balances[addr] = newAmount (#737)
- _addToken(recipient,taxedAmount) (#938)
- _balances[addr] = newAmount (#726)
- _balances[addr] = newAmount (#732)
- _balances[addr] = newAmount (#737)
- _swapContractToken(AutoLPThreshold,false) (#930)
- _isWithdrawing = true (#568)
- _isWithdrawing = false (#574)
- _removeToken(sender,amount) (#934)
- _totalShares -= amount (#747)
- _addToken(address(this),contractToken) (#935)
- _totalShares += amount (#729)
- _addToken(recipient,taxedAmount) (#938)
- _totalShares += amount (#729)
- _removeToken(sender,amount) (#934)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#751)
- _addToken(address(this),contractToken) (#935)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#733)
- _addToken(recipient,taxedAmount) (#938)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#733)
- _swapContractToken(AutoLPThreshold,false) (#930)
- alreadyPaidMisc[addr] = miscRewardShare * _balances[addr] (#587)
- _removeToken(sender,amount) (#934)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#753)
- _addToken(address(this),contractToken) (#935)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#735)
- _addToken(recipient,taxedAmount) (#938)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#735)
- _swapContractToken(AutoLPThreshold,false) (#930)
- mainRewardShare += ((MainAmount * DistributionMultiplier) / totalShares) (#788)
- _swapContractToken(AutoLPThreshold,false) (#930)
- miscRewardShare += ((MiscAmount * DistributionMultiplier) / totalShares) (#789)
- _removeToken(sender,amount) (#934)
- toBePaidMain[addr] += mainPayment (#752)
- _addToken(address(this),contractToken) (#935)
- toBePaidMain[addr] += mainPayment (#734)
- _addToken(recipient,taxedAmount) (#938)
- toBePaidMain[addr] += mainPayment (#734)
- _swapContractToken(AutoLPThreshold,false) (#930)
- toBePaidMisc[addr] -= amount (#583)
- toBePaidMisc[addr] += newAmount (#588)
- toBePaidMisc[addr] -= amount (#589)
- _removeToken(sender,amount) (#934)
- toBePaidMisc[addr] += miscPayment (#754)
- _addToken(address(this),contractToken) (#935)
- toBePaidMisc[addr] += miscPayment (#736)
- _addToken(recipient,taxedAmount) (#938)
- toBePaidMisc[addr] += miscPayment (#736)
- _swapContractToken(AutoLPThreshold,false) (#930)
- totalPayouts += amountWei (#571)
Reentrancy in CupidBSC.claimToken(address,address,uint256) (#504-549):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#541-545)
State variables written after the call(s):
- _isWithdrawing = false (#548)
Apply the check-effects-interactions pattern.
Additional information: link
CupidBSC.ReleaseLP() (#648-653) ignores return value by liquidityToken.transfer(msg.sender,amount) (#652)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
CupidBSC._subtractDividents(address,uint256) (#578-591) uses a dangerous strict equality:
- amount == 0 (#579)
CupidBSC.claimToken(address,address,uint256) (#504-549) uses a dangerous strict equality:
- amount == 0 && payableAmount == 0 (#530)
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.
CupidBSC._distributeStake(uint256,bool) (#769-793) performs a multiplication on the result of a division:
-StakingSplit = (BNBamount * _stakingTax) / totalRatio (#774)
-MainAmount = (StakingSplit * _MainRewardSplit) / 100 (#775)
CupidBSC._distributeStake(uint256,bool) (#769-793) performs a multiplication on the result of a division:
-StakingSplit = (BNBamount * _stakingTax) / totalRatio (#774)
-MiscAmount = (StakingSplit * _MiscRewardSplit) / 100 (#776)
CupidBSC._distributeStake(uint256,bool) (#769-793) performs a multiplication on the result of a division:
-MainAmount = (StakingSplit * _MainRewardSplit) / 100 (#775)
-mainRewardShare += ((MainAmount * DistributionMultiplier) / totalShares) (#788)
CupidBSC._distributeStake(uint256,bool) (#769-793) performs a multiplication on the result of a division:
-MiscAmount = (StakingSplit * _MiscRewardSplit) / 100 (#776)
-miscRewardShare += ((MiscAmount * DistributionMultiplier) / totalShares) (#789)
CupidBSC._swapContractToken(uint16,bool) (#804-832) performs a multiplication on the result of a division:
-tokenToSwap = _balances[_pancakePairAddress] * permilleOfPancake / 1000 (#810)
-tokenForLiquidity = (tokenToSwap * _liquidityTax) / totalTax (#819)
Consider ordering multiplication before division.
Additional information: link
CupidBSC.constructor() (#424-457) ignores return value by _excluded.add(0xA64934a354eA34e190f3D3b92a3fe7376E0d9fBd) (#446)
CupidBSC.constructor() (#424-457) ignores return value by _excluded.add(msg.sender) (#447)
CupidBSC.constructor() (#424-457) ignores return value by _excluded.add(MarketingWallet) (#448)
CupidBSC.constructor() (#424-457) ignores return value by _excluded.add(Developer) (#449)
CupidBSC.constructor() (#424-457) ignores return value by _excluded.add(address(this)) (#450)
CupidBSC.constructor() (#424-457) ignores return value by _excluded.add(BurnAddress) (#451)
CupidBSC.constructor() (#424-457) ignores return value by _excludedFromStaking.add(address(this)) (#452)
CupidBSC.constructor() (#424-457) ignores return value by _excludedFromStaking.add(BurnAddress) (#453)
CupidBSC.constructor() (#424-457) ignores return value by _excludedFromStaking.add(address(_pancakeRouter)) (#454)
CupidBSC.constructor() (#424-457) ignores return value by _excludedFromStaking.add(_pancakePairAddress) (#455)
CupidBSC.RemoveLP() (#656-672) ignores return value by liquidityToken.approve(address(_pancakeRouter),amount) (#661)
CupidBSC.RemoveLP() (#656-672) ignores return value by _pancakeRouter.removeLiquidityETHSupportingFeeOnTransferTokens(address(this),amount,0,0,address(this),block.timestamp) (#662-669)
CupidBSC._addLiquidity(uint256,uint256) (#848-859) ignores return value by _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
CupidBSC.ExcludeFromStaking(address) (#1039-1050) ignores return value by _excludedFromStaking.add(addr) (#1048)
CupidBSC.IncludeMeToStaking() (#1053-1059) ignores return value by _excludedFromStaking.remove(msg.sender) (#1056)
CupidBSC.IncludeToStaking(address) (#1062-1069) ignores return value by _excludedFromStaking.remove(addr) (#1065)
CupidBSC.SetMarketingWallet(address) (#1085-1091) ignores return value by _excluded.remove(prevMarketing) (#1087)
CupidBSC.SetMarketingWallet(address) (#1085-1091) ignores return value by _excluded.add(MarketingWallet) (#1089)
CupidBSC.SetDevWallet(address) (#1095-1101) ignores return value by _excluded.remove(prevDev) (#1097)
CupidBSC.SetDevWallet(address) (#1095-1101) ignores return value by _excluded.add(Developer) (#1099)
CupidBSC.ExcludeAccountFromFees(address) (#1105-1108) ignores return value by _excluded.add(account) (#1106)
CupidBSC.IncludeAccountToFees(address) (#1111-1114) ignores return value by _excluded.remove(account) (#1112)
CupidBSC.setPresale(address) (#1116-1119) ignores return value by _excluded.add(presaleAddress) (#1117)
CupidBSC.setPresale(address) (#1116-1119) ignores return value by _excludedFromStaking.add(presaleAddress) (#1118)
Ensure that all the return values of the function calls are used.
Additional information: link
CupidBSC.allowance(address,address)._owner (#458) shadows:
- Ownable._owner (#181) (state variable)
CupidBSC._approve(address,address,uint256).owner (#465) shadows:
- Ownable.owner() (#188-190) (function)
Rename the local variables that shadow another component.
Additional information: link
CupidBSC.WithdrawDev(uint256) (#1013-1018) should emit an event for:
- DevBalance -= amount (#1015)
CupidBSC.WithdrawMarketing(uint256) (#1029-1034) should emit an event for:
- MarketingBalance -= amount (#1031)
Emit an event for critical parameter changes.
Additional information: link
CupidBSC.ChangeMiscReward(address).newReward (#625) lacks a zero-check on :
- MiscReward = newReward (#626)
CupidBSC.SetMarketingWallet(address).addr (#1085) lacks a zero-check on :
- MarketingWallet = addr (#1088)
CupidBSC.SetDevWallet(address).addr (#1095) lacks a zero-check on :
- Developer = addr (#1098)
Check that the address is not zero.
Additional information: link
Reentrancy in CupidBSC.TriggerBuyBack(uint256) (#970-988):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: weiAmount}(0,path,BurnAddress,block.timestamp) (#978-982)
State variables written after the call(s):
- _circulatingSupply -= boughtTokens (#985)
- tokensBurnt += boughtTokens (#986)
Reentrancy in CupidBSC._swapContractToken(uint16,bool) (#804-832):
External calls:
- _swapTokenForBNB(swapToken) (#825)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#839-845)
- _addLiquidity(liqToken,liqBNB) (#828)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
External calls sending eth:
- _addLiquidity(liqToken,liqBNB) (#828)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
State variables written after the call(s):
- _distributeStake(distributeBNB,true) (#831)
- BuyBackBalance += BuyBackSplit (#779)
- _distributeStake(distributeBNB,true) (#831)
- DevBalance += DevSplit (#778)
- _distributeStake(distributeBNB,true) (#831)
- MarketingBalance += MarketingSplit (#777)
- MarketingBalance += StakingSplit (#786)
- _addLiquidity(liqToken,liqBNB) (#828)
- _allowances[owner][spender] = amount (#469)
- _distributeStake(distributeBNB,true) (#831)
- mainRewardShare += ((MainAmount * DistributionMultiplier) / totalShares) (#788)
- _distributeStake(distributeBNB,true) (#831)
- miscRewardShare += ((MiscAmount * DistributionMultiplier) / totalShares) (#789)
- _distributeStake(distributeBNB,true) (#831)
- totalRewards += StakingSplit (#782)
Reentrancy in CupidBSC._taxedTransfer(address,address,uint256,bool,bool) (#892-940):
External calls:
- claimToken(recipient,MainReward,0) (#913)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#541-545)
- _swapContractToken(AutoLPThreshold,false) (#930)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#839-845)
- (sent) = to.call{value: (amountWei)}() (#572)
External calls sending eth:
- claimToken(recipient,MainReward,0) (#913)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#541-545)
- _swapContractToken(AutoLPThreshold,false) (#930)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
- (sent) = to.call{value: (amountWei)}() (#572)
State variables written after the call(s):
- _swapContractToken(AutoLPThreshold,false) (#930)
- _allowances[owner][spender] = amount (#469)
- _circulatingSupply -= tokensToBeBurnt (#936)
- tokensBurnt += tokensToBeBurnt (#937)
Reentrancy in CupidBSC.constructor() (#424-457):
External calls:
- _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this),_pancakeRouter.WETH()) (#433)
State variables written after the call(s):
- Developer = msg.sender (#440)
- MarketingWallet = 0x8735F6c14984fDE34C8BC08e637709C8a27f0061 (#439)
- MaxWallet = _totalSupply / MaxWalletDivider (#443)
- _allowances[address(this)][address(_pancakeRouter)] = type()(uint256).max (#436)
- _approve(address(this),address(_pancakeRouter),type()(uint256).max) (#456)
- _allowances[owner][spender] = amount (#469)
- _addToken(msg.sender,_totalSupply) (#434)
- _balances[addr] = newAmount (#726)
- _balances[addr] = newAmount (#732)
- _balances[addr] = newAmount (#737)
- _addToken(msg.sender,_totalSupply) (#434)
- _totalShares += amount (#729)
- _addToken(msg.sender,_totalSupply) (#434)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#733)
- _addToken(msg.sender,_totalSupply) (#434)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#735)
- sellLimit = _totalSupply / SellLimitDivider (#442)
- _addToken(msg.sender,_totalSupply) (#434)
- toBePaidMain[addr] += mainPayment (#734)
- _addToken(msg.sender,_totalSupply) (#434)
- toBePaidMisc[addr] += miscPayment (#736)
Reentrancy in CupidBSC.transferFrom(address,address,uint256) (#490-498):
External calls:
- _transfer(sender,recipient,amount) (#491)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#839-845)
- (sent) = to.call{value: (amountWei)}() (#572)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#541-545)
External calls sending eth:
- _transfer(sender,recipient,amount) (#491)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
- (sent) = to.call{value: (amountWei)}() (#572)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#541-545)
State variables written after the call(s):
- _approve(sender,msg.sender,currentAllowance - amount) (#496)
- _allowances[owner][spender] = amount (#469)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in CupidBSC.TriggerBuyBack(uint256) (#970-988):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: weiAmount}(0,path,BurnAddress,block.timestamp) (#978-982)
Event emitted after the call(s):
- Buyback(weiAmount,boughtTokens) (#987)
Reentrancy in CupidBSC._claimBNBTo(address,address,uint256) (#565-576):
External calls:
- (sent) = to.call{value: (amountWei)}() (#572)
Event emitted after the call(s):
- OnClaimBNB(from,to,amountWei) (#575)
Reentrancy in CupidBSC._swapContractToken(uint16,bool) (#804-832):
External calls:
- _swapTokenForBNB(swapToken) (#825)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#839-845)
- _addLiquidity(liqToken,liqBNB) (#828)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
External calls sending eth:
- _addLiquidity(liqToken,liqBNB) (#828)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#470)
- _addLiquidity(liqToken,liqBNB) (#828)
Reentrancy in CupidBSC._swapContractToken(uint16,bool) (#804-832):
External calls:
- _swapTokenForBNB(swapToken) (#825)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#839-845)
- _addLiquidity(liqToken,liqBNB) (#828)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
- _claimBNBTo(distribute,distribute,newLiq) (#831)
- (sent) = to.call{value: (amountWei)}() (#572)
External calls sending eth:
- _addLiquidity(liqToken,liqBNB) (#828)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
- _claimBNBTo(distribute,distribute,newLiq) (#831)
- (sent) = to.call{value: (amountWei)}() (#572)
Event emitted after the call(s):
- OnClaimBNB(from,to,amountWei) (#575)
- _claimBNBTo(distribute,distribute,newLiq) (#831)
Reentrancy in CupidBSC._taxedTransfer(address,address,uint256,bool,bool) (#892-940):
External calls:
- claimToken(recipient,MainReward,0) (#913)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#541-545)
- _swapContractToken(AutoLPThreshold,false) (#930)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#839-845)
- (sent) = to.call{value: (amountWei)}() (#572)
External calls sending eth:
- claimToken(recipient,MainReward,0) (#913)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#541-545)
- _swapContractToken(AutoLPThreshold,false) (#930)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
- (sent) = to.call{value: (amountWei)}() (#572)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#470)
- _swapContractToken(AutoLPThreshold,false) (#930)
- OnClaimBNB(from,to,amountWei) (#575)
- _swapContractToken(AutoLPThreshold,false) (#930)
- Transfer(sender,recipient,taxedAmount) (#939)
Reentrancy in CupidBSC.claimToken(address,address,uint256) (#504-549):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#541-545)
Event emitted after the call(s):
- OnWithdrawToken(amount,token,addr) (#547)
Reentrancy in CupidBSC.constructor() (#424-457):
External calls:
- _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this),_pancakeRouter.WETH()) (#433)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#470)
- _approve(address(this),address(_pancakeRouter),type()(uint256).max) (#456)
- Transfer(address(0),msg.sender,_totalSupply) (#435)
Reentrancy in CupidBSC.transferFrom(address,address,uint256) (#490-498):
External calls:
- _transfer(sender,recipient,amount) (#491)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
- _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp) (#839-845)
- (sent) = to.call{value: (amountWei)}() (#572)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#541-545)
External calls sending eth:
- _transfer(sender,recipient,amount) (#491)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#851-858)
- (sent) = to.call{value: (amountWei)}() (#572)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#541-545)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#470)
- _approve(sender,msg.sender,currentAllowance - amount) (#496)
Apply the check-effects-interactions pattern.
Additional information: link
CupidBSC._lockLiquidityTokens(uint256) (#641-645) uses timestamp for comparisons
Dangerous comparisons:
- require(bool)(newUnlockTime > _liquidityUnlockTime) (#643)
CupidBSC.ReleaseLP() (#648-653) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= _liquidityUnlockTime,Not yet unlocked) (#649)
CupidBSC.RemoveLP() (#656-672) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= _liquidityUnlockTime,Not yet unlocked) (#657)
CupidBSC.RecoverBNB() (#675-680) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= _liquidityUnlockTime,Not yet unlocked) (#676)
CupidBSC.getLiquidityUnlockInSeconds() (#1199-1204) uses timestamp for comparisons
Dangerous comparisons:
- block.timestamp < _liquidityUnlockTime (#1200)
Avoid relying on block.timestamp.
Additional information: link
Address.isContract(address) (#206-210) uses assembly
- INLINE ASM (#208)
Address._verifyCallResult(bool,bytes,string) (#247-260) uses assembly
- INLINE ASM (#252-255)
Do not use evm assembly.
Additional information: link
Address._verifyCallResult(bool,bytes,string) (#247-260) is never used and should be removed
Address.functionCall(address,bytes) (#216-218) is never used and should be removed
Address.functionCall(address,bytes,string) (#219-221) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#222-224) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#225-230) is never used and should be removed
Address.functionDelegateCall(address,bytes) (#239-241) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (#242-246) is never used and should be removed
Address.functionStaticCall(address,bytes) (#231-233) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (#234-238) is never used and should be removed
Address.isContract(address) (#206-210) is never used and should be removed
Address.sendValue(address,uint256) (#211-215) is never used and should be removed
EnumerableSet._at(EnumerableSet.Set,uint256) (#297-300) is never used and should be removed
EnumerableSet._length(EnumerableSet.Set) (#294-296) is never used and should be removed
EnumerableSet.add(EnumerableSet.Bytes32Set,bytes32) (#304-306) is never used and should be removed
EnumerableSet.add(EnumerableSet.UintSet,uint256) (#340-342) is never used and should be removed
EnumerableSet.at(EnumerableSet.AddressSet,uint256) (#334-336) is never used and should be removed
EnumerableSet.at(EnumerableSet.Bytes32Set,uint256) (#316-318) is never used and should be removed
EnumerableSet.at(EnumerableSet.UintSet,uint256) (#352-354) is never used and should be removed
EnumerableSet.contains(EnumerableSet.Bytes32Set,bytes32) (#310-312) is never used and should be removed
EnumerableSet.contains(EnumerableSet.UintSet,uint256) (#346-348) is never used and should be removed
EnumerableSet.length(EnumerableSet.AddressSet) (#331-333) is never used and should be removed
EnumerableSet.length(EnumerableSet.Bytes32Set) (#313-315) is never used and should be removed
EnumerableSet.length(EnumerableSet.UintSet) (#349-351) is never used and should be removed
EnumerableSet.remove(EnumerableSet.Bytes32Set,bytes32) (#307-309) is never used and should be removed
EnumerableSet.remove(EnumerableSet.UintSet,uint256) (#343-345) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.11 (#6) 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) (#211-215):
- (success) = recipient.call{value: amount}() (#213)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (#225-230):
- (success,returndata) = target.call{value: value}(data) (#228)
Low level call in Address.functionStaticCall(address,bytes,string) (#234-238):
- (success,returndata) = target.staticcall(data) (#236)
Low level call in Address.functionDelegateCall(address,bytes,string) (#242-246):
- (success,returndata) = target.delegatecall(data) (#244)
Low level call in CupidBSC._claimBNBTo(address,address,uint256) (#565-576):
- (sent) = to.call{value: (amountWei)}() (#572)
Low level call in CupidBSC.RemoveLP() (#656-672):
- (sent) = msg.sender.call{value: (address(this).balance)}() (#670)
Low level call in CupidBSC.RecoverBNB() (#675-680):
- (sent) = msg.sender.call{value: (address(this).balance)}() (#678)
Low level call in CupidBSC.WithdrawAllDev() (#1005-1010):
- (sent) = Developer.call{value: (amount)}() (#1008)
Low level call in CupidBSC.WithdrawDev(uint256) (#1013-1018):
- (sent) = Developer.call{value: (amount)}() (#1016)
Low level call in CupidBSC.WithdrawAllMarketing() (#1021-1026):
- (sent) = MarketingWallet.call{value: (amount)}() (#1024)
Low level call in CupidBSC.WithdrawMarketing(uint256) (#1029-1034):
- (sent) = MarketingWallet.call{value: (amount)}() (#1032)
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() (#34) is not in mixedCase
Function IPancakeERC20.PERMIT_TYPEHASH() (#35) is not in mixedCase
Function IPancakeRouter01.WETH() (#134) is not in mixedCase
Event CupidBSConUpdateLPThreshold(uint16) (#701) is not in CapWords
Event CupidBSConBurnTokens(uint256) (#991) is not in CapWords
Parameter CupidBSC.allowance(address,address)._owner (#458) is not in mixedCase
Function CupidBSC.ClaimMainReward() (#552-554) is not in mixedCase
Function CupidBSC.ClaimMiscReward() (#557-561) is not in mixedCase
Function CupidBSC.ChangeMainReward(address) (#617-621) is not in mixedCase
Function CupidBSC.ChangeMiscReward(address) (#625-628) is not in mixedCase
Function CupidBSC.LockLiquidityTokens(uint256) (#637-640) is not in mixedCase
Function CupidBSC.ReleaseLP() (#648-653) is not in mixedCase
Function CupidBSC.RemoveLP() (#656-672) is not in mixedCase
Function CupidBSC.RecoverBNB() (#675-680) is not in mixedCase
Function CupidBSC.UpdateAutoLPThreshold(uint16) (#702-707) is not in mixedCase
Parameter CupidBSC.UpdateAutoLPThreshold(uint16).Threshold (#702) is not in mixedCase
Function CupidBSC.CreateLPandBNB(uint16,bool) (#710-712) is not in mixedCase
Parameter CupidBSC.CreateLPandBNB(uint16,bool).PermilleOfPancake (#710) is not in mixedCase
Function CupidBSC.ManualBNBSwap(bool) (#863-865) is not in mixedCase
Function CupidBSC.TriggerBuyBack(uint256) (#970-988) is not in mixedCase
Function CupidBSC.BurnTokens(uint256) (#992-1002) is not in mixedCase
Function CupidBSC.WithdrawAllDev() (#1005-1010) is not in mixedCase
Function CupidBSC.WithdrawDev(uint256) (#1013-1018) is not in mixedCase
Function CupidBSC.WithdrawAllMarketing() (#1021-1026) is not in mixedCase
Function CupidBSC.WithdrawMarketing(uint256) (#1029-1034) is not in mixedCase
Function CupidBSC.ExcludeFromStaking(address) (#1039-1050) is not in mixedCase
Function CupidBSC.IncludeMeToStaking() (#1053-1059) is not in mixedCase
Function CupidBSC.IncludeToStaking(address) (#1062-1069) is not in mixedCase
Function CupidBSC.SetMarketingWallet(address) (#1085-1091) is not in mixedCase
Function CupidBSC.SetDevWallet(address) (#1095-1101) is not in mixedCase
Function CupidBSC.ExcludeAccountFromFees(address) (#1105-1108) is not in mixedCase
Function CupidBSC.IncludeAccountToFees(address) (#1111-1114) is not in mixedCase
Function CupidBSC.UpdateTaxes(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8) (#1127-1145) is not in mixedCase
Function CupidBSC.UpdateRewardSplit(uint8,uint8) (#1149-1155) is not in mixedCase
Parameter CupidBSC.UpdateRewardSplit(uint8,uint8).MainSplit (#1149) is not in mixedCase
Parameter CupidBSC.UpdateRewardSplit(uint8,uint8).MiscSplit (#1149) is not in mixedCase
Function CupidBSC.UpdateLimits(uint256,uint256) (#1158-1172) is not in mixedCase
Constant CupidBSC._name (#367) is not in UPPER_CASE_WITH_UNDERSCORES
Constant CupidBSC._symbol (#368) is not in UPPER_CASE_WITH_UNDERSCORES
Constant CupidBSC._decimals (#369) is not in UPPER_CASE_WITH_UNDERSCORES
Constant CupidBSC._totalSupply (#370) is not in UPPER_CASE_WITH_UNDERSCORES
Variable CupidBSC._circulatingSupply (#371) is not in mixedCase
Constant CupidBSC.MaxWalletDivider (#372) is not in UPPER_CASE_WITH_UNDERSCORES
Constant CupidBSC.SellLimitDivider (#373) is not in UPPER_CASE_WITH_UNDERSCORES
Constant CupidBSC.MaxTax (#374) is not in UPPER_CASE_WITH_UNDERSCORES
Variable CupidBSC._MainRewardSplit (#387) is not in mixedCase
Variable CupidBSC._MiscRewardSplit (#388) is not in mixedCase
Variable CupidBSC.MaxWallet (#389) is not in mixedCase
Variable CupidBSC.MarketingWallet (#391) is not in mixedCase
Variable CupidBSC.Developer (#392) is not in mixedCase
Variable CupidBSC.BurnAddress (#393) is not in mixedCase
Constant CupidBSC.blacklistBlocks (#399) is not in UPPER_CASE_WITH_UNDERSCORES
Variable CupidBSC.MainReward (#407) is not in mixedCase
Variable CupidBSC.MiscReward (#408) is not in mixedCase
Variable CupidBSC.PancakeRouter (#412) is not in mixedCase
Constant CupidBSC.StakeMulti (#684) is not in UPPER_CASE_WITH_UNDERSCORES
Constant CupidBSC.DistributionMultiplier (#685) is not in UPPER_CASE_WITH_UNDERSCORES
Variable CupidBSC.MarketingBalance (#691) is not in mixedCase
Variable CupidBSC.DevBalance (#692) is not in mixedCase
Variable CupidBSC.BuyBackBalance (#693) is not in mixedCase
Variable CupidBSC.AutoLPThreshold (#694) is not in mixedCase
Variable CupidBSC.Staker (#797) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IPancakeRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#54) is too similar to IPancakeRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#55)
Prevent variables from having similar names.
Additional information: link
CupidBSC.slitherConstructorVariables() (#358-1212) uses literals with too many digits:
- BurnAddress = 0x000000000000000000000000000000000000dEaD (#393)
CupidBSC.slitherConstructorConstantVariables() (#358-1212) uses literals with too many digits:
- _totalSupply = 1000000000 * 10 ** _decimals (#370)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
CupidBSC.BurnAddress (#393) should be constant
CupidBSC.Staker (#797) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#195-198)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#199-203)
ClaimMainReward() should be declared external:
- CupidBSC.ClaimMainReward() (#552-554)
ClaimMiscReward() should be declared external:
- CupidBSC.ClaimMiscReward() (#557-561)
getMainBalance(address) should be declared external:
- CupidBSC.getMainBalance(address) (#604-607)
getMiscBalance(address) should be declared external:
- CupidBSC.getMiscBalance(address) (#610-613)
ChangeMainReward(address) should be declared external:
- CupidBSC.ChangeMainReward(address) (#617-621)
ChangeMiscReward(address) should be declared external:
- CupidBSC.ChangeMiscReward(address) (#625-628)
LockLiquidityTokens(uint256) should be declared external:
- CupidBSC.LockLiquidityTokens(uint256) (#637-640)
ReleaseLP() should be declared external:
- CupidBSC.ReleaseLP() (#648-653)
RemoveLP() should be declared external:
- CupidBSC.RemoveLP() (#656-672)
RecoverBNB() should be declared external:
- CupidBSC.RecoverBNB() (#675-680)
UpdateAutoLPThreshold(uint16) should be declared external:
- CupidBSC.UpdateAutoLPThreshold(uint16) (#702-707)
CreateLPandBNB(uint16,bool) should be declared external:
- CupidBSC.CreateLPandBNB(uint16,bool) (#710-712)
ManualBNBSwap(bool) should be declared external:
- CupidBSC.ManualBNBSwap(bool) (#863-865)
TriggerBuyBack(uint256) should be declared external:
- CupidBSC.TriggerBuyBack(uint256) (#970-988)
BurnTokens(uint256) should be declared external:
- CupidBSC.BurnTokens(uint256) (#992-1002)
WithdrawAllDev() should be declared external:
- CupidBSC.WithdrawAllDev() (#1005-1010)
WithdrawDev(uint256) should be declared external:
- CupidBSC.WithdrawDev(uint256) (#1013-1018)
WithdrawAllMarketing() should be declared external:
- CupidBSC.WithdrawAllMarketing() (#1021-1026)
WithdrawMarketing(uint256) should be declared external:
- CupidBSC.WithdrawMarketing(uint256) (#1029-1034)
ExcludeFromStaking(address) should be declared external:
- CupidBSC.ExcludeFromStaking(address) (#1039-1050)
IncludeMeToStaking() should be declared external:
- CupidBSC.IncludeMeToStaking() (#1053-1059)
IncludeToStaking(address) should be declared external:
- CupidBSC.IncludeToStaking(address) (#1062-1069)
setBlacklistStatus(address[],bool) should be declared external:
- CupidBSC.setBlacklistStatus(address[],bool) (#1071-1075)
enableBlacklist(bool) should be declared external:
- CupidBSC.enableBlacklist(bool) (#1078-1081)
SetMarketingWallet(address) should be declared external:
- CupidBSC.SetMarketingWallet(address) (#1085-1091)
SetDevWallet(address) should be declared external:
- CupidBSC.SetDevWallet(address) (#1095-1101)
ExcludeAccountFromFees(address) should be declared external:
- CupidBSC.ExcludeAccountFromFees(address) (#1105-1108)
IncludeAccountToFees(address) should be declared external:
- CupidBSC.IncludeAccountToFees(address) (#1111-1114)
setPresale(address) should be declared external:
- CupidBSC.setPresale(address) (#1116-1119)
UpdateTaxes(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8) should be declared external:
- CupidBSC.UpdateTaxes(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8) (#1127-1145)
UpdateRewardSplit(uint8,uint8) should be declared external:
- CupidBSC.UpdateRewardSplit(uint8,uint8) (#1149-1155)
UpdateLimits(uint256,uint256) should be declared external:
- CupidBSC.UpdateLimits(uint256,uint256) (#1158-1172)
getLimits() should be declared external:
- CupidBSC.getLimits() (#1195-1197)
getLiquidityUnlockInSeconds() should be declared external:
- CupidBSC.getLiquidityUnlockInSeconds() (#1199-1204)
getTaxes() should be declared external:
- CupidBSC.getTaxes() (#1206-1208)
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 Twitter account
Telegram account has relatively few subscribers
Unable to find Blog account (Reddit or Medium)
Unable to find Youtube account
Unable to find Discord account