The Shinzo Token is a Binance Smart Chain BEP-20 token that give users a stable source of passive income in good and bad times.
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
ShinzoTokenBase.executeSwap(uint256) (#633-670) sends eth to arbitrary user
Dangerous calls:
- (bnbAddedToLiquidity) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this),tokensToAddAsLiquidity,0,0,_autoLiquidityWallet,block.timestamp + 360) (#651)
ShinzoTokenBase.swapBNBForTokens(uint256,address) (#704-718) sends eth to arbitrary user
Dangerous calls:
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
ShinzoTokenBase.swapBNBForCustomeTokens(address,uint256,address) (#720-734) sends eth to arbitrary user
Dangerous calls:
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
ShinzoToken.checkNow() (#1626-1633) uses a weak PRNG: "currentDay = (currentYear % 2629743) / 86400 + 1 (#1630)"
ShinzoToken.checkNow() (#1626-1633) uses a weak PRNG: "currentYear = currentTime % 31556926 (#1628)"
Do not use block.timestamp, now or blockhash as a source of randomness
Additional information: link
Reentrancy in ShinzoTokenBase.doTransfer(address,address,uint256) (#531-565):
External calls:
- pinkAntiBot.onPreTransferCheck(sender,recipient,amount) (#535)
- executeSwapIfNeeded(sender,recipient) (#546)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
- _pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp + 360) (#683)
- (bnbAddedToLiquidity) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this),tokensToAddAsLiquidity,0,0,_autoLiquidityWallet,block.timestamp + 360) (#651)
External calls sending eth:
- executeSwapIfNeeded(sender,recipient) (#546)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
- (bnbAddedToLiquidity) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this),tokensToAddAsLiquidity,0,0,_autoLiquidityWallet,block.timestamp + 360) (#651)
State variables written after the call(s):
- updateBalances(sender,recipient,amount,feeAmount) (#557)
- _balances[sender] -= sentAmount (#577)
- _balances[recipient] += receivedAmount (#578)
- _balances[address(this)] += feeAmount (#581)
Reentrancy in ShinzoToken.processRewardClaimQueue(uint256) (#1210-1248):
External calls:
- doClaimReward(user) (#1232)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
- (sent) = user.call{gas: _sendWeiGasLimit,value: bnbAmount}() (#1174)
- (sent) = user.call{value: bnbAmount}() (#1179)
State variables written after the call(s):
- _rewardClaimQueueIndex ++ (#1244)
Apply the check-effects-interactions pattern.
Additional information: link
ShinzoToken._totalBNBLiquidityAddedFromFees (#960) shadows:
- ShinzoTokenBase._totalBNBLiquidityAddedFromFees (#426)
Remove the state variable shadowing.
Additional information: link
ShinzoToken.onBeforeTransfer(address,address,uint256) (#1023-1063) ignores return value by token.transferFrom(_yearWallet,address(this),walletBalance) (#1050)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Too many vulnerabilities (Unchecked transfer, Reentrancy vulnerability, etc.). High risk of a scam. DYOR & manual audit are advised.
Contract ownership is not renounced (belongs to a wallet)
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.
ShinzoToken.claimBNB(address,uint256) (#1167-1189) uses a dangerous strict equality:
- bnbAmount == 0 (#1168)
ShinzoToken.claimRewardToken(address,uint256) (#1192-1204) uses a dangerous strict equality:
- bnbAmount == 0 (#1193)
ShinzoToken.doBuyAndBurn(uint256) (#1383-1397) uses a dangerous strict equality:
- bnbAmount == 0 (#1388)
ShinzoToken.onBeforeTransfer(address,address,uint256) (#1023-1063) uses a dangerous strict equality:
- month == 12 && day == 22 (#1046)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
ShinzoTokenBase.setFees(uint8,uint8,uint8,uint8) (#798-812) contains a tautology or contradiction:
- require(bool,string)(rewardFee >= 0 && rewardFee <= 15,Reward fee must be between 0% and 15%) (#800)
ShinzoTokenBase.setFees(uint8,uint8,uint8,uint8) (#798-812) contains a tautology or contradiction:
- require(bool,string)(buybackFee >= 0 && buybackFee <= 5,Buyback fee must be between 0% and 5%) (#801)
ShinzoTokenBase.setFees(uint8,uint8,uint8,uint8) (#798-812) contains a tautology or contradiction:
- require(bool,string)(marketingFee >= 0 && marketingFee <= 5,Marketing fee must be between 0% and 5%) (#802)
ShinzoTokenBase.setFees(uint8,uint8,uint8,uint8) (#798-812) contains a tautology or contradiction:
- require(bool,string)(liquidityFee >= 0 && liquidityFee <= 8,Liquidity fee must be between 0% and 8%) (#799)
Fix the incorrect comparison by changing the value type or the comparison.
Additional information: link
ShinzoToken.claimBNB(address,uint256).sent_scope_0 (#1179) is a local variable never initialized
Initialize all the variables. If a variable is meant to be initialized to zero, explicitly set it to zero to improve code readability.
Additional information: link
Variable 'ShinzoToken.claimBNB(address,uint256).sent (#1174)' in ShinzoToken.claimBNB(address,uint256) (#1167-1189) potentially used before declaration: (sent) = user.call{value: bnbAmount}() (#1179)
Move all variable declarations prior to any usage of the variable, and ensure that reaching a variable declaration does not depend on some conditional if it is used unconditionally.
Additional information: link
ShinzoToken._totalBNBLiquidityAddedFromFees (#960) is never used in ShinzoToken (#953-1644)
Remove unused state variables.
Additional information: link
ShinzoToken._totalBNBLiquidityAddedFromFees (#960) should be constant
ShinzoTokenBase._ownerWallet (#434) should be constant
ShinzoTokenBase._yearWallet (#435) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
ShinzoTokenBase.executeSwap(uint256) (#633-670) performs a multiplication on the result of a division:
-tokensToSwapForLiquidity = tokensReservedForLiquidity / 2 (#643)
-bnbToBeAddedToLiquidity = bnbSwapped * tokensToSwapForLiquidity / tokensToSwap (#650)
ShinzoTokenBase.executeSwap(uint256) (#633-670) performs a multiplication on the result of a division:
-tokensReservedForMarketing = amount * _marketingFee / _poolFee (#639)
-bnbToBeSendToMarketing = bnbSwapped * tokensReservedForMarketing / tokensToSwap (#657)
ShinzoTokenBase.executeSwap(uint256) (#633-670) performs a multiplication on the result of a division:
-tokensReservedForBuyback = amount * _buybackFee / _poolFee (#638)
-bnbToBeBuybackAndBurn = bnbSwapped * tokensReservedForBuyback / tokensToSwap (#663)
ShinzoToken.calculateRewardCycleExtension(uint256,uint256) (#1281-1308) performs a multiplication on the result of a division:
-rate = amount * 100 / balance (#1291)
-extension = basePeriod * rate / 100 (#1297)
ShinzoToken.calculateBNBReward(address) (#1330-1349) performs a multiplication on the result of a division:
-bnbPool = address(this).balance * (100 - _globalRewardDampeningPercentage) / 100 (#1334)
-reward = bnbPool * balance / holdersAmount (#1342)
Consider ordering multiplication before division.
Additional information: link
ShinzoTokenBase.constructor(address,address,address).owner (#456) shadows:
- Ownable.owner() (#151-153) (function)
ShinzoTokenBase.doApprove(address,address,uint256).owner (#589) shadows:
- Ownable.owner() (#151-153) (function)
ShinzoToken.constructor(address,address,address)._owner (#998) shadows:
- Ownable._owner (#135) (state variable)
Rename the local variables that shadow another component.
Additional information: link
ShinzoToken.setRewardCyclePeriod(uint256) (#1438-1441) should emit an event for:
- _rewardCyclePeriod = period (#1440)
ShinzoToken.setRewardCycleExtensionThreshold(uint256) (#1443-1445) should emit an event for:
- _rewardCycleExtensionThreshold = threshold (#1444)
ShinzoToken.setMaxClaimAllowed(uint256) (#1458-1461) should emit an event for:
- _maxClaimAllowed = value (#1460)
ShinzoToken.setMinRewardBalance(uint256) (#1469-1471) should emit an event for:
- _minRewardBalance = balance (#1470)
ShinzoToken.setMaxGasForAutoClaim(uint256) (#1479-1481) should emit an event for:
- _maxGasForAutoClaim = gas (#1480)
ShinzoToken.setGlobalRewardDampeningPercentage(uint256) (#1511-1514) should emit an event for:
- _globalRewardDampeningPercentage = value (#1513)
ShinzoToken.setGradualBurnMagnitude(uint256) (#1543-1546) should emit an event for:
- _gradualBurnMagnitude = magnitude (#1545)
ShinzoToken.setGradualBurnTimespan(uint256) (#1554-1557) should emit an event for:
- _gradualBurnTimespan = timespan (#1556)
ShinzoToken.setMainBnbPoolSize(uint256) (#1564-1567) should emit an event for:
- _mainBnbPoolSize = size (#1566)
ShinzoToken.setSendWeiGasLimit(uint256) (#1610-1612) should emit an event for:
- _sendWeiGasLimit = amount (#1611)
Emit an event for critical parameter changes.
Additional information: link
ShinzoTokenBase.setAutoLiquidityWallet(address).liquidityWallet (#878) lacks a zero-check on :
- _autoLiquidityWallet = liquidityWallet (#879)
ShinzoTokenBase.setBUSDTokenAddress(address).busd (#887) lacks a zero-check on :
- busdToken = busd (#888)
ShinzoTokenBase.setMarketingWallet(address).marketingWallet (#891) lacks a zero-check on :
- _marketingWallet = marketingWallet (#892)
ShinzoTokenBase.setCharityWallet(address).charityWallet (#900) lacks a zero-check on :
- _charityWallet = charityWallet (#901)
Check that the address is not zero.
Additional information: link
ShinzoTokenBase.swapBNBForCustomeTokens(address,uint256,address) (#720-734) has external calls inside a loop: path[0] = _pancakeswapV2Router.WETH() (#723)
ShinzoTokenBase.swapBNBForCustomeTokens(address,uint256,address) (#720-734) has external calls inside a loop: _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
ShinzoToken.claimBNB(address,uint256) (#1167-1189) has external calls inside a loop: (sent) = user.call{gas: _sendWeiGasLimit,value: bnbAmount}() (#1174)
ShinzoToken.claimBNB(address,uint256) (#1167-1189) has external calls inside a loop: (sent) = user.call{value: bnbAmount}() (#1179)
Favor pull over push strategy for external calls.
Additional information: link
Reentrancy in ShinzoToken.claimBNB(address,uint256) (#1167-1189):
External calls:
- (sent) = user.call{gas: _sendWeiGasLimit,value: bnbAmount}() (#1174)
- (sent) = user.call{value: bnbAmount}() (#1179)
State variables written after the call(s):
- _bnbRewardClaimed[user] += bnbAmount (#1186)
- _totalBNBClaimed += bnbAmount (#1187)
Reentrancy in ShinzoToken.claimRewardToken(address,uint256) (#1192-1204):
External calls:
- success = swapBNBForCustomeTokens(claimRewardAsToken(),bnbAmount,user) (#1196)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
State variables written after the call(s):
- _bnbAsBUSDClaimed[user] += bnbAmount (#1201)
- _totalBNBAsBUSDClaimed += bnbAmount (#1202)
Reentrancy in ShinzoTokenBase.constructor(address,address,address) (#456-484):
External calls:
- setPancakeSwapRouter(routerAddress) (#467)
- _pancakeswapV2Pair = IPancakeFactory(_pancakeswapV2Router.factory()).createPair(address(this),_pancakeswapV2Router.WETH()) (#783)
State variables written after the call(s):
- setFees(3,10,1,2) (#470)
- _buybackFee = buybackFee (#807)
- setFees(3,10,1,2) (#470)
- _liquidityFee = liquidityFee (#805)
- setFees(3,10,1,2) (#470)
- _marketingFee = marketingFee (#808)
- setFees(3,10,1,2) (#470)
- _poolFee = _rewardFee + _liquidityFee + _buybackFee + _marketingFee (#811)
- setFees(3,10,1,2) (#470)
- _rewardFee = rewardFee (#806)
- pinkAntiBot = IPinkAntiBot(pinkAntiBot_) (#478)
Reentrancy in ShinzoTokenBase.constructor(address,address,address) (#456-484):
External calls:
- setPancakeSwapRouter(routerAddress) (#467)
- _pancakeswapV2Pair = IPancakeFactory(_pancakeswapV2Router.factory()).createPair(address(this),_pancakeswapV2Router.WETH()) (#783)
- pinkAntiBot.setTokenOwner(msg.sender) (#481)
State variables written after the call(s):
- _ownerAddress = owner (#483)
- antiBotEnabled = false (#482)
Reentrancy in ShinzoToken.constructor(address,address,address) (#998-1007):
External calls:
- ShinzoTokenBase(routerAddress,pinkAntiBot_,_owner) (#998)
- _pancakeswapV2Pair = IPancakeFactory(_pancakeswapV2Router.factory()).createPair(address(this),_pancakeswapV2Router.WETH()) (#783)
- pinkAntiBot.setTokenOwner(msg.sender) (#481)
State variables written after the call(s):
- _addressesExcludedFromRewards[BURN_WALLET] = true (#1000)
- _addressesExcludedFromRewards[owner()] = true (#1001)
- _addressesExcludedFromRewards[address(this)] = true (#1002)
- _addressesExcludedFromRewards[address(0)] = true (#1003)
- setRewardCycleExtensionThreshold(15) (#1006)
- _rewardCycleExtensionThreshold = threshold (#1444)
Reentrancy in ShinzoToken.doBuyAndBurn(uint256) (#1383-1397):
External calls:
- swapBNBForTokens(bnbAmount,BURN_WALLET) (#1392)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
State variables written after the call(s):
- _lastBurnDate = block.timestamp (#1396)
Reentrancy in ShinzoTokenBase.doTransfer(address,address,uint256) (#531-565):
External calls:
- pinkAntiBot.onPreTransferCheck(sender,recipient,amount) (#535)
- executeSwapIfNeeded(sender,recipient) (#546)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
- _pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp + 360) (#683)
- (bnbAddedToLiquidity) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this),tokensToAddAsLiquidity,0,0,_autoLiquidityWallet,block.timestamp + 360) (#651)
External calls sending eth:
- executeSwapIfNeeded(sender,recipient) (#546)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
- (bnbAddedToLiquidity) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this),tokensToAddAsLiquidity,0,0,_autoLiquidityWallet,block.timestamp + 360) (#651)
State variables written after the call(s):
- executeSwapIfNeeded(sender,recipient) (#546)
- _allowances[owner][spender] = amount (#593)
- _totalFeesPooled += feeAmount (#560)
Reentrancy in ShinzoTokenBase.executeSwap(uint256) (#633-670):
External calls:
- bnbSwapped = swapTokensForBNB(tokensToSwap) (#647)
- _pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp + 360) (#683)
- (bnbAddedToLiquidity) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this),tokensToAddAsLiquidity,0,0,_autoLiquidityWallet,block.timestamp + 360) (#651)
External calls sending eth:
- (bnbAddedToLiquidity) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this),tokensToAddAsLiquidity,0,0,_autoLiquidityWallet,block.timestamp + 360) (#651)
State variables written after the call(s):
- _totalBNBLiquidityAddedFromFees += bnbAddedToLiquidity (#654)
Reentrancy in ShinzoTokenBase.transferFrom(address,address,uint256) (#518-522):
External calls:
- doTransfer(sender,recipient,amount) (#519)
- pinkAntiBot.onPreTransferCheck(sender,recipient,amount) (#535)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
- _pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp + 360) (#683)
- (bnbAddedToLiquidity) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this),tokensToAddAsLiquidity,0,0,_autoLiquidityWallet,block.timestamp + 360) (#651)
External calls sending eth:
- doTransfer(sender,recipient,amount) (#519)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
- (bnbAddedToLiquidity) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this),tokensToAddAsLiquidity,0,0,_autoLiquidityWallet,block.timestamp + 360) (#651)
State variables written after the call(s):
- doApprove(sender,_msgSender(),_allowances[sender][_msgSender()] - amount) (#520)
- _allowances[owner][spender] = amount (#593)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in ShinzoTokenBase.constructor(address,address,address) (#456-484):
External calls:
- setPancakeSwapRouter(routerAddress) (#467)
- _pancakeswapV2Pair = IPancakeFactory(_pancakeswapV2Router.factory()).createPair(address(this),_pancakeswapV2Router.WETH()) (#783)
Event emitted after the call(s):
- Transfer(address(0),_ownerWallet,totalSupply() * 75 / 100) (#472)
- Transfer(address(0),_yearWallet,totalSupply() * 10 / 100) (#473)
- Transfer(address(0),_charityWallet,totalSupply() * 5 / 100) (#474)
- Transfer(address(0),_marketingWallet,totalSupply() * 10 / 100) (#475)
Reentrancy in ShinzoToken.doBuyAndBurn(uint256) (#1383-1397):
External calls:
- swapBNBForTokens(bnbAmount,BURN_WALLET) (#1392)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
Event emitted after the call(s):
- Burned(bnbAmount) (#1393)
Reentrancy in ShinzoToken.doClaimReward(address) (#1133-1164):
External calls:
- ! claimRewardToken(user,claimBnbAsTokens) (#1144)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
- bnbClaimSuccess = claimBNB(user,claimBnb) (#1156)
- (sent) = user.call{gas: _sendWeiGasLimit,value: bnbAmount}() (#1174)
- (sent) = user.call{value: bnbAmount}() (#1179)
Event emitted after the call(s):
- RewardClaimed(user,claimBnb,claimBnbAsTokens,_nextAvailableClaimDate[user]) (#1160)
Reentrancy in ShinzoTokenBase.doTransfer(address,address,uint256) (#531-565):
External calls:
- pinkAntiBot.onPreTransferCheck(sender,recipient,amount) (#535)
- executeSwapIfNeeded(sender,recipient) (#546)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
- _pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp + 360) (#683)
- (bnbAddedToLiquidity) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this),tokensToAddAsLiquidity,0,0,_autoLiquidityWallet,block.timestamp + 360) (#651)
External calls sending eth:
- executeSwapIfNeeded(sender,recipient) (#546)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
- (bnbAddedToLiquidity) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this),tokensToAddAsLiquidity,0,0,_autoLiquidityWallet,block.timestamp + 360) (#651)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#595)
- executeSwapIfNeeded(sender,recipient) (#546)
- AutoBurned(bnbToBeBuybackAndBurn) (#666)
- executeSwapIfNeeded(sender,recipient) (#546)
- Swapped(tokensToSwap,bnbSwapped,tokensToAddAsLiquidity,bnbToBeAddedToLiquidity) (#669)
- executeSwapIfNeeded(sender,recipient) (#546)
- Transfer(sender,recipient,transferAmount) (#562)
Reentrancy in ShinzoTokenBase.executeSwap(uint256) (#633-670):
External calls:
- bnbSwapped = swapTokensForBNB(tokensToSwap) (#647)
- _pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp + 360) (#683)
- (bnbAddedToLiquidity) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this),tokensToAddAsLiquidity,0,0,_autoLiquidityWallet,block.timestamp + 360) (#651)
- swapBNBForCustomeTokens(busdToken,bnbToBeSendToMarketing,_marketingWallet) (#658)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
- swapBNBForTokens(bnbToBeBuybackAndBurn,BURN_WALLET) (#665)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
External calls sending eth:
- (bnbAddedToLiquidity) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this),tokensToAddAsLiquidity,0,0,_autoLiquidityWallet,block.timestamp + 360) (#651)
- swapBNBForCustomeTokens(busdToken,bnbToBeSendToMarketing,_marketingWallet) (#658)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
- swapBNBForTokens(bnbToBeBuybackAndBurn,BURN_WALLET) (#665)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
Event emitted after the call(s):
- AutoBurned(bnbToBeBuybackAndBurn) (#666)
- Swapped(tokensToSwap,bnbSwapped,tokensToAddAsLiquidity,bnbToBeAddedToLiquidity) (#669)
Reentrancy in ShinzoToken.onBeforeTransfer(address,address,uint256) (#1023-1063):
External calls:
- token.transferFrom(_yearWallet,address(this),walletBalance) (#1050)
- swapBUSDForBNB(currentBUSDAmount) (#1052)
- _pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp + 360) (#698)
- burnTriggered = processGradualBurn() (#1056)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
External calls sending eth:
- burnTriggered = processGradualBurn() (#1056)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
Event emitted after the call(s):
- Burned(bnbAmount) (#1393)
- burnTriggered = processGradualBurn() (#1056)
Reentrancy in ShinzoTokenBase.transferFrom(address,address,uint256) (#518-522):
External calls:
- doTransfer(sender,recipient,amount) (#519)
- pinkAntiBot.onPreTransferCheck(sender,recipient,amount) (#535)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
- _pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp + 360) (#683)
- (bnbAddedToLiquidity) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this),tokensToAddAsLiquidity,0,0,_autoLiquidityWallet,block.timestamp + 360) (#651)
External calls sending eth:
- doTransfer(sender,recipient,amount) (#519)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#728-733)
- _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,to,block.timestamp + 360) (#712-717)
- (bnbAddedToLiquidity) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this),tokensToAddAsLiquidity,0,0,_autoLiquidityWallet,block.timestamp + 360) (#651)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#595)
- doApprove(sender,_msgSender(),_allowances[sender][_msgSender()] - amount) (#520)
Apply the check-effects-interactions pattern.
Additional information: link
ShinzoToken.onBeforeTransfer(address,address,uint256) (#1023-1063) uses timestamp for comparisons
Dangerous comparisons:
- month == 12 && day == 22 (#1046)
ShinzoToken.processRewardClaimQueue(uint256) (#1210-1248) uses timestamp for comparisons
Dangerous comparisons:
- isRewardReady(user) && isIncludedInRewards(user) (#1231)
ShinzoToken.isRewardReady(address) (#1264-1266) uses timestamp for comparisons
Dangerous comparisons:
- _nextAvailableClaimDate[user] <= block.timestamp (#1265)
ShinzoToken.shouldBurn() (#1369-1371) uses timestamp for comparisons
Dangerous comparisons:
- _gradualBurnMagnitude > 0 && block.timestamp - _lastBurnDate > _gradualBurnTimespan (#1370)
Avoid relying on block.timestamp.
Additional information: link
ShinzoToken.isContract(address) (#1400-1405) uses assembly
- INLINE ASM (#1403)
Do not use evm assembly.
Additional information: link
ShinzoToken.processRewardClaimQueue(uint256) (#1210-1248) has costly operations inside a loop:
- _rewardClaimQueueIndex = 0 (#1227)
ShinzoToken.claimRewardToken(address,uint256) (#1192-1204) has costly operations inside a loop:
- _totalBNBAsBUSDClaimed += bnbAmount (#1202)
ShinzoToken.claimBNB(address,uint256) (#1167-1189) has costly operations inside a loop:
- _totalBNBClaimed += bnbAmount (#1187)
ShinzoToken.processRewardClaimQueue(uint256) (#1210-1248) has costly operations inside a loop:
- _rewardClaimQueueIndex ++ (#1244)
Use a local variable to hold the loop computation result.
Additional information: link
Context._msgData() (#116-119) is never used and should be removed
Remove unused functions.
Additional information: link
Low level call in ShinzoToken.claimBNB(address,uint256) (#1167-1189):
- (sent) = user.call{gas: _sendWeiGasLimit,value: bnbAmount}() (#1174)
- (sent) = user.call{value: bnbAmount}() (#1179)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IPancakeRouter01.WETH() (#178) is not in mixedCase
Parameter ShinzoTokenBase.setEnableAntiBot(bool)._enable (#488) is not in mixedCase
Constant ShinzoTokenBase._totalTokens (#415) is not in UPPER_CASE_WITH_UNDERSCORES
Variable ShinzoTokenBase._yearWallet (#435) is not in mixedCase
Variable ShinzoToken._rewardClaimQueue (#979) is not in mixedCase
Variable ShinzoToken._rewardClaimQueueIndices (#980) is not in mixedCase
Variable ShinzoToken._addressesInRewardClaimQueue (#982) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#117)" inContext (#111-120)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Variable IPancakeRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#183) is too similar to IPancakeRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#184)
Prevent variables from having similar names.
Additional information: link
ShinzoToken.onActivated() (#1011-1021) uses literals with too many digits:
- setMinRewardBalance(5000000000 * 10 ** decimals()) (#1017)
ShinzoToken.slitherConstructorVariables() (#953-1644) uses literals with too many digits:
- _tokenSwapThreshold = _totalTokens / 1000000 (#424)
ShinzoToken.slitherConstructorVariables() (#953-1644) uses literals with too many digits:
- _maxGasForAutoClaim = 600000 (#978)
ShinzoToken.slitherConstructorConstantVariables() (#953-1644) uses literals with too many digits:
- _totalTokens = 100000000000000000 * 10 ** DECIMALS (#415)
ShinzoToken.slitherConstructorConstantVariables() (#953-1644) uses literals with too many digits:
- BURN_WALLET = 0x000000000000000000000000000000000000dEaD (#423)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#170-173)
activate() should be declared external:
- ShinzoTokenBase.activate() (#494-501)
transfer(address,uint256) should be declared external:
- ShinzoTokenBase.transfer(address,uint256) (#512-515)
transferFrom(address,address,uint256) should be declared external:
- ShinzoTokenBase.transferFrom(address,address,uint256) (#518-522)
approve(address,uint256) should be declared external:
- ShinzoTokenBase.approve(address,uint256) (#525-528)
mint(uint256) should be declared external:
- ShinzoTokenBase.mint(uint256) (#584-587)
amountUntilSwap() should be declared external:
- ShinzoTokenBase.amountUntilSwap() (#756-764)
increaseAllowance(address,uint256) should be declared external:
- ShinzoTokenBase.increaseAllowance(address,uint256) (#766-769)
decreaseAllowance(address,uint256) should be declared external:
- ShinzoTokenBase.decreaseAllowance(address,uint256) (#772-775)
transactionLimit() should be declared external:
- ShinzoTokenBase.transactionLimit() (#822-824)
setTokenSwapThreshold(uint256) should be declared external:
- ShinzoTokenBase.setTokenSwapThreshold(uint256) (#827-830)
tokenSwapThreshold() should be declared external:
- ShinzoTokenBase.tokenSwapThreshold() (#833-835)
name() should be declared external:
- ShinzoTokenBase.name() (#838-840)
symbol() should be declared external:
- ShinzoTokenBase.symbol() (#843-845)
allowance(address,address) should be declared external:
- ShinzoTokenBase.allowance(address,address) (#858-860)
autoLiquidityWallet() should be declared external:
- ShinzoTokenBase.autoLiquidityWallet() (#873-875)
devmarketingWallet() should be declared external:
- ShinzoTokenBase.devmarketingWallet() (#883-885)
setBUSDTokenAddress(address) should be declared external:
- ShinzoTokenBase.setBUSDTokenAddress(address) (#887-889)
setMarketingWallet(address) should be declared external:
- ShinzoTokenBase.setMarketingWallet(address) (#891-893)
getCharityWallet() should be declared external:
- ShinzoTokenBase.getCharityWallet() (#895-897)
setCharityWallet(address) should be declared external:
- ShinzoTokenBase.setCharityWallet(address) (#900-902)
totalFeesPooled() should be declared external:
- ShinzoTokenBase.totalFeesPooled() (#904-906)
totalBNBLiquidityAddedFromFees() should be declared external:
- ShinzoTokenBase.totalBNBLiquidityAddedFromFees() (#909-911)
isSwapEnabled() should be declared external:
- ShinzoTokenBase.isSwapEnabled() (#914-916)
isFeeEnabled() should be declared external:
- ShinzoTokenBase.isFeeEnabled() (#924-926)
isExcludedFromFees(address) should be declared external:
- ShinzoTokenBase.isExcludedFromFees(address) (#934-936)
setExcludedFromFees(address,bool) should be declared external:
- ShinzoTokenBase.setExcludedFromFees(address,bool) (#939-941)
bnbRewardClaimed(address) should be declared external:
- ShinzoToken.bnbRewardClaimed(address) (#1413-1415)
bnbRewardClaimedAsBUSD(address) should be declared external:
- ShinzoToken.bnbRewardClaimedAsBUSD(address) (#1418-1420)
totalBNBClaimed() should be declared external:
- ShinzoToken.totalBNBClaimed() (#1423-1425)
totalBNBClaimedAsBUSD() should be declared external:
- ShinzoToken.totalBNBClaimedAsBUSD() (#1428-1430)
setRewardCyclePeriod(uint256) should be declared external:
- ShinzoToken.setRewardCyclePeriod(uint256) (#1438-1441)
nextAvailableClaimDate(address) should be declared external:
- ShinzoToken.nextAvailableClaimDate(address) (#1448-1450)
maxClaimAllowed() should be declared external:
- ShinzoToken.maxClaimAllowed() (#1453-1455)
setMaxClaimAllowed(uint256) should be declared external:
- ShinzoToken.setMaxClaimAllowed(uint256) (#1458-1461)
minRewardBalance() should be declared external:
- ShinzoToken.minRewardBalance() (#1464-1466)
maxGasForAutoClaim() should be declared external:
- ShinzoToken.maxGasForAutoClaim() (#1474-1476)
setMaxGasForAutoClaim(uint256) should be declared external:
- ShinzoToken.setMaxGasForAutoClaim(uint256) (#1479-1481)
isExcludedFromRewards(address) should be declared external:
- ShinzoToken.isExcludedFromRewards(address) (#1494-1496)
setExcludedFromRewards(address,bool) should be declared external:
- ShinzoToken.setExcludedFromRewards(address,bool) (#1500-1503)
globalRewardDampeningPercentage() should be declared external:
- ShinzoToken.globalRewardDampeningPercentage() (#1506-1508)
setGlobalRewardDampeningPercentage(uint256) should be declared external:
- ShinzoToken.setGlobalRewardDampeningPercentage(uint256) (#1511-1514)
approveClaim(address,bool) should be declared external:
- ShinzoToken.approveClaim(address,bool) (#1517-1520)
isRewardAsTokensEnabled() should be declared external:
- ShinzoToken.isRewardAsTokensEnabled() (#1528-1530)
gradualBurnMagnitude() should be declared external:
- ShinzoToken.gradualBurnMagnitude() (#1538-1540)
gradualBurnTimespan() should be declared external:
- ShinzoToken.gradualBurnTimespan() (#1549-1551)
setGradualBurnTimespan(uint256) should be declared external:
- ShinzoToken.setGradualBurnTimespan(uint256) (#1554-1557)
mainBnbPoolSize() should be declared external:
- ShinzoToken.mainBnbPoolSize() (#1559-1561)
setMainBnbPoolSize(uint256) should be declared external:
- ShinzoToken.setMainBnbPoolSize(uint256) (#1564-1567)
isInRewardClaimQueue(address) should be declared external:
- ShinzoToken.isInRewardClaimQueue(address) (#1570-1572)
reimburseAfterShinzoClaimFailure() should be declared external:
- ShinzoToken.reimburseAfterShinzoClaimFailure() (#1575-1577)
lastBurnDate() should be declared external:
- ShinzoToken.lastBurnDate() (#1585-1587)
rewardClaimQueueLength() should be declared external:
- ShinzoToken.rewardClaimQueueLength() (#1590-1592)
rewardClaimQueueIndex() should be declared external:
- ShinzoToken.rewardClaimQueueIndex() (#1595-1597)
isWhitelistedExternalProcessor(address) should be declared external:
- ShinzoToken.isWhitelistedExternalProcessor(address) (#1600-1602)
setWhitelistedExternalProcessor(address,bool) should be declared external:
- ShinzoToken.setWhitelistedExternalProcessor(address,bool) (#1605-1608)
setSendWeiGasLimit(uint256) should be declared external:
- ShinzoToken.setSendWeiGasLimit(uint256) (#1610-1612)
setExcludeNonHumansFromRewards(bool) should be declared external:
- ShinzoToken.setExcludeNonHumansFromRewards(bool) (#1614-1616)
deactivateTrading() should be declared external:
- ShinzoToken.deactivateTrading() (#1639-1642)
Use the external attribute for functions never called from the contract.
Additional information: link
Unable to find token contract audit
Unable to find audit link on the website
Unable to find token on CoinGecko
Additional information: link
Unable to find token on CoinMarketCap
Additional information: link
Token is not listed at Mobula.Finance
Additional information: link
Unable to find code repository for the project
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Young tokens have high risks of price dump / death
Young tokens have high risks of price dump / death
Young tokens have high risks of price dump / death
Telegram account has relatively few subscribers
Last post in Twitter was more than 30 days ago
Unable to find Discord account