Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
WENCHI._claimBNBTo(address,address,uint256) (#571-582) sends eth to arbitrary user
Dangerous calls:
- (sent) = to.call{value: (amountWei)}() (#578)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in WENCHI._claimBNBTo(address,address,uint256) (#571-582):
External calls:
- (sent) = to.call{value: (amountWei)}() (#578)
State variables written after the call(s):
- _isWithdrawing = false (#580)
Reentrancy in WENCHI._taxedTransfer(address,address,uint256,bool,bool) (#883-930):
External calls:
- claimToken(recipient,MainReward,0) (#904)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#547-551)
- _swapContractToken(AutoLPThreshold,false) (#921)
- _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)}() (#578)
External calls sending eth:
- claimToken(recipient,MainReward,0) (#904)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#547-551)
- _swapContractToken(AutoLPThreshold,false) (#921)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- (sent) = to.call{value: (amountWei)}() (#578)
State variables written after the call(s):
- _removeToken(sender,amount) (#925)
- _balances[addr] = newAmount (#739)
- _balances[addr] = newAmount (#745)
- _addToken(address(this),contractToken) (#926)
- _balances[addr] = newAmount (#721)
- _balances[addr] = newAmount (#727)
- _balances[addr] = newAmount (#732)
- _addToken(recipient,taxedAmount) (#928)
- _balances[addr] = newAmount (#721)
- _balances[addr] = newAmount (#727)
- _balances[addr] = newAmount (#732)
- _swapContractToken(AutoLPThreshold,false) (#921)
- _isWithdrawing = true (#574)
- _isWithdrawing = false (#580)
- _removeToken(sender,amount) (#925)
- _totalShares -= amount (#742)
- _addToken(address(this),contractToken) (#926)
- _totalShares += amount (#724)
- _addToken(recipient,taxedAmount) (#928)
- _totalShares += amount (#724)
- _removeToken(sender,amount) (#925)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#746)
- _addToken(address(this),contractToken) (#926)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#728)
- _addToken(recipient,taxedAmount) (#928)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#728)
- _swapContractToken(AutoLPThreshold,false) (#921)
- alreadyPaidMisc[addr] = miscRewardShare * _balances[addr] (#593)
- _removeToken(sender,amount) (#925)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#748)
- _addToken(address(this),contractToken) (#926)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#730)
- _addToken(recipient,taxedAmount) (#928)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#730)
- _swapContractToken(AutoLPThreshold,false) (#921)
- mainRewardShare += ((MainAmount * DistributionMultiplier) / totalShares) (#783)
- _swapContractToken(AutoLPThreshold,false) (#921)
- miscRewardShare += ((MiscAmount * DistributionMultiplier) / totalShares) (#784)
- _removeToken(sender,amount) (#925)
- toBePaidMain[addr] += mainPayment (#747)
- _addToken(address(this),contractToken) (#926)
- toBePaidMain[addr] += mainPayment (#729)
- _addToken(recipient,taxedAmount) (#928)
- toBePaidMain[addr] += mainPayment (#729)
- _swapContractToken(AutoLPThreshold,false) (#921)
- toBePaidMisc[addr] -= amount (#589)
- toBePaidMisc[addr] += newAmount (#594)
- toBePaidMisc[addr] -= amount (#595)
- _removeToken(sender,amount) (#925)
- toBePaidMisc[addr] += miscPayment (#749)
- _addToken(address(this),contractToken) (#926)
- toBePaidMisc[addr] += miscPayment (#731)
- _addToken(recipient,taxedAmount) (#928)
- toBePaidMisc[addr] += miscPayment (#731)
- _swapContractToken(AutoLPThreshold,false) (#921)
- totalPayouts += amountWei (#577)
Reentrancy in WENCHI.claimToken(address,address,uint256) (#510-555):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#547-551)
State variables written after the call(s):
- _isWithdrawing = false (#554)
Apply the check-effects-interactions pattern.
Additional information: link
WENCHI.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
WENCHI._subtractDividents(address,uint256) (#584-597) uses a dangerous strict equality:
- amount == 0 (#585)
WENCHI.claimToken(address,address,uint256) (#510-555) uses a dangerous strict equality:
- amount == 0 && payableAmount == 0 (#536)
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.
Pragma version^0.8.11 (#15) 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
WENCHI._lockLiquidityTokens(uint256) (#636-640) uses timestamp for comparisons
Dangerous comparisons:
- require(bool)(newUnlockTime > _liquidityUnlockTime) (#638)
WENCHI.ReleaseLP() (#643-648) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= _liquidityUnlockTime,Not yet unlocked) (#644)
WENCHI.RemoveLP() (#651-667) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= _liquidityUnlockTime,Not yet unlocked) (#652)
WENCHI.RecoverBNB() (#670-675) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= _liquidityUnlockTime,Not yet unlocked) (#671)
WENCHI.getLiquidityUnlockInSeconds() (#1193-1198) uses timestamp for comparisons
Dangerous comparisons:
- block.timestamp < _liquidityUnlockTime (#1194)
Avoid relying on block.timestamp.
Additional information: link
WENCHI._distributeStake(uint256,bool) (#764-788) performs a multiplication on the result of a division:
-StakingSplit = (BNBamount * _stakingTax) / totalRatio (#769)
-MainAmount = (StakingSplit * _MainRewardSplit) / 100 (#770)
WENCHI._distributeStake(uint256,bool) (#764-788) performs a multiplication on the result of a division:
-StakingSplit = (BNBamount * _stakingTax) / totalRatio (#769)
-MiscAmount = (StakingSplit * _MiscRewardSplit) / 100 (#771)
WENCHI._distributeStake(uint256,bool) (#764-788) performs a multiplication on the result of a division:
-MainAmount = (StakingSplit * _MainRewardSplit) / 100 (#770)
-mainRewardShare += ((MainAmount * DistributionMultiplier) / totalShares) (#783)
WENCHI._distributeStake(uint256,bool) (#764-788) performs a multiplication on the result of a division:
-MiscAmount = (StakingSplit * _MiscRewardSplit) / 100 (#771)
-miscRewardShare += ((MiscAmount * DistributionMultiplier) / totalShares) (#784)
WENCHI._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
WENCHI.constructor() (#432-463) ignores return value by _excluded.add(msg.sender) (#453)
WENCHI.constructor() (#432-463) ignores return value by _excluded.add(MarketingWallet) (#454)
WENCHI.constructor() (#432-463) ignores return value by _excluded.add(Developer) (#455)
WENCHI.constructor() (#432-463) ignores return value by _excluded.add(address(this)) (#456)
WENCHI.constructor() (#432-463) ignores return value by _excluded.add(BurnAddress) (#457)
WENCHI.constructor() (#432-463) ignores return value by _excludedFromStaking.add(address(this)) (#458)
WENCHI.constructor() (#432-463) ignores return value by _excludedFromStaking.add(BurnAddress) (#459)
WENCHI.constructor() (#432-463) ignores return value by _excludedFromStaking.add(address(_pancakeRouter)) (#460)
WENCHI.constructor() (#432-463) ignores return value by _excludedFromStaking.add(_pancakePairAddress) (#461)
WENCHI.RemoveLP() (#651-667) ignores return value by liquidityToken.approve(address(_pancakeRouter),amount) (#656)
WENCHI.RemoveLP() (#651-667) ignores return value by _pancakeRouter.removeLiquidityETHSupportingFeeOnTransferTokens(address(this),amount,0,0,address(this),block.timestamp) (#657-664)
WENCHI._addLiquidity(uint256,uint256) (#843-854) ignores return value by _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
WENCHI.ExcludeFromStaking(address) (#1029-1040) ignores return value by _excludedFromStaking.add(addr) (#1038)
WENCHI.IncludeMeToStaking() (#1043-1049) ignores return value by _excludedFromStaking.remove(msg.sender) (#1046)
WENCHI.IncludeToStaking(address) (#1052-1059) ignores return value by _excludedFromStaking.remove(addr) (#1055)
WENCHI.SetMarketingWallet(address) (#1075-1081) ignores return value by _excluded.remove(prevMarketing) (#1077)
WENCHI.SetMarketingWallet(address) (#1075-1081) ignores return value by _excluded.add(MarketingWallet) (#1079)
WENCHI.SetDevWallet(address) (#1085-1091) ignores return value by _excluded.remove(prevDev) (#1087)
WENCHI.SetDevWallet(address) (#1085-1091) ignores return value by _excluded.add(Developer) (#1089)
WENCHI.ExcludeAccountFromFees(address) (#1095-1098) ignores return value by _excluded.add(account) (#1096)
WENCHI.IncludeAccountToFees(address) (#1101-1104) ignores return value by _excluded.remove(account) (#1102)
WENCHI.setPresale(address) (#1106-1109) ignores return value by _excluded.add(presaleAddress) (#1107)
WENCHI.setPresale(address) (#1106-1109) ignores return value by _excludedFromStaking.add(presaleAddress) (#1108)
Ensure that all the return values of the function calls are used.
Additional information: link
WENCHI.allowance(address,address)._owner (#464) shadows:
- Ownable._owner (#190) (state variable)
WENCHI._approve(address,address,uint256).owner (#471) shadows:
- Ownable.owner() (#197-199) (function)
Rename the local variables that shadow another component.
Additional information: link
WENCHI.TriggerBuyBack(uint256) (#974-987) should emit an event for:
- BuyBackBalance -= weiAmount (#976)
WENCHI.WithdrawDev(uint256) (#1003-1008) should emit an event for:
- DevBalance -= amount (#1005)
WENCHI.WithdrawMarketing(uint256) (#1019-1024) should emit an event for:
- MarketingBalance -= amount (#1021)
Emit an event for critical parameter changes.
Additional information: link
WENCHI.ChangeMiscReward(address).newReward (#620) lacks a zero-check on :
- MiscReward = newReward (#621)
WENCHI.SetMarketingWallet(address).addr (#1075) lacks a zero-check on :
- MarketingWallet = addr (#1078)
WENCHI.SetDevWallet(address).addr (#1085) lacks a zero-check on :
- Developer = addr (#1088)
Check that the address is not zero.
Additional information: link
Reentrancy in WENCHI._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 (#475)
- _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 WENCHI._taxedTransfer(address,address,uint256,bool,bool) (#883-930):
External calls:
- claimToken(recipient,MainReward,0) (#904)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#547-551)
- _swapContractToken(AutoLPThreshold,false) (#921)
- _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)}() (#578)
External calls sending eth:
- claimToken(recipient,MainReward,0) (#904)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#547-551)
- _swapContractToken(AutoLPThreshold,false) (#921)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- (sent) = to.call{value: (amountWei)}() (#578)
State variables written after the call(s):
- _swapContractToken(AutoLPThreshold,false) (#921)
- _allowances[owner][spender] = amount (#475)
- _circulatingSupply -= tokensToBeBurnt (#927)
Reentrancy in WENCHI.constructor() (#432-463):
External calls:
- _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this),_pancakeRouter.WETH()) (#441)
State variables written after the call(s):
- Developer = msg.sender (#448)
- MarketingWallet = msg.sender (#447)
- MaxWallet = _totalSupply / MaxWalletDivider (#451)
- _allowances[address(this)][address(_pancakeRouter)] = type()(uint256).max (#444)
- _approve(address(this),address(_pancakeRouter),type()(uint256).max) (#462)
- _allowances[owner][spender] = amount (#475)
- _addToken(msg.sender,_totalSupply) (#442)
- _balances[addr] = newAmount (#721)
- _balances[addr] = newAmount (#727)
- _balances[addr] = newAmount (#732)
- _addToken(msg.sender,_totalSupply) (#442)
- _totalShares += amount (#724)
- _addToken(msg.sender,_totalSupply) (#442)
- alreadyPaidMain[addr] = mainRewardShare * newAmount (#728)
- _addToken(msg.sender,_totalSupply) (#442)
- alreadyPaidMisc[addr] = miscRewardShare * newAmount (#730)
- sellLimit = _totalSupply / SellLimitDivider (#450)
- _addToken(msg.sender,_totalSupply) (#442)
- toBePaidMain[addr] += mainPayment (#729)
- _addToken(msg.sender,_totalSupply) (#442)
- toBePaidMisc[addr] += miscPayment (#731)
Reentrancy in WENCHI.transferFrom(address,address,uint256) (#496-504):
External calls:
- _transfer(sender,recipient,amount) (#497)
- _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)}() (#578)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#547-551)
External calls sending eth:
- _transfer(sender,recipient,amount) (#497)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- (sent) = to.call{value: (amountWei)}() (#578)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#547-551)
State variables written after the call(s):
- _approve(sender,msg.sender,currentAllowance - amount) (#502)
- _allowances[owner][spender] = amount (#475)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in WENCHI._claimBNBTo(address,address,uint256) (#571-582):
External calls:
- (sent) = to.call{value: (amountWei)}() (#578)
Event emitted after the call(s):
- OnClaimBNB(from,to,amountWei) (#581)
Reentrancy in WENCHI._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) (#476)
- _addLiquidity(liqToken,liqBNB) (#823)
Reentrancy in WENCHI._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)}() (#578)
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)}() (#578)
Event emitted after the call(s):
- OnClaimBNB(from,to,amountWei) (#581)
- _claimBNBTo(distribute,distribute,newLiq) (#826)
Reentrancy in WENCHI._taxedTransfer(address,address,uint256,bool,bool) (#883-930):
External calls:
- claimToken(recipient,MainReward,0) (#904)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#547-551)
- _swapContractToken(AutoLPThreshold,false) (#921)
- _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)}() (#578)
External calls sending eth:
- claimToken(recipient,MainReward,0) (#904)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#547-551)
- _swapContractToken(AutoLPThreshold,false) (#921)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- (sent) = to.call{value: (amountWei)}() (#578)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#476)
- _swapContractToken(AutoLPThreshold,false) (#921)
- OnClaimBNB(from,to,amountWei) (#581)
- _swapContractToken(AutoLPThreshold,false) (#921)
- Transfer(sender,recipient,taxedAmount) (#929)
Reentrancy in WENCHI.claimToken(address,address,uint256) (#510-555):
External calls:
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#547-551)
Event emitted after the call(s):
- OnWithdrawToken(amount,token,addr) (#553)
Reentrancy in WENCHI.constructor() (#432-463):
External calls:
- _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this),_pancakeRouter.WETH()) (#441)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#476)
- _approve(address(this),address(_pancakeRouter),type()(uint256).max) (#462)
- Transfer(address(0),msg.sender,_totalSupply) (#443)
Reentrancy in WENCHI.transferFrom(address,address,uint256) (#496-504):
External calls:
- _transfer(sender,recipient,amount) (#497)
- _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)}() (#578)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#547-551)
External calls sending eth:
- _transfer(sender,recipient,amount) (#497)
- _pancakeRouter.addLiquidityETH{value: bnbamount}(address(this),tokenamount,0,0,address(this),block.timestamp) (#846-853)
- (sent) = to.call{value: (amountWei)}() (#578)
- _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,addr,block.timestamp) (#547-551)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#476)
- _approve(sender,msg.sender,currentAllowance - amount) (#502)
Apply the check-effects-interactions pattern.
Additional information: link
Address.isContract(address) (#215-219) uses assembly
- INLINE ASM (#217)
Address._verifyCallResult(bool,bytes,string) (#256-269) uses assembly
- INLINE ASM (#261-264)
Do not use evm assembly.
Additional information: link
Address._verifyCallResult(bool,bytes,string) (#256-269) is never used and should be removed
Address.functionCall(address,bytes) (#225-227) is never used and should be removed
Address.functionCall(address,bytes,string) (#228-230) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#231-233) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#234-239) is never used and should be removed
Address.functionDelegateCall(address,bytes) (#248-250) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (#251-255) is never used and should be removed
Address.functionStaticCall(address,bytes) (#240-242) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (#243-247) is never used and should be removed
Address.isContract(address) (#215-219) is never used and should be removed
Address.sendValue(address,uint256) (#220-224) is never used and should be removed
EnumerableSet._at(EnumerableSet.Set,uint256) (#306-309) is never used and should be removed
EnumerableSet._length(EnumerableSet.Set) (#303-305) is never used and should be removed
EnumerableSet.add(EnumerableSet.Bytes32Set,bytes32) (#313-315) is never used and should be removed
EnumerableSet.add(EnumerableSet.UintSet,uint256) (#349-351) is never used and should be removed
EnumerableSet.at(EnumerableSet.AddressSet,uint256) (#343-345) is never used and should be removed
EnumerableSet.at(EnumerableSet.Bytes32Set,uint256) (#325-327) is never used and should be removed
EnumerableSet.at(EnumerableSet.UintSet,uint256) (#361-363) is never used and should be removed
EnumerableSet.contains(EnumerableSet.Bytes32Set,bytes32) (#319-321) is never used and should be removed
EnumerableSet.contains(EnumerableSet.UintSet,uint256) (#355-357) is never used and should be removed
EnumerableSet.length(EnumerableSet.AddressSet) (#340-342) is never used and should be removed
EnumerableSet.length(EnumerableSet.Bytes32Set) (#322-324) is never used and should be removed
EnumerableSet.length(EnumerableSet.UintSet) (#358-360) is never used and should be removed
EnumerableSet.remove(EnumerableSet.Bytes32Set,bytes32) (#316-318) is never used and should be removed
EnumerableSet.remove(EnumerableSet.UintSet,uint256) (#352-354) is never used and should be removed
Remove unused functions.
Additional information: link
Low level call in Address.sendValue(address,uint256) (#220-224):
- (success) = recipient.call{value: amount}() (#222)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (#234-239):
- (success,returndata) = target.call{value: value}(data) (#237)
Low level call in Address.functionStaticCall(address,bytes,string) (#243-247):
- (success,returndata) = target.staticcall(data) (#245)
Low level call in Address.functionDelegateCall(address,bytes,string) (#251-255):
- (success,returndata) = target.delegatecall(data) (#253)
Low level call in WENCHI._claimBNBTo(address,address,uint256) (#571-582):
- (sent) = to.call{value: (amountWei)}() (#578)
Low level call in WENCHI.RemoveLP() (#651-667):
- (sent) = msg.sender.call{value: (address(this).balance)}() (#665)
Low level call in WENCHI.RecoverBNB() (#670-675):
- (sent) = msg.sender.call{value: (address(this).balance)}() (#673)
Low level call in WENCHI.WithdrawAllDev() (#995-1000):
- (sent) = Developer.call{value: (amount)}() (#998)
Low level call in WENCHI.WithdrawDev(uint256) (#1003-1008):
- (sent) = Developer.call{value: (amount)}() (#1006)
Low level call in WENCHI.MoonShoot() (#1011-1016):
- (sent) = MarketingWallet.call{value: (amount)}() (#1014)
Low level call in WENCHI.WithdrawMarketing(uint256) (#1019-1024):
- (sent) = MarketingWallet.call{value: (amount)}() (#1022)
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() (#43) is not in mixedCase
Function IPancakeERC20.PERMIT_TYPEHASH() (#44) is not in mixedCase
Function IPancakeRouter01.WETH() (#143) is not in mixedCase
Event WENCHIonUpdateLPThreshold(uint16) (#696) is not in CapWords
Parameter WENCHI.allowance(address,address)._owner (#464) is not in mixedCase
Function WENCHI.ClaimMainReward() (#558-560) is not in mixedCase
Function WENCHI.ClaimMiscReward() (#563-567) is not in mixedCase
Function WENCHI.ChangeMainReward(address) (#612-616) is not in mixedCase
Function WENCHI.ChangeMiscReward(address) (#620-623) is not in mixedCase
Function WENCHI.LockLiquidityTokens(uint256) (#632-635) is not in mixedCase
Function WENCHI.ReleaseLP() (#643-648) is not in mixedCase
Function WENCHI.RemoveLP() (#651-667) is not in mixedCase
Function WENCHI.RecoverBNB() (#670-675) is not in mixedCase
Function WENCHI.UpdateAutoLPThreshold(uint16) (#697-702) is not in mixedCase
Parameter WENCHI.UpdateAutoLPThreshold(uint16).Threshold (#697) is not in mixedCase
Function WENCHI.CreateLPandBNB(uint16,bool) (#705-707) is not in mixedCase
Parameter WENCHI.CreateLPandBNB(uint16,bool).PermilleOfPancake (#705) is not in mixedCase
Function WENCHI.ManualBNBSwap(bool) (#858-860) is not in mixedCase
Function WENCHI.TriggerBuyBack(uint256) (#974-987) is not in mixedCase
Function WENCHI.BurnTokens(uint256) (#990-992) is not in mixedCase
Function WENCHI.WithdrawAllDev() (#995-1000) is not in mixedCase
Function WENCHI.WithdrawDev(uint256) (#1003-1008) is not in mixedCase
Function WENCHI.MoonShoot() (#1011-1016) is not in mixedCase
Function WENCHI.WithdrawMarketing(uint256) (#1019-1024) is not in mixedCase
Function WENCHI.ExcludeFromStaking(address) (#1029-1040) is not in mixedCase
Function WENCHI.IncludeMeToStaking() (#1043-1049) is not in mixedCase
Function WENCHI.IncludeToStaking(address) (#1052-1059) is not in mixedCase
Function WENCHI.SetStatus(address[],bool) (#1061-1065) is not in mixedCase
Function WENCHI.SetMarketingWallet(address) (#1075-1081) is not in mixedCase
Function WENCHI.SetDevWallet(address) (#1085-1091) is not in mixedCase
Function WENCHI.ExcludeAccountFromFees(address) (#1095-1098) is not in mixedCase
Function WENCHI.IncludeAccountToFees(address) (#1101-1104) is not in mixedCase
Function WENCHI.UpdateTaxes(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8) (#1117-1135) is not in mixedCase
Function WENCHI.UpdateRewardSplit(uint8,uint8) (#1139-1145) is not in mixedCase
Parameter WENCHI.UpdateRewardSplit(uint8,uint8).MainSplit (#1139) is not in mixedCase
Parameter WENCHI.UpdateRewardSplit(uint8,uint8).MiscSplit (#1139) is not in mixedCase
Function WENCHI.UpdateLimits(uint256,uint256) (#1148-1162) is not in mixedCase
Constant WENCHI._name (#376) is not in UPPER_CASE_WITH_UNDERSCORES
Constant WENCHI._symbol (#377) is not in UPPER_CASE_WITH_UNDERSCORES
Constant WENCHI._decimals (#378) is not in UPPER_CASE_WITH_UNDERSCORES
Constant WENCHI._totalSupply (#379) is not in UPPER_CASE_WITH_UNDERSCORES
Variable WENCHI._circulatingSupply (#380) is not in mixedCase
Constant WENCHI.MaxWalletDivider (#381) is not in UPPER_CASE_WITH_UNDERSCORES
Constant WENCHI.SellLimitDivider (#382) is not in UPPER_CASE_WITH_UNDERSCORES
Constant WENCHI.MaxTax (#383) is not in UPPER_CASE_WITH_UNDERSCORES
Variable WENCHI._MainRewardSplit (#396) is not in mixedCase
Variable WENCHI._MiscRewardSplit (#397) is not in mixedCase
Variable WENCHI.MaxWallet (#398) is not in mixedCase
Variable WENCHI.MarketingWallet (#400) is not in mixedCase
Variable WENCHI.Developer (#401) is not in mixedCase
Variable WENCHI.BurnAddress (#402) is not in mixedCase
Constant WENCHI.blacklistBlocks (#407) is not in UPPER_CASE_WITH_UNDERSCORES
Variable WENCHI.MainReward (#415) is not in mixedCase
Variable WENCHI.MiscReward (#416) is not in mixedCase
Variable WENCHI._pancakePairAddress (#418) is not in mixedCase
Variable WENCHI.PancakeRouter (#420) is not in mixedCase
Constant WENCHI.StakeMulti (#679) is not in UPPER_CASE_WITH_UNDERSCORES
Constant WENCHI.DistributionMultiplier (#680) is not in UPPER_CASE_WITH_UNDERSCORES
Variable WENCHI.MarketingBalance (#686) is not in mixedCase
Variable WENCHI.DevBalance (#687) is not in mixedCase
Variable WENCHI.BuyBackBalance (#688) is not in mixedCase
Variable WENCHI.AutoLPThreshold (#689) is not in mixedCase
Variable WENCHI.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 (#63) is too similar to IPancakeRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#64)
Prevent variables from having similar names.
Additional information: link
WENCHI.slitherConstructorVariables() (#367-1206) uses literals with too many digits:
- BurnAddress = 0x000000000000000000000000000000000000dEaD (#402)
WENCHI.slitherConstructorConstantVariables() (#367-1206) uses literals with too many digits:
- _totalSupply = 1000000000 * 10 ** _decimals (#379)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
WENCHI.BurnAddress (#402) should be constant
WENCHI.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() (#204-207)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#208-212)
ClaimMainReward() should be declared external:
- WENCHI.ClaimMainReward() (#558-560)
ClaimMiscReward() should be declared external:
- WENCHI.ClaimMiscReward() (#563-567)
ChangeMainReward(address) should be declared external:
- WENCHI.ChangeMainReward(address) (#612-616)
ChangeMiscReward(address) should be declared external:
- WENCHI.ChangeMiscReward(address) (#620-623)
LockLiquidityTokens(uint256) should be declared external:
- WENCHI.LockLiquidityTokens(uint256) (#632-635)
ReleaseLP() should be declared external:
- WENCHI.ReleaseLP() (#643-648)
RemoveLP() should be declared external:
- WENCHI.RemoveLP() (#651-667)
RecoverBNB() should be declared external:
- WENCHI.RecoverBNB() (#670-675)
UpdateAutoLPThreshold(uint16) should be declared external:
- WENCHI.UpdateAutoLPThreshold(uint16) (#697-702)
CreateLPandBNB(uint16,bool) should be declared external:
- WENCHI.CreateLPandBNB(uint16,bool) (#705-707)
ManualBNBSwap(bool) should be declared external:
- WENCHI.ManualBNBSwap(bool) (#858-860)
TriggerBuyBack(uint256) should be declared external:
- WENCHI.TriggerBuyBack(uint256) (#974-987)
BurnTokens(uint256) should be declared external:
- WENCHI.BurnTokens(uint256) (#990-992)
WithdrawAllDev() should be declared external:
- WENCHI.WithdrawAllDev() (#995-1000)
WithdrawDev(uint256) should be declared external:
- WENCHI.WithdrawDev(uint256) (#1003-1008)
MoonShoot() should be declared external:
- WENCHI.MoonShoot() (#1011-1016)
WithdrawMarketing(uint256) should be declared external:
- WENCHI.WithdrawMarketing(uint256) (#1019-1024)
ExcludeFromStaking(address) should be declared external:
- WENCHI.ExcludeFromStaking(address) (#1029-1040)
IncludeMeToStaking() should be declared external:
- WENCHI.IncludeMeToStaking() (#1043-1049)
IncludeToStaking(address) should be declared external:
- WENCHI.IncludeToStaking(address) (#1052-1059)
SetStatus(address[],bool) should be declared external:
- WENCHI.SetStatus(address[],bool) (#1061-1065)
enableBlacklist(bool) should be declared external:
- WENCHI.enableBlacklist(bool) (#1068-1071)
SetMarketingWallet(address) should be declared external:
- WENCHI.SetMarketingWallet(address) (#1075-1081)
SetDevWallet(address) should be declared external:
- WENCHI.SetDevWallet(address) (#1085-1091)
ExcludeAccountFromFees(address) should be declared external:
- WENCHI.ExcludeAccountFromFees(address) (#1095-1098)
IncludeAccountToFees(address) should be declared external:
- WENCHI.IncludeAccountToFees(address) (#1101-1104)
setPresale(address) should be declared external:
- WENCHI.setPresale(address) (#1106-1109)
UpdateTaxes(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8) should be declared external:
- WENCHI.UpdateTaxes(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8) (#1117-1135)
UpdateRewardSplit(uint8,uint8) should be declared external:
- WENCHI.UpdateRewardSplit(uint8,uint8) (#1139-1145)
UpdateLimits(uint256,uint256) should be declared external:
- WENCHI.UpdateLimits(uint256,uint256) (#1148-1162)
getBurntTokens() should be declared external:
- WENCHI.getBurntTokens() (#1185-1187)
getLimits() should be declared external:
- WENCHI.getLimits() (#1189-1191)
getLiquidityUnlockInSeconds() should be declared external:
- WENCHI.getLiquidityUnlockInSeconds() (#1193-1198)
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