Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Reentrancy in MetaWize._transfer(address,address,uint256) (contracts/MetaWize.sol#1504-1617):
External calls:
- swapBack() (contracts/MetaWize.sol#1567)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(autoLiquidityReceiver),block.timestamp) (contracts/MetaWize.sol#1659-1666)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/MetaWize.sol#1644-1650)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (contracts/MetaWize.sol#1625-1630)
- (success) = address(marketingWallet).call{value: ethForMarketing}() (contracts/MetaWize.sol#1695)
- success = IERC20(token).transfer(address(dividendTracker),tokenBalance) (contracts/MetaWize.sol#1707)
- dividendTracker.distributeTokenDividends(tokenBalance) (contracts/MetaWize.sol#1710)
External calls sending eth:
- swapBack() (contracts/MetaWize.sol#1567)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(autoLiquidityReceiver),block.timestamp) (contracts/MetaWize.sol#1659-1666)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (contracts/MetaWize.sol#1625-1630)
- (success) = address(marketingWallet).call{value: ethForMarketing}() (contracts/MetaWize.sol#1695)
State variables written after the call(s):
- super._transfer(from,address(this),fees) (contracts/MetaWize.sol#1598)
- _balances[sender] = _balances[sender].sub(amount,ERC20: transfer amount exceeds balance) (contracts/MetaWize.sol#428)
- _balances[recipient] = _balances[recipient].add(amount) (contracts/MetaWize.sol#429)
- super._transfer(from,to,amount) (contracts/MetaWize.sol#1604)
- _balances[sender] = _balances[sender].sub(amount,ERC20: transfer amount exceeds balance) (contracts/MetaWize.sol#428)
- _balances[recipient] = _balances[recipient].add(amount) (contracts/MetaWize.sol#429)
- swapping = false (contracts/MetaWize.sol#1568)
- tokensForLiquidity += fees * liquiditySellFee / totalSellFees (contracts/MetaWize.sol#1586)
- tokensForLiquidity += fees * liquidityBuyFee / totalBuyFees (contracts/MetaWize.sol#1593)
- tokensForMarketing += fees * marketingSellFee / totalSellFees (contracts/MetaWize.sol#1587)
- tokensForMarketing += fees * marketingBuyFee / totalBuyFees (contracts/MetaWize.sol#1594)
- tokensForRewards += fees * rewardsSellFee / totalSellFees (contracts/MetaWize.sol#1585)
- tokensForRewards += fees * rewardsBuyFee / totalBuyFees (contracts/MetaWize.sol#1592)
Apply the check-effects-interactions pattern.
Additional information: link
Contract locking ether found:
Contract DividendTracker (contracts/MetaWize.sol#1751-1958) has payable functions:
- DividendPayingToken.receive() (contracts/MetaWize.sol#1006-1008)
- DividendPayingToken.distributeDividends() (contracts/MetaWize.sol#1024-1026)
- DividendPayingTokenInterface.distributeDividends() (contracts/MetaWize.sol#547)
But does not have a function to withdraw the ether
Remove the payable attribute or add a withdraw function.
Additional information: link
MetaWize._transfer(address,address,uint256) (contracts/MetaWize.sol#1504-1617) performs a multiplication on the result of a division:
-fees = amount.mul(totalSellFees).div(100) (contracts/MetaWize.sol#1584)
-tokensForRewards += fees * rewardsSellFee / totalSellFees (contracts/MetaWize.sol#1585)
MetaWize._transfer(address,address,uint256) (contracts/MetaWize.sol#1504-1617) performs a multiplication on the result of a division:
-fees = amount.mul(totalSellFees).div(100) (contracts/MetaWize.sol#1584)
-tokensForLiquidity += fees * liquiditySellFee / totalSellFees (contracts/MetaWize.sol#1586)
MetaWize._transfer(address,address,uint256) (contracts/MetaWize.sol#1504-1617) performs a multiplication on the result of a division:
-fees = amount.mul(totalSellFees).div(100) (contracts/MetaWize.sol#1584)
-tokensForMarketing += fees * marketingSellFee / totalSellFees (contracts/MetaWize.sol#1587)
MetaWize._transfer(address,address,uint256) (contracts/MetaWize.sol#1504-1617) performs a multiplication on the result of a division:
-fees = amount.mul(totalBuyFees).div(100) (contracts/MetaWize.sol#1591)
-tokensForRewards += fees * rewardsBuyFee / totalBuyFees (contracts/MetaWize.sol#1592)
MetaWize._transfer(address,address,uint256) (contracts/MetaWize.sol#1504-1617) performs a multiplication on the result of a division:
-fees = amount.mul(totalBuyFees).div(100) (contracts/MetaWize.sol#1591)
-tokensForLiquidity += fees * liquidityBuyFee / totalBuyFees (contracts/MetaWize.sol#1593)
MetaWize._transfer(address,address,uint256) (contracts/MetaWize.sol#1504-1617) performs a multiplication on the result of a division:
-fees = amount.mul(totalBuyFees).div(100) (contracts/MetaWize.sol#1591)
-tokensForMarketing += fees * marketingBuyFee / totalBuyFees (contracts/MetaWize.sol#1594)
Consider ordering multiplication before division.
Additional information: link
Reentrancy in DividendPayingToken._withdrawDividendOfUser(address) (contracts/MetaWize.sol#1049-1065):
External calls:
- success = IERC20(token).transfer(user,_withdrawableDividend) (contracts/MetaWize.sol#1054)
State variables written after the call(s):
- withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend) (contracts/MetaWize.sol#1057)
Reentrancy in MetaWize.swapBack() (contracts/MetaWize.sol#1670-1715):
External calls:
- swapTokensForEth(amountToSwapForETH) (contracts/MetaWize.sol#1682)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/MetaWize.sol#1644-1650)
State variables written after the call(s):
- tokensForLiquidity = 0 (contracts/MetaWize.sol#1691)
- tokensForMarketing = 0 (contracts/MetaWize.sol#1692)
- tokensForRewards = 0 (contracts/MetaWize.sol#1693)
Apply the check-effects-interactions pattern.
Additional information: link
MetaWize._transfer(address,address,uint256) (contracts/MetaWize.sol#1504-1617) uses tx.origin for authorization: require(bool,string)(_holderLastTransferTimestamp[tx.origin] < block.number,_transfer:: Transfer Delay enabled. Only one purchase per block allowed.) (contracts/MetaWize.sol#1538)
Do not use tx.origin for authorization.
Additional information: link
MetaWize._transfer(address,address,uint256).iterations (contracts/MetaWize.sol#1612) is a local variable never initialized
MetaWize._transfer(address,address,uint256).claims (contracts/MetaWize.sol#1612) is a local variable never initialized
MetaWize._transfer(address,address,uint256).lastProcessedIndex (contracts/MetaWize.sol#1612) 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
MetaWize.claim() (contracts/MetaWize.sol#1481-1483) ignores return value by dividendTracker.processAccount(address(msg.sender),false) (contracts/MetaWize.sol#1482)
MetaWize._transfer(address,address,uint256) (contracts/MetaWize.sol#1504-1617) ignores return value by dividendTracker.process(gas) (contracts/MetaWize.sol#1612-1615)
MetaWize.addLiquidity(uint256,uint256) (contracts/MetaWize.sol#1654-1668) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(autoLiquidityReceiver),block.timestamp) (contracts/MetaWize.sol#1659-1666)
Ensure that all the return values of the function calls are used.
Additional information: link
DividendPayingToken.dividendOf(address)._owner (contracts/MetaWize.sol#1071) shadows:
- Ownable._owner (contracts/MetaWize.sol#715) (state variable)
DividendPayingToken.withdrawableDividendOf(address)._owner (contracts/MetaWize.sol#1078) shadows:
- Ownable._owner (contracts/MetaWize.sol#715) (state variable)
DividendPayingToken.withdrawnDividendOf(address)._owner (contracts/MetaWize.sol#1085) shadows:
- Ownable._owner (contracts/MetaWize.sol#715) (state variable)
DividendPayingToken.accumulativeDividendOf(address)._owner (contracts/MetaWize.sol#1095) shadows:
- Ownable._owner (contracts/MetaWize.sol#715) (state variable)
MetaWize.constructor().totalSupply (contracts/MetaWize.sol#1241) shadows:
- ERC20.totalSupply() (contracts/MetaWize.sol#302-304) (function)
- IERC20.totalSupply() (contracts/MetaWize.sol#152) (function)
Rename the local variables that shadow another component.
Additional information: link
MetaWize.updateMaxAmount(uint256) (contracts/MetaWize.sol#1349-1352) should emit an event for:
- maxTransactionAmount = newNum * (10 ** 18) (contracts/MetaWize.sol#1351)
MetaWize.updateBuyFees(uint256,uint256,uint256) (contracts/MetaWize.sol#1354-1360) should emit an event for:
- marketingBuyFee = _marketingFee (contracts/MetaWize.sol#1355)
- rewardsBuyFee = _rewardsFee (contracts/MetaWize.sol#1356)
- liquidityBuyFee = _liquidityFee (contracts/MetaWize.sol#1357)
- totalBuyFees = marketingBuyFee + rewardsBuyFee + liquidityBuyFee (contracts/MetaWize.sol#1358)
MetaWize.updateSellFees(uint256,uint256,uint256) (contracts/MetaWize.sol#1362-1368) should emit an event for:
- marketingSellFee = _marketingFee (contracts/MetaWize.sol#1363)
- rewardsSellFee = _rewardsFee (contracts/MetaWize.sol#1364)
- liquiditySellFee = _liquidityFee (contracts/MetaWize.sol#1365)
- totalSellFees = marketingSellFee + rewardsSellFee + liquiditySellFee (contracts/MetaWize.sol#1366)
Emit an event for critical parameter changes.
Additional information: link
MetaWize.addPresaleAddressForExclusions(address,address)._presaleAddress (contracts/MetaWize.sol#1308) lacks a zero-check on :
- presaleAddress = _presaleAddress (contracts/MetaWize.sol#1309)
MetaWize.addPresaleAddressForExclusions(address,address)._presaleRouterAddress (contracts/MetaWize.sol#1308) lacks a zero-check on :
- presaleRouterAddress = _presaleRouterAddress (contracts/MetaWize.sol#1313)
MetaWize.emergencyPresaleAddressUpdate(address,address)._presaleAddress (contracts/MetaWize.sol#1319) lacks a zero-check on :
- presaleAddress = _presaleAddress (contracts/MetaWize.sol#1320)
MetaWize.emergencyPresaleAddressUpdate(address,address)._presaleRouterAddress (contracts/MetaWize.sol#1319) lacks a zero-check on :
- presaleRouterAddress = _presaleRouterAddress (contracts/MetaWize.sol#1321)
MetaWize.updateMarketingWallet(address).newMarketingWallet (contracts/MetaWize.sol#1407) lacks a zero-check on :
- marketingWallet = newMarketingWallet (contracts/MetaWize.sol#1410)
MetaWize.updateLiquidityReceiver(address).newLiquidityReceiver (contracts/MetaWize.sol#1413) lacks a zero-check on :
- autoLiquidityReceiver = newLiquidityReceiver (contracts/MetaWize.sol#1416)
Check that the address is not zero.
Additional information: link
DividendPayingToken._withdrawDividendOfUser(address) (contracts/MetaWize.sol#1049-1065) has external calls inside a loop: success = IERC20(token).transfer(user,_withdrawableDividend) (contracts/MetaWize.sol#1054)
Favor pull over push strategy for external calls.
Additional information: link
Variable 'MetaWize._transfer(address,address,uint256).iterations (contracts/MetaWize.sol#1612)' in MetaWize._transfer(address,address,uint256) (contracts/MetaWize.sol#1504-1617) potentially used before declaration: ProcessedDividendTracker(iterations,claims,lastProcessedIndex,true,gas,tx.origin) (contracts/MetaWize.sol#1613)
Variable 'MetaWize._transfer(address,address,uint256).lastProcessedIndex (contracts/MetaWize.sol#1612)' in MetaWize._transfer(address,address,uint256) (contracts/MetaWize.sol#1504-1617) potentially used before declaration: ProcessedDividendTracker(iterations,claims,lastProcessedIndex,true,gas,tx.origin) (contracts/MetaWize.sol#1613)
Variable 'MetaWize._transfer(address,address,uint256).claims (contracts/MetaWize.sol#1612)' in MetaWize._transfer(address,address,uint256) (contracts/MetaWize.sol#1504-1617) potentially used before declaration: ProcessedDividendTracker(iterations,claims,lastProcessedIndex,true,gas,tx.origin) (contracts/MetaWize.sol#1613)
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
Reentrancy in MetaWize.addPresaleAddressForExclusions(address,address) (contracts/MetaWize.sol#1308-1317):
External calls:
- dividendTracker.excludeFromDividends(_presaleAddress) (contracts/MetaWize.sol#1311)
State variables written after the call(s):
- excludeFromFees(_presaleRouterAddress,true) (contracts/MetaWize.sol#1314)
- _isExcludedFromFees[account] = excluded (contracts/MetaWize.sol#1376)
- excludeFromMaxTransaction(_presaleAddress,true) (contracts/MetaWize.sol#1312)
- _isExcludedMaxTransactionAmount[updAds] = isEx (contracts/MetaWize.sol#1371)
- presaleRouterAddress = _presaleRouterAddress (contracts/MetaWize.sol#1313)
Reentrancy in MetaWize.addPresaleAddressForExclusions(address,address) (contracts/MetaWize.sol#1308-1317):
External calls:
- dividendTracker.excludeFromDividends(_presaleAddress) (contracts/MetaWize.sol#1311)
- dividendTracker.excludeFromDividends(_presaleRouterAddress) (contracts/MetaWize.sol#1315)
State variables written after the call(s):
- excludeFromMaxTransaction(_presaleRouterAddress,true) (contracts/MetaWize.sol#1316)
- _isExcludedMaxTransactionAmount[updAds] = isEx (contracts/MetaWize.sol#1371)
Reentrancy in MetaWize.constructor() (contracts/MetaWize.sol#1238-1301):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (contracts/MetaWize.sol#1268-1269)
State variables written after the call(s):
- uniswapV2Pair = _uniswapV2Pair (contracts/MetaWize.sol#1272)
- uniswapV2Router = _uniswapV2Router (contracts/MetaWize.sol#1271)
Reentrancy in MetaWize.constructor() (contracts/MetaWize.sol#1238-1301):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (contracts/MetaWize.sol#1268-1269)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (contracts/MetaWize.sol#1274)
- dividendTracker.excludeFromDividends(pair) (contracts/MetaWize.sol#1401)
State variables written after the call(s):
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (contracts/MetaWize.sol#1274)
- _isExcludedMaxTransactionAmount[updAds] = isEx (contracts/MetaWize.sol#1371)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (contracts/MetaWize.sol#1274)
- automatedMarketMakerPairs[pair] = value (contracts/MetaWize.sol#1396)
Reentrancy in MetaWize.constructor() (contracts/MetaWize.sol#1238-1301):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (contracts/MetaWize.sol#1268-1269)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (contracts/MetaWize.sol#1274)
- dividendTracker.excludeFromDividends(pair) (contracts/MetaWize.sol#1401)
- dividendTracker.excludeFromDividends(address(dividendTracker)) (contracts/MetaWize.sol#1277)
- dividendTracker.excludeFromDividends(address(this)) (contracts/MetaWize.sol#1278)
- dividendTracker.excludeFromDividends(newOwner) (contracts/MetaWize.sol#1279)
- dividendTracker.excludeFromDividends(address(_uniswapV2Router)) (contracts/MetaWize.sol#1280)
- dividendTracker.excludeFromDividends(address(0xdead)) (contracts/MetaWize.sol#1281)
- dividendTracker.excludeFromDividends(address(autoLiquidityReceiver)) (contracts/MetaWize.sol#1282)
State variables written after the call(s):
- _mint(address(newOwner),totalSupply) (contracts/MetaWize.sol#1300)
- _balances[account] = _balances[account].add(amount) (contracts/MetaWize.sol#448)
- excludeFromFees(newOwner,true) (contracts/MetaWize.sol#1285)
- _isExcludedFromFees[account] = excluded (contracts/MetaWize.sol#1376)
- excludeFromFees(address(this),true) (contracts/MetaWize.sol#1286)
- _isExcludedFromFees[account] = excluded (contracts/MetaWize.sol#1376)
- excludeFromFees(address(0xdead),true) (contracts/MetaWize.sol#1287)
- _isExcludedFromFees[account] = excluded (contracts/MetaWize.sol#1376)
- excludeFromFees(address(autoLiquidityReceiver),true) (contracts/MetaWize.sol#1288)
- _isExcludedFromFees[account] = excluded (contracts/MetaWize.sol#1376)
- excludeFromMaxTransaction(newOwner,true) (contracts/MetaWize.sol#1289)
- _isExcludedMaxTransactionAmount[updAds] = isEx (contracts/MetaWize.sol#1371)
- excludeFromMaxTransaction(address(this),true) (contracts/MetaWize.sol#1290)
- _isExcludedMaxTransactionAmount[updAds] = isEx (contracts/MetaWize.sol#1371)
- excludeFromMaxTransaction(address(dividendTracker),true) (contracts/MetaWize.sol#1291)
- _isExcludedMaxTransactionAmount[updAds] = isEx (contracts/MetaWize.sol#1371)
- excludeFromMaxTransaction(address(_uniswapV2Router),true) (contracts/MetaWize.sol#1292)
- _isExcludedMaxTransactionAmount[updAds] = isEx (contracts/MetaWize.sol#1371)
- excludeFromMaxTransaction(address(0xdead),true) (contracts/MetaWize.sol#1293)
- _isExcludedMaxTransactionAmount[updAds] = isEx (contracts/MetaWize.sol#1371)
- excludeFromMaxTransaction(address(autoLiquidityReceiver),true) (contracts/MetaWize.sol#1294)
- _isExcludedMaxTransactionAmount[updAds] = isEx (contracts/MetaWize.sol#1371)
- _mint(address(newOwner),totalSupply) (contracts/MetaWize.sol#1300)
- _totalSupply = _totalSupply.add(amount) (contracts/MetaWize.sol#447)
Reentrancy in DividendTracker.processAccount(address,bool) (contracts/MetaWize.sol#1947-1957):
External calls:
- amount = _withdrawDividendOfUser(account) (contracts/MetaWize.sol#1948)
- success = IERC20(token).transfer(user,_withdrawableDividend) (contracts/MetaWize.sol#1054)
State variables written after the call(s):
- lastClaimTimes[account] = block.timestamp (contracts/MetaWize.sol#1951)
Reentrancy in MetaWize.swapBack() (contracts/MetaWize.sol#1670-1715):
External calls:
- swapTokensForEth(amountToSwapForETH) (contracts/MetaWize.sol#1682)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/MetaWize.sol#1644-1650)
- (success) = address(marketingWallet).call{value: ethForMarketing}() (contracts/MetaWize.sol#1695)
- addLiquidity(liquidityTokens,ethForLiquidity) (contracts/MetaWize.sol#1698)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(autoLiquidityReceiver),block.timestamp) (contracts/MetaWize.sol#1659-1666)
External calls sending eth:
- (success) = address(marketingWallet).call{value: ethForMarketing}() (contracts/MetaWize.sol#1695)
- addLiquidity(liquidityTokens,ethForLiquidity) (contracts/MetaWize.sol#1698)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(autoLiquidityReceiver),block.timestamp) (contracts/MetaWize.sol#1659-1666)
State variables written after the call(s):
- addLiquidity(liquidityTokens,ethForLiquidity) (contracts/MetaWize.sol#1698)
- _allowances[owner][spender] = amount (contracts/MetaWize.sol#494)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in MetaWize._setAutomatedMarketMakerPair(address,bool) (contracts/MetaWize.sol#1395-1405):
External calls:
- dividendTracker.excludeFromDividends(pair) (contracts/MetaWize.sol#1401)
Event emitted after the call(s):
- SetAutomatedMarketMakerPair(pair,value) (contracts/MetaWize.sol#1404)
Reentrancy in MetaWize._transfer(address,address,uint256) (contracts/MetaWize.sol#1504-1617):
External calls:
- swapBack() (contracts/MetaWize.sol#1567)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(autoLiquidityReceiver),block.timestamp) (contracts/MetaWize.sol#1659-1666)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/MetaWize.sol#1644-1650)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (contracts/MetaWize.sol#1625-1630)
- (success) = address(marketingWallet).call{value: ethForMarketing}() (contracts/MetaWize.sol#1695)
- success = IERC20(token).transfer(address(dividendTracker),tokenBalance) (contracts/MetaWize.sol#1707)
- dividendTracker.distributeTokenDividends(tokenBalance) (contracts/MetaWize.sol#1710)
External calls sending eth:
- swapBack() (contracts/MetaWize.sol#1567)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(autoLiquidityReceiver),block.timestamp) (contracts/MetaWize.sol#1659-1666)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (contracts/MetaWize.sol#1625-1630)
- (success) = address(marketingWallet).call{value: ethForMarketing}() (contracts/MetaWize.sol#1695)
Event emitted after the call(s):
- Transfer(sender,recipient,amount) (contracts/MetaWize.sol#430)
- super._transfer(from,to,amount) (contracts/MetaWize.sol#1604)
- Transfer(sender,recipient,amount) (contracts/MetaWize.sol#430)
- super._transfer(from,address(this),fees) (contracts/MetaWize.sol#1598)
Reentrancy in MetaWize._transfer(address,address,uint256) (contracts/MetaWize.sol#1504-1617):
External calls:
- swapBack() (contracts/MetaWize.sol#1567)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(autoLiquidityReceiver),block.timestamp) (contracts/MetaWize.sol#1659-1666)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/MetaWize.sol#1644-1650)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (contracts/MetaWize.sol#1625-1630)
- (success) = address(marketingWallet).call{value: ethForMarketing}() (contracts/MetaWize.sol#1695)
- success = IERC20(token).transfer(address(dividendTracker),tokenBalance) (contracts/MetaWize.sol#1707)
- dividendTracker.distributeTokenDividends(tokenBalance) (contracts/MetaWize.sol#1710)
- dividendTracker.setBalance(address(from),balanceOf(from)) (contracts/MetaWize.sol#1606)
- dividendTracker.setBalance(address(to),balanceOf(to)) (contracts/MetaWize.sol#1607)
- dividendTracker.process(gas) (contracts/MetaWize.sol#1612-1615)
External calls sending eth:
- swapBack() (contracts/MetaWize.sol#1567)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(autoLiquidityReceiver),block.timestamp) (contracts/MetaWize.sol#1659-1666)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (contracts/MetaWize.sol#1625-1630)
- (success) = address(marketingWallet).call{value: ethForMarketing}() (contracts/MetaWize.sol#1695)
Event emitted after the call(s):
- ProcessedDividendTracker(iterations,claims,lastProcessedIndex,true,gas,tx.origin) (contracts/MetaWize.sol#1613)
Reentrancy in MetaWize.addPresaleAddressForExclusions(address,address) (contracts/MetaWize.sol#1308-1317):
External calls:
- dividendTracker.excludeFromDividends(_presaleAddress) (contracts/MetaWize.sol#1311)
Event emitted after the call(s):
- ExcludeFromFees(account,excluded) (contracts/MetaWize.sol#1378)
- excludeFromFees(_presaleRouterAddress,true) (contracts/MetaWize.sol#1314)
- ExcludedMaxTransactionAmount(updAds,isEx) (contracts/MetaWize.sol#1372)
- excludeFromMaxTransaction(_presaleAddress,true) (contracts/MetaWize.sol#1312)
Reentrancy in MetaWize.addPresaleAddressForExclusions(address,address) (contracts/MetaWize.sol#1308-1317):
External calls:
- dividendTracker.excludeFromDividends(_presaleAddress) (contracts/MetaWize.sol#1311)
- dividendTracker.excludeFromDividends(_presaleRouterAddress) (contracts/MetaWize.sol#1315)
Event emitted after the call(s):
- ExcludedMaxTransactionAmount(updAds,isEx) (contracts/MetaWize.sol#1372)
- excludeFromMaxTransaction(_presaleRouterAddress,true) (contracts/MetaWize.sol#1316)
Reentrancy in MetaWize.constructor() (contracts/MetaWize.sol#1238-1301):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (contracts/MetaWize.sol#1268-1269)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (contracts/MetaWize.sol#1274)
- dividendTracker.excludeFromDividends(pair) (contracts/MetaWize.sol#1401)
Event emitted after the call(s):
- ExcludedMaxTransactionAmount(updAds,isEx) (contracts/MetaWize.sol#1372)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (contracts/MetaWize.sol#1274)
- SetAutomatedMarketMakerPair(pair,value) (contracts/MetaWize.sol#1404)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (contracts/MetaWize.sol#1274)
Reentrancy in MetaWize.constructor() (contracts/MetaWize.sol#1238-1301):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (contracts/MetaWize.sol#1268-1269)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (contracts/MetaWize.sol#1274)
- dividendTracker.excludeFromDividends(pair) (contracts/MetaWize.sol#1401)
- dividendTracker.excludeFromDividends(address(dividendTracker)) (contracts/MetaWize.sol#1277)
- dividendTracker.excludeFromDividends(address(this)) (contracts/MetaWize.sol#1278)
- dividendTracker.excludeFromDividends(newOwner) (contracts/MetaWize.sol#1279)
- dividendTracker.excludeFromDividends(address(_uniswapV2Router)) (contracts/MetaWize.sol#1280)
- dividendTracker.excludeFromDividends(address(0xdead)) (contracts/MetaWize.sol#1281)
- dividendTracker.excludeFromDividends(address(autoLiquidityReceiver)) (contracts/MetaWize.sol#1282)
Event emitted after the call(s):
- ExcludeFromFees(account,excluded) (contracts/MetaWize.sol#1378)
- excludeFromFees(address(autoLiquidityReceiver),true) (contracts/MetaWize.sol#1288)
- ExcludeFromFees(account,excluded) (contracts/MetaWize.sol#1378)
- excludeFromFees(address(0xdead),true) (contracts/MetaWize.sol#1287)
- ExcludeFromFees(account,excluded) (contracts/MetaWize.sol#1378)
- excludeFromFees(address(this),true) (contracts/MetaWize.sol#1286)
- ExcludeFromFees(account,excluded) (contracts/MetaWize.sol#1378)
- excludeFromFees(newOwner,true) (contracts/MetaWize.sol#1285)
- ExcludedMaxTransactionAmount(updAds,isEx) (contracts/MetaWize.sol#1372)
- excludeFromMaxTransaction(address(dividendTracker),true) (contracts/MetaWize.sol#1291)
- ExcludedMaxTransactionAmount(updAds,isEx) (contracts/MetaWize.sol#1372)
- excludeFromMaxTransaction(address(this),true) (contracts/MetaWize.sol#1290)
- ExcludedMaxTransactionAmount(updAds,isEx) (contracts/MetaWize.sol#1372)
- excludeFromMaxTransaction(newOwner,true) (contracts/MetaWize.sol#1289)
- ExcludedMaxTransactionAmount(updAds,isEx) (contracts/MetaWize.sol#1372)
- excludeFromMaxTransaction(address(autoLiquidityReceiver),true) (contracts/MetaWize.sol#1294)
- ExcludedMaxTransactionAmount(updAds,isEx) (contracts/MetaWize.sol#1372)
- excludeFromMaxTransaction(address(0xdead),true) (contracts/MetaWize.sol#1293)
- ExcludedMaxTransactionAmount(updAds,isEx) (contracts/MetaWize.sol#1372)
- excludeFromMaxTransaction(address(_uniswapV2Router),true) (contracts/MetaWize.sol#1292)
- Transfer(address(0),account,amount) (contracts/MetaWize.sol#449)
- _mint(address(newOwner),totalSupply) (contracts/MetaWize.sol#1300)
Reentrancy in MetaWize.excludeFromDividends(address) (contracts/MetaWize.sol#1331-1334):
External calls:
- dividendTracker.excludeFromDividends(account) (contracts/MetaWize.sol#1332)
Event emitted after the call(s):
- ExcludeFromDividends(account) (contracts/MetaWize.sol#1333)
Reentrancy in MetaWize.includeInDividends(address) (contracts/MetaWize.sol#1337-1340):
External calls:
- dividendTracker.includeInDividends(account) (contracts/MetaWize.sol#1338)
Event emitted after the call(s):
- IncludeInDividends(account) (contracts/MetaWize.sol#1339)
Reentrancy in DividendTracker.processAccount(address,bool) (contracts/MetaWize.sol#1947-1957):
External calls:
- amount = _withdrawDividendOfUser(account) (contracts/MetaWize.sol#1948)
- success = IERC20(token).transfer(user,_withdrawableDividend) (contracts/MetaWize.sol#1054)
Event emitted after the call(s):
- Claim(account,amount,automatic) (contracts/MetaWize.sol#1952)
Reentrancy in MetaWize.processDividendTracker(uint256) (contracts/MetaWize.sol#1476-1479):
External calls:
- (iterations,claims,lastProcessedIndex) = dividendTracker.process(gas) (contracts/MetaWize.sol#1477)
Event emitted after the call(s):
- ProcessedDividendTracker(iterations,claims,lastProcessedIndex,false,gas,tx.origin) (contracts/MetaWize.sol#1478)
Reentrancy in MetaWize.swapBack() (contracts/MetaWize.sol#1670-1715):
External calls:
- swapTokensForEth(amountToSwapForETH) (contracts/MetaWize.sol#1682)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/MetaWize.sol#1644-1650)
- (success) = address(marketingWallet).call{value: ethForMarketing}() (contracts/MetaWize.sol#1695)
- addLiquidity(liquidityTokens,ethForLiquidity) (contracts/MetaWize.sol#1698)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(autoLiquidityReceiver),block.timestamp) (contracts/MetaWize.sol#1659-1666)
External calls sending eth:
- (success) = address(marketingWallet).call{value: ethForMarketing}() (contracts/MetaWize.sol#1695)
- addLiquidity(liquidityTokens,ethForLiquidity) (contracts/MetaWize.sol#1698)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(autoLiquidityReceiver),block.timestamp) (contracts/MetaWize.sol#1659-1666)
Event emitted after the call(s):
- Approval(owner,spender,amount) (contracts/MetaWize.sol#495)
- addLiquidity(liquidityTokens,ethForLiquidity) (contracts/MetaWize.sol#1698)
- SwapAndLiquify(amountToSwapForETH,ethForLiquidity,tokensForLiquidity) (contracts/MetaWize.sol#1699)
Reentrancy in MetaWize.swapBack() (contracts/MetaWize.sol#1670-1715):
External calls:
- swapTokensForEth(amountToSwapForETH) (contracts/MetaWize.sol#1682)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/MetaWize.sol#1644-1650)
- (success) = address(marketingWallet).call{value: ethForMarketing}() (contracts/MetaWize.sol#1695)
- addLiquidity(liquidityTokens,ethForLiquidity) (contracts/MetaWize.sol#1698)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(autoLiquidityReceiver),block.timestamp) (contracts/MetaWize.sol#1659-1666)
- swapBnbForRewardToken(ethForRewards) (contracts/MetaWize.sol#1704)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (contracts/MetaWize.sol#1625-1630)
- success = IERC20(token).transfer(address(dividendTracker),tokenBalance) (contracts/MetaWize.sol#1707)
- dividendTracker.distributeTokenDividends(tokenBalance) (contracts/MetaWize.sol#1710)
External calls sending eth:
- (success) = address(marketingWallet).call{value: ethForMarketing}() (contracts/MetaWize.sol#1695)
- addLiquidity(liquidityTokens,ethForLiquidity) (contracts/MetaWize.sol#1698)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(autoLiquidityReceiver),block.timestamp) (contracts/MetaWize.sol#1659-1666)
- swapBnbForRewardToken(ethForRewards) (contracts/MetaWize.sol#1704)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (contracts/MetaWize.sol#1625-1630)
Event emitted after the call(s):
- SendDividends(tokenBalance,ethForRewards) (contracts/MetaWize.sol#1711)
Apply the check-effects-interactions pattern.
Additional information: link
DividendTracker.getAccount(address) (contracts/MetaWize.sol#1811-1854) uses timestamp for comparisons
Dangerous comparisons:
- nextClaimTime > block.timestamp (contracts/MetaWize.sol#1851-1853)
DividendTracker.canAutoClaim(uint256) (contracts/MetaWize.sol#1875-1881) uses timestamp for comparisons
Dangerous comparisons:
- lastClaimTime > block.timestamp (contracts/MetaWize.sol#1876)
- block.timestamp.sub(lastClaimTime) >= claimWait (contracts/MetaWize.sol#1880)
Avoid relying on block.timestamp.
Additional information: link
Context._msgData() (contracts/MetaWize.sol#14-17) is never used and should be removed
ERC20._burn(address,uint256) (contracts/MetaWize.sol#463-471) is never used and should be removed
SafeMath.mod(uint256,uint256) (contracts/MetaWize.sol#692-694) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (contracts/MetaWize.sol#708-711) is never used and should be removed
SafeMathInt.abs(int256) (contracts/MetaWize.sol#816-819) is never used and should be removed
SafeMathInt.div(int256,int256) (contracts/MetaWize.sol#787-793) is never used and should be removed
SafeMathInt.mul(int256,int256) (contracts/MetaWize.sol#775-782) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version0.8.9 (contracts/MetaWize.sol#7) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
solc-0.8.9 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 MetaWize.swapBack() (contracts/MetaWize.sol#1670-1715):
- (success) = address(marketingWallet).call{value: ethForMarketing}() (contracts/MetaWize.sol#1695)
Low level call in MetaWize.withdrawStuckEth() (contracts/MetaWize.sol#1733-1736):
- (success) = address(msg.sender).call{value: address(this).balance}() (contracts/MetaWize.sol#1734)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (contracts/MetaWize.sol#35) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (contracts/MetaWize.sol#36) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (contracts/MetaWize.sol#53) is not in mixedCase
Function IUniswapV2Router01.WETH() (contracts/MetaWize.sol#839) is not in mixedCase
Parameter DividendPayingToken.dividendOf(address)._owner (contracts/MetaWize.sol#1071) is not in mixedCase
Parameter DividendPayingToken.withdrawableDividendOf(address)._owner (contracts/MetaWize.sol#1078) is not in mixedCase
Parameter DividendPayingToken.withdrawnDividendOf(address)._owner (contracts/MetaWize.sol#1085) is not in mixedCase
Parameter DividendPayingToken.accumulativeDividendOf(address)._owner (contracts/MetaWize.sol#1095) is not in mixedCase
Constant DividendPayingToken.magnitude (contracts/MetaWize.sol#980) is not in UPPER_CASE_WITH_UNDERSCORES
Event MetaWizemarketingWalletUpdated(address,address) (contracts/MetaWize.sol#1209) is not in CapWords
Event MetaWizeliquidityReceiverWalletUpdated(address,address) (contracts/MetaWize.sol#1211) is not in CapWords
Parameter MetaWize.addPresaleAddressForExclusions(address,address)._presaleAddress (contracts/MetaWize.sol#1308) is not in mixedCase
Parameter MetaWize.addPresaleAddressForExclusions(address,address)._presaleRouterAddress (contracts/MetaWize.sol#1308) is not in mixedCase
Parameter MetaWize.emergencyPresaleAddressUpdate(address,address)._presaleAddress (contracts/MetaWize.sol#1319) is not in mixedCase
Parameter MetaWize.emergencyPresaleAddressUpdate(address,address)._presaleRouterAddress (contracts/MetaWize.sol#1319) is not in mixedCase
Parameter MetaWize.updateBuyFees(uint256,uint256,uint256)._marketingFee (contracts/MetaWize.sol#1354) is not in mixedCase
Parameter MetaWize.updateBuyFees(uint256,uint256,uint256)._rewardsFee (contracts/MetaWize.sol#1354) is not in mixedCase
Parameter MetaWize.updateBuyFees(uint256,uint256,uint256)._liquidityFee (contracts/MetaWize.sol#1354) is not in mixedCase
Parameter MetaWize.updateSellFees(uint256,uint256,uint256)._marketingFee (contracts/MetaWize.sol#1362) is not in mixedCase
Parameter MetaWize.updateSellFees(uint256,uint256,uint256)._rewardsFee (contracts/MetaWize.sol#1362) is not in mixedCase
Parameter MetaWize.updateSellFees(uint256,uint256,uint256)._liquidityFee (contracts/MetaWize.sol#1362) is not in mixedCase
Parameter MetaWize.blackList(address)._user (contracts/MetaWize.sol#1738) is not in mixedCase
Parameter MetaWize.removeFromBlacklist(address)._user (contracts/MetaWize.sol#1744) is not in mixedCase
Variable MetaWize._isExcludedMaxTransactionAmount (contracts/MetaWize.sol#1190) is not in mixedCase
Variable MetaWize._isBlacklisted (contracts/MetaWize.sol#1193) is not in mixedCase
Parameter DividendTracker.getAccount(address)._account (contracts/MetaWize.sol#1811) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (contracts/MetaWize.sol#15)" inContext (contracts/MetaWize.sol#9-18)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (contracts/MetaWize.sol#844) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (contracts/MetaWize.sol#845)
Variable DividendPayingToken._withdrawDividendOfUser(address)._withdrawableDividend (contracts/MetaWize.sol#1050) is too similar to DividendTracker.getAccount(address).withdrawableDividends (contracts/MetaWize.sol#1816)
Prevent variables from having similar names.
Additional information: link
MetaWize.updateGasForProcessing(uint256) (contracts/MetaWize.sol#1419-1424) uses literals with too many digits:
- require(bool,string)(newValue >= 200000 && newValue <= 500000, gasForProcessing must be between 200,000 and 500,000) (contracts/MetaWize.sol#1420)
MetaWize.slitherConstructorVariables() (contracts/MetaWize.sol#1134-1749) uses literals with too many digits:
- gasForProcessing = 400000 (contracts/MetaWize.sol#1183)
DividendTracker.getAccountAtIndex(uint256) (contracts/MetaWize.sol#1856-1873) uses literals with too many digits:
- (0x0000000000000000000000000000000000000000,- 1,- 1,0,0,0,0,0) (contracts/MetaWize.sol#1867)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
SafeMathInt.MAX_INT256 (contracts/MetaWize.sol#770) is never used in SafeMathInt (contracts/MetaWize.sol#768-826)
Remove unused state variables.
Additional information: link
MetaWize.liquidityActiveBlock (contracts/MetaWize.sol#1154) should be constant
MetaWize.maxWallet (contracts/MetaWize.sol#1152) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
get(IterableMapping.Map,address) should be declared external:
- IterableMapping.get(IterableMapping.Map,address) (contracts/MetaWize.sol#96-98)
getIndexOfKey(IterableMapping.Map,address) should be declared external:
- IterableMapping.getIndexOfKey(IterableMapping.Map,address) (contracts/MetaWize.sol#100-105)
getKeyAtIndex(IterableMapping.Map,uint256) should be declared external:
- IterableMapping.getKeyAtIndex(IterableMapping.Map,uint256) (contracts/MetaWize.sol#107-109)
size(IterableMapping.Map) should be declared external:
- IterableMapping.size(IterableMapping.Map) (contracts/MetaWize.sol#113-115)
name() should be declared external:
- ERC20.name() (contracts/MetaWize.sol#270-272)
symbol() should be declared external:
- ERC20.symbol() (contracts/MetaWize.sol#278-280)
decimals() should be declared external:
- ERC20.decimals() (contracts/MetaWize.sol#295-297)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (contracts/MetaWize.sol#321-324)
allowance(address,address) should be declared external:
- ERC20.allowance(address,address) (contracts/MetaWize.sol#329-331)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (contracts/MetaWize.sol#340-343)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (contracts/MetaWize.sol#358-366)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (contracts/MetaWize.sol#380-383)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (contracts/MetaWize.sol#399-402)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (contracts/MetaWize.sol#750-753)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (contracts/MetaWize.sol#759-763)
distributeTokenDividends(uint256) should be declared external:
- DividendPayingToken.distributeTokenDividends(uint256) (contracts/MetaWize.sol#1028-1039)
withdrawDividend() should be declared external:
- DividendPayingToken.withdrawDividend() (contracts/MetaWize.sol#1043-1045)
dividendOf(address) should be declared external:
- DividendPayingToken.dividendOf(address) (contracts/MetaWize.sol#1071-1073)
withdrawnDividendOf(address) should be declared external:
- DividendPayingToken.withdrawnDividendOf(address) (contracts/MetaWize.sol#1085-1087)
setAutomatedMarketMakerPair(address,bool) should be declared external:
- MetaWize.setAutomatedMarketMakerPair(address,bool) (contracts/MetaWize.sol#1389-1393)
isExcludedFromFees(address) should be declared external:
- MetaWize.isExcludedFromFees(address) (contracts/MetaWize.sol#1438-1440)
withdrawableDividendOf(address) should be declared external:
- MetaWize.withdrawableDividendOf(address) (contracts/MetaWize.sol#1442-1444)
dividendTokenBalanceOf(address) should be declared external:
- MetaWize.dividendTokenBalanceOf(address) (contracts/MetaWize.sol#1446-1448)
getAccountAtIndex(uint256) should be declared external:
- DividendTracker.getAccountAtIndex(uint256) (contracts/MetaWize.sol#1856-1873)
process(uint256) should be declared external:
- DividendTracker.process(uint256) (contracts/MetaWize.sol#1901-1945)
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