Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
eUGene.swapBack() (#1961-2005) sends eth to arbitrary user
Dangerous calls:
- (success,None) = address(liquidityWallet).call{value: ethForLiquidity}() (#1987)
- (success,None) = address(marketingWallet).call{value: ethForMarketing * percForMarketing / 100}() (#2000)
- (success,None) = address(marketingWallet).call{value: address(this).balance}() (#2003)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in eUGene._transfer(address,address,uint256) (#1739-1884):
External calls:
- swapBack() (#1798)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1926-1932)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(marketingWallet),block.timestamp) (#1907-1912)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (#1892-1897)
- (success,None) = address(charityWallet).call{value: ethForCharity}() (#1986)
- (success,None) = address(liquidityWallet).call{value: ethForLiquidity}() (#1987)
- success = IERC20(token).transfer(address(dividendTracker),tokenBalance) (#1992)
- dividendTracker.distributeTokenDividends(tokenBalance) (#1995)
- (success,None) = address(marketingWallet).call{value: ethForMarketing * percForMarketing / 100}() (#2000)
- (success,None) = address(marketingWallet).call{value: address(this).balance}() (#2003)
External calls sending eth:
- swapBack() (#1798)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(marketingWallet),block.timestamp) (#1907-1912)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (#1892-1897)
- (success,None) = address(charityWallet).call{value: ethForCharity}() (#1986)
- (success,None) = address(liquidityWallet).call{value: ethForLiquidity}() (#1987)
- (success,None) = address(marketingWallet).call{value: ethForMarketing * percForMarketing / 100}() (#2000)
- (success,None) = address(marketingWallet).call{value: address(this).balance}() (#2003)
State variables written after the call(s):
- super._transfer(from,address(this),fees) (#1865)
- _balances[sender] = _balances[sender].sub(amount,ERC20: transfer amount exceeds balance) (#428)
- _balances[recipient] = _balances[recipient].add(amount) (#429)
- super._transfer(from,to,amount) (#1871)
- _balances[sender] = _balances[sender].sub(amount,ERC20: transfer amount exceeds balance) (#428)
- _balances[recipient] = _balances[recipient].add(amount) (#429)
- swapping = false (#1799)
- tokensForCharity += fees * charityPenaltySellFee / totalPenaltySellFees (#1820)
- tokensForCharity += fees * charitySellFee / totalSellFees (#1828)
- tokensForCharity += fees * charityBuyFee / totalBuyFees (#1836)
- tokensForLiquidity += fees * liquidityPenaltySellFee / totalPenaltySellFees (#1818)
- tokensForLiquidity += fees * liquiditySellFee / totalSellFees (#1826)
- tokensForLiquidity += fees * liquidityBuyFee / totalBuyFees (#1834)
- tokensForMarketing += fees * marketingPenaltySellFee / totalPenaltySellFees (#1819)
- tokensForMarketing += fees * marketingSellFee / totalSellFees (#1827)
- tokensForMarketing += fees * marketingBuyFee / totalBuyFees (#1835)
- tokensForRewards += fees * rewardsPenaltySellFee / totalPenaltySellFees (#1817)
- tokensForRewards += fees * rewardsSellFee / totalSellFees (#1825)
- tokensForRewards += fees * rewardsBuyFee / totalBuyFees (#1833)
Apply the check-effects-interactions pattern.
Additional information: link
eUGene.swapBack() (#1961-2005) uses a dangerous strict equality:
- contractBalance == 0 || totalTokensToSwap == 0 (#1965)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
Contract locking ether found:
Contract DividendTracker (#1133-1338) has payable functions:
- DividendPayingToken.receive() (#1006-1008)
- DividendPayingToken.distributeDividends() (#1024-1026)
- DividendPayingTokenInterface.distributeDividends() (#547)
But does not have a function to withdraw the ether
Remove the payable attribute or add a withdraw function.
Additional information: link
eUGene.swapBack().success (#1967) is written in both
(success,None) = address(charityWallet).call{value: ethForCharity}() (#1986)
(success,None) = address(liquidityWallet).call{value: ethForLiquidity}() (#1987)
eUGene.swapBack().success (#1967) is written in both
(success,None) = address(liquidityWallet).call{value: ethForLiquidity}() (#1987)
success = IERC20(token).transfer(address(dividendTracker),tokenBalance) (#1992)
Fix or remove the writes.
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.
eUGene._transfer(address,address,uint256) (#1739-1884) performs a multiplication on the result of a division:
-tokensForRewards += fees * rewardsPenaltySellFee / totalPenaltySellFees (#1817)
-fees = amount.mul(totalSellFees).div(feeDivisor) (#1824)
eUGene._transfer(address,address,uint256) (#1739-1884) performs a multiplication on the result of a division:
-tokensForRewards += fees * rewardsSellFee / totalSellFees (#1825)
-fees = amount.mul(totalBuyFees).div(feeDivisor) (#1832)
eUGene._transfer(address,address,uint256) (#1739-1884) performs a multiplication on the result of a division:
-tokensForLiquidity += fees * liquidityPenaltySellFee / totalPenaltySellFees (#1818)
-fees = amount.mul(totalBuyFees).div(feeDivisor) (#1832)
eUGene._transfer(address,address,uint256) (#1739-1884) performs a multiplication on the result of a division:
-fees = amount.mul(totalBuyFees).div(feeDivisor) (#1832)
-tokensForRewards += fees * rewardsBuyFee / totalBuyFees (#1833)
eUGene._transfer(address,address,uint256) (#1739-1884) performs a multiplication on the result of a division:
-tokensForLiquidity += fees * liquiditySellFee / totalSellFees (#1826)
-fees = amount.mul(totalBuyFees).div(feeDivisor) (#1832)
eUGene._transfer(address,address,uint256) (#1739-1884) performs a multiplication on the result of a division:
-tokensForMarketing += fees * marketingPenaltySellFee / totalPenaltySellFees (#1819)
-fees = amount.mul(totalBuyFees).div(feeDivisor) (#1832)
eUGene._transfer(address,address,uint256) (#1739-1884) performs a multiplication on the result of a division:
-tokensForMarketing += fees * marketingSellFee / totalSellFees (#1827)
-fees = amount.mul(totalBuyFees).div(feeDivisor) (#1832)
eUGene._transfer(address,address,uint256) (#1739-1884) performs a multiplication on the result of a division:
-tokensForCharity += fees * charityPenaltySellFee / totalPenaltySellFees (#1820)
-fees = amount.mul(totalBuyFees).div(feeDivisor) (#1832)
eUGene._transfer(address,address,uint256) (#1739-1884) performs a multiplication on the result of a division:
-fees = amount.mul(totalBuyFees).div(feeDivisor) (#1832)
-tokensForLiquidity += fees * liquidityBuyFee / totalBuyFees (#1834)
eUGene._transfer(address,address,uint256) (#1739-1884) performs a multiplication on the result of a division:
-tokensForCharity += fees * charitySellFee / totalSellFees (#1828)
-fees = amount.mul(totalBuyFees).div(feeDivisor) (#1832)
eUGene._transfer(address,address,uint256) (#1739-1884) performs a multiplication on the result of a division:
-fees = amount.mul(totalBuyFees).div(feeDivisor) (#1832)
-tokensForMarketing += fees * marketingBuyFee / totalBuyFees (#1835)
eUGene._transfer(address,address,uint256) (#1739-1884) performs a multiplication on the result of a division:
-fees = amount.mul(totalBuyFees).div(feeDivisor) (#1832)
-tokensForCharity += fees * charityBuyFee / totalBuyFees (#1836)
eUGene._transfer(address,address,uint256) (#1739-1884) performs a multiplication on the result of a division:
-walletSellPenaltyEndTime[to] = walletSellPenaltyEndTime[to] + (penaltyDuration * (amount * 1e18 / holderBalance_scope_0)) / 1e18 (#1856)
eUGene._transfer(address,address,uint256) (#1739-1884) performs a multiplication on the result of a division:
-walletSellPenaltyEndTime[to] = walletSellPenaltyEndTime[to] + (penaltyDuration * (amount * 1e18 / holderBalance)) / 1e18 (#1843)
eUGene.getHolderPenaltySellTax(address) (#1952-1959) performs a multiplication on the result of a division:
-walletPenaltyTax = (penaltyTax * (timeRemainingForPenalty * 1e9 / penaltyDuration)) / 1e9 (#1956)
eUGene.swapBack() (#1961-2005) performs a multiplication on the result of a division:
-ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap) (#1975)
-(success,None) = address(marketingWallet).call{value: ethForMarketing * percForMarketing / 100}() (#2000)
Consider ordering multiplication before division.
Additional information: link
Reentrancy in DividendPayingToken._withdrawDividendOfUser(address) (#1049-1065):
External calls:
- success = IERC20(token).transfer(user,_withdrawableDividend) (#1054)
State variables written after the call(s):
- withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend) (#1057)
Reentrancy in eUGene.constructor() (#1449-1519):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#1486-1487)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1492)
- dividendTracker.excludeFromDividends(pair) (#1627)
- dividendTracker.excludeFromDividends(address(dividendTracker)) (#1495)
- dividendTracker.excludeFromDividends(address(this)) (#1496)
- dividendTracker.excludeFromDividends(newOwner) (#1497)
- dividendTracker.excludeFromDividends(address(_uniswapV2Router)) (#1498)
- dividendTracker.excludeFromDividends(address(0xdead)) (#1499)
State variables written after the call(s):
- transferOwnership(newOwner) (#1518)
- _owner = newOwner (#762)
Reentrancy in eUGene.swapBack() (#1961-2005):
External calls:
- swapTokensForEth(contractBalance) (#1971)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1926-1932)
State variables written after the call(s):
- tokensForCharity = 0 (#1983)
- tokensForLiquidity = 0 (#1980)
- tokensForMarketing = 0 (#1981)
- tokensForRewards = 0 (#1982)
Apply the check-effects-interactions pattern.
Additional information: link
eUGene._transfer(address,address,uint256) (#1739-1884) uses tx.origin for authorization: require(bool,string)(_holderLastTransferTimestamp[tx.origin] < block.number,_transfer:: Transfer Delay enabled. Only one purchase per block allowed.) (#1769)
Do not use tx.origin for authorization.
Additional information: link
eUGene._transfer(address,address,uint256).claims (#1879) is a local variable never initialized
eUGene._transfer(address,address,uint256).iterations (#1879) is a local variable never initialized
eUGene._transfer(address,address,uint256).lastProcessedIndex (#1879) 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
eUGene.claim() (#1716-1718) ignores return value by dividendTracker.processAccount(address(msg.sender),false) (#1717)
eUGene._transfer(address,address,uint256) (#1739-1884) ignores return value by dividendTracker.process(gas) (#1879-1882)
eUGene.addLiquidity(uint256,uint256) (#1936-1950) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0xdead),block.timestamp) (#1941-1948)
Ensure that all the return values of the function calls are used.
Additional information: link
DividendPayingToken.dividendOf(address)._owner (#1071) shadows:
- Ownable._owner (#715) (state variable)
DividendPayingToken.withdrawableDividendOf(address)._owner (#1078) shadows:
- Ownable._owner (#715) (state variable)
DividendPayingToken.withdrawnDividendOf(address)._owner (#1085) shadows:
- Ownable._owner (#715) (state variable)
DividendPayingToken.accumulativeDividendOf(address)._owner (#1095) shadows:
- Ownable._owner (#715) (state variable)
eUGene.constructor().totalSupply (#1452) shadows:
- ERC20.totalSupply() (#302-304) (function)
- IERC20.totalSupply() (#152) (function)
Rename the local variables that shadow another component.
Additional information: link
Context._msgData() (#14-17) is never used and should be removed
ERC20._burn(address,uint256) (#463-471) is never used and should be removed
SafeMath.mod(uint256,uint256) (#692-694) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#708-711) is never used and should be removed
SafeMathInt.abs(int256) (#816-819) is never used and should be removed
SafeMathInt.div(int256,int256) (#787-793) is never used and should be removed
SafeMathInt.mul(int256,int256) (#775-782) is never used and should be removed
eUGene.addLiquidity(uint256,uint256) (#1936-1950) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version0.8.9 (#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
eUGene.updateSwapTokensAtAmount(uint256) (#1544-1549) should emit an event for:
- swapTokensAtAmount = newAmount (#1547)
eUGene.updateMaxAmount(uint256) (#1558-1561) should emit an event for:
- maxTransactionAmount = newNum * (10 ** 18) (#1560)
eUGene.updateBuyFees(uint256,uint256,uint256,uint256) (#1563-1570) should emit an event for:
- marketingBuyFee = _marketingFee (#1564)
- rewardsBuyFee = _rewardsFee (#1565)
- liquidityBuyFee = _liquidityFee (#1566)
- charityBuyFee = _charityFee (#1567)
- totalBuyFees = marketingBuyFee + rewardsBuyFee + liquidityBuyFee + charityBuyFee (#1568)
eUGene.updateSellFees(uint256,uint256,uint256,uint256) (#1572-1579) should emit an event for:
- marketingSellFee = _marketingFee (#1573)
- rewardsSellFee = _rewardsFee (#1574)
- liquiditySellFee = _liquidityFee (#1575)
- charitySellFee = _charityFee (#1576)
- totalSellFees = marketingSellFee + rewardsSellFee + liquiditySellFee + charitySellFee (#1577)
eUGene.updatePenaltySellFees(uint256,uint256,uint256,uint256) (#1581-1589) should emit an event for:
- marketingPenaltySellFee = _marketingFee (#1582)
- rewardsPenaltySellFee = _rewardsFee (#1583)
- liquidityPenaltySellFee = _liquidityFee (#1584)
- charityPenaltySellFee = _charityFee (#1585)
- totalPenaltySellFees = marketingPenaltySellFee + rewardsPenaltySellFee + liquidityPenaltySellFee + charityPenaltySellFee (#1586)
eUGene.marketingBuyBackSettings(bool,uint256) (#2012-2016) should emit an event for:
- percForMarketing = _percForMarketing (#2014)
Emit an event for critical parameter changes.
Additional information: link
DividendPayingToken._withdrawDividendOfUser(address) (#1049-1065) has external calls inside a loop: success = IERC20(token).transfer(user,_withdrawableDividend) (#1054)
Favor pull over push strategy for external calls.
Additional information: link
Variable 'eUGene._transfer(address,address,uint256).iterations (#1879)' in eUGene._transfer(address,address,uint256) (#1739-1884) potentially used before declaration: ProcessedDividendTracker(iterations,claims,lastProcessedIndex,true,gas,tx.origin) (#1880)
Variable 'eUGene._transfer(address,address,uint256).lastProcessedIndex (#1879)' in eUGene._transfer(address,address,uint256) (#1739-1884) potentially used before declaration: ProcessedDividendTracker(iterations,claims,lastProcessedIndex,true,gas,tx.origin) (#1880)
Variable 'eUGene._transfer(address,address,uint256).claims (#1879)' in eUGene._transfer(address,address,uint256) (#1739-1884) potentially used before declaration: ProcessedDividendTracker(iterations,claims,lastProcessedIndex,true,gas,tx.origin) (#1880)
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 eUGene._transfer(address,address,uint256) (#1739-1884):
External calls:
- swapBack() (#1798)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1926-1932)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(marketingWallet),block.timestamp) (#1907-1912)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (#1892-1897)
- (success,None) = address(charityWallet).call{value: ethForCharity}() (#1986)
- (success,None) = address(liquidityWallet).call{value: ethForLiquidity}() (#1987)
- success = IERC20(token).transfer(address(dividendTracker),tokenBalance) (#1992)
- dividendTracker.distributeTokenDividends(tokenBalance) (#1995)
- (success,None) = address(marketingWallet).call{value: ethForMarketing * percForMarketing / 100}() (#2000)
- (success,None) = address(marketingWallet).call{value: address(this).balance}() (#2003)
External calls sending eth:
- swapBack() (#1798)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(marketingWallet),block.timestamp) (#1907-1912)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (#1892-1897)
- (success,None) = address(charityWallet).call{value: ethForCharity}() (#1986)
- (success,None) = address(liquidityWallet).call{value: ethForLiquidity}() (#1987)
- (success,None) = address(marketingWallet).call{value: ethForMarketing * percForMarketing / 100}() (#2000)
- (success,None) = address(marketingWallet).call{value: address(this).balance}() (#2003)
State variables written after the call(s):
- walletLastBuy[to] = block.timestamp (#1848)
- walletLastBuy[to] = block.timestamp (#1861)
- walletSellPenaltyEndTime[to] = block.timestamp + penaltyDuration (#1840)
- walletSellPenaltyEndTime[to] = block.timestamp + penaltyDuration (#1845)
- walletSellPenaltyEndTime[to] = block.timestamp + penaltyDuration (#1853)
- walletSellPenaltyEndTime[to] = block.timestamp + penaltyDuration (#1858)
- walletSellPenaltyEndTime[to] = block.timestamp + penaltyDuration (#1843)
- walletSellPenaltyEndTime[to] = walletSellPenaltyEndTime[to] + (penaltyDuration * (amount * 1e18 / holderBalance)) / 1e18 (#1843)
- walletSellPenaltyEndTime[to] = block.timestamp + penaltyDuration (#1856)
- walletSellPenaltyEndTime[to] = walletSellPenaltyEndTime[to] + (penaltyDuration * (amount * 1e18 / holderBalance_scope_0)) / 1e18 (#1856)
Reentrancy in eUGene.constructor() (#1449-1519):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#1486-1487)
State variables written after the call(s):
- uniswapV2Pair = _uniswapV2Pair (#1490)
- uniswapV2Router = _uniswapV2Router (#1489)
Reentrancy in eUGene.constructor() (#1449-1519):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#1486-1487)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1492)
- dividendTracker.excludeFromDividends(pair) (#1627)
State variables written after the call(s):
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1492)
- _isExcludedMaxTransactionAmount[updAds] = isEx (#1592)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1492)
- automatedMarketMakerPairs[pair] = value (#1622)
Reentrancy in eUGene.constructor() (#1449-1519):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#1486-1487)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1492)
- dividendTracker.excludeFromDividends(pair) (#1627)
- dividendTracker.excludeFromDividends(address(dividendTracker)) (#1495)
- dividendTracker.excludeFromDividends(address(this)) (#1496)
- dividendTracker.excludeFromDividends(newOwner) (#1497)
- dividendTracker.excludeFromDividends(address(_uniswapV2Router)) (#1498)
- dividendTracker.excludeFromDividends(address(0xdead)) (#1499)
State variables written after the call(s):
- _createInitialSupply(address(newOwner),totalSupply) (#1517)
- _balances[account] = _balances[account].add(amount) (#448)
- excludeFromFees(newOwner,true) (#1502)
- _isExcludedFromFees[account] = excluded (#1597)
- excludeFromFees(address(this),true) (#1503)
- _isExcludedFromFees[account] = excluded (#1597)
- excludeFromFees(address(0xdead),true) (#1504)
- _isExcludedFromFees[account] = excluded (#1597)
- excludeFromMaxTransaction(newOwner,true) (#1506)
- _isExcludedMaxTransactionAmount[updAds] = isEx (#1592)
- excludeFromMaxTransaction(address(this),true) (#1507)
- _isExcludedMaxTransactionAmount[updAds] = isEx (#1592)
- excludeFromMaxTransaction(address(dividendTracker),true) (#1508)
- _isExcludedMaxTransactionAmount[updAds] = isEx (#1592)
- excludeFromMaxTransaction(address(_uniswapV2Router),true) (#1509)
- _isExcludedMaxTransactionAmount[updAds] = isEx (#1592)
- excludeFromMaxTransaction(address(0xdead),true) (#1510)
- _isExcludedMaxTransactionAmount[updAds] = isEx (#1592)
- _createInitialSupply(address(newOwner),totalSupply) (#1517)
- _totalSupply = _totalSupply.add(amount) (#447)
Reentrancy in DividendTracker.processAccount(address,bool) (#1327-1337):
External calls:
- amount = _withdrawDividendOfUser(account) (#1328)
- success = IERC20(token).transfer(user,_withdrawableDividend) (#1054)
State variables written after the call(s):
- lastClaimTimes[account] = block.timestamp (#1331)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in eUGene._setAutomatedMarketMakerPair(address,bool) (#1621-1631):
External calls:
- dividendTracker.excludeFromDividends(pair) (#1627)
Event emitted after the call(s):
- SetAutomatedMarketMakerPair(pair,value) (#1630)
Reentrancy in eUGene._transfer(address,address,uint256) (#1739-1884):
External calls:
- swapBack() (#1798)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1926-1932)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(marketingWallet),block.timestamp) (#1907-1912)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (#1892-1897)
- (success,None) = address(charityWallet).call{value: ethForCharity}() (#1986)
- (success,None) = address(liquidityWallet).call{value: ethForLiquidity}() (#1987)
- success = IERC20(token).transfer(address(dividendTracker),tokenBalance) (#1992)
- dividendTracker.distributeTokenDividends(tokenBalance) (#1995)
- (success,None) = address(marketingWallet).call{value: ethForMarketing * percForMarketing / 100}() (#2000)
- (success,None) = address(marketingWallet).call{value: address(this).balance}() (#2003)
External calls sending eth:
- swapBack() (#1798)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(marketingWallet),block.timestamp) (#1907-1912)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (#1892-1897)
- (success,None) = address(charityWallet).call{value: ethForCharity}() (#1986)
- (success,None) = address(liquidityWallet).call{value: ethForLiquidity}() (#1987)
- (success,None) = address(marketingWallet).call{value: ethForMarketing * percForMarketing / 100}() (#2000)
- (success,None) = address(marketingWallet).call{value: address(this).balance}() (#2003)
Event emitted after the call(s):
- Transfer(sender,recipient,amount) (#430)
- super._transfer(from,to,amount) (#1871)
- Transfer(sender,recipient,amount) (#430)
- super._transfer(from,address(this),fees) (#1865)
Reentrancy in eUGene._transfer(address,address,uint256) (#1739-1884):
External calls:
- swapBack() (#1798)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1926-1932)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(marketingWallet),block.timestamp) (#1907-1912)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (#1892-1897)
- (success,None) = address(charityWallet).call{value: ethForCharity}() (#1986)
- (success,None) = address(liquidityWallet).call{value: ethForLiquidity}() (#1987)
- success = IERC20(token).transfer(address(dividendTracker),tokenBalance) (#1992)
- dividendTracker.distributeTokenDividends(tokenBalance) (#1995)
- (success,None) = address(marketingWallet).call{value: ethForMarketing * percForMarketing / 100}() (#2000)
- (success,None) = address(marketingWallet).call{value: address(this).balance}() (#2003)
- dividendTracker.setBalance(address(from),balanceOf(from)) (#1873)
- dividendTracker.setBalance(address(to),balanceOf(to)) (#1874)
- dividendTracker.process(gas) (#1879-1882)
External calls sending eth:
- swapBack() (#1798)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(marketingWallet),block.timestamp) (#1907-1912)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (#1892-1897)
- (success,None) = address(charityWallet).call{value: ethForCharity}() (#1986)
- (success,None) = address(liquidityWallet).call{value: ethForLiquidity}() (#1987)
- (success,None) = address(marketingWallet).call{value: ethForMarketing * percForMarketing / 100}() (#2000)
- (success,None) = address(marketingWallet).call{value: address(this).balance}() (#2003)
Event emitted after the call(s):
- ProcessedDividendTracker(iterations,claims,lastProcessedIndex,true,gas,tx.origin) (#1880)
Reentrancy in eUGene.constructor() (#1449-1519):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#1486-1487)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1492)
- dividendTracker.excludeFromDividends(pair) (#1627)
Event emitted after the call(s):
- ExcludedMaxTransactionAmount(updAds,isEx) (#1593)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1492)
- SetAutomatedMarketMakerPair(pair,value) (#1630)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1492)
Reentrancy in eUGene.constructor() (#1449-1519):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#1486-1487)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1492)
- dividendTracker.excludeFromDividends(pair) (#1627)
- dividendTracker.excludeFromDividends(address(dividendTracker)) (#1495)
- dividendTracker.excludeFromDividends(address(this)) (#1496)
- dividendTracker.excludeFromDividends(newOwner) (#1497)
- dividendTracker.excludeFromDividends(address(_uniswapV2Router)) (#1498)
- dividendTracker.excludeFromDividends(address(0xdead)) (#1499)
Event emitted after the call(s):
- ExcludeFromFees(account,excluded) (#1599)
- excludeFromFees(address(0xdead),true) (#1504)
- ExcludeFromFees(account,excluded) (#1599)
- excludeFromFees(address(this),true) (#1503)
- ExcludeFromFees(account,excluded) (#1599)
- excludeFromFees(newOwner,true) (#1502)
- ExcludedMaxTransactionAmount(updAds,isEx) (#1593)
- excludeFromMaxTransaction(address(dividendTracker),true) (#1508)
- ExcludedMaxTransactionAmount(updAds,isEx) (#1593)
- excludeFromMaxTransaction(address(0xdead),true) (#1510)
- ExcludedMaxTransactionAmount(updAds,isEx) (#1593)
- excludeFromMaxTransaction(newOwner,true) (#1506)
- ExcludedMaxTransactionAmount(updAds,isEx) (#1593)
- excludeFromMaxTransaction(address(_uniswapV2Router),true) (#1509)
- ExcludedMaxTransactionAmount(updAds,isEx) (#1593)
- excludeFromMaxTransaction(address(this),true) (#1507)
- OwnershipTransferred(_owner,newOwner) (#761)
- transferOwnership(newOwner) (#1518)
- Transfer(address(0),account,amount) (#449)
- _createInitialSupply(address(newOwner),totalSupply) (#1517)
Reentrancy in eUGene.excludeFromDividends(address) (#1532-1535):
External calls:
- dividendTracker.excludeFromDividends(account) (#1533)
Event emitted after the call(s):
- ExcludeFromDividends(account) (#1534)
Reentrancy in eUGene.includeInDividends(address) (#1538-1541):
External calls:
- dividendTracker.includeInDividends(account) (#1539)
Event emitted after the call(s):
- IncludeInDividends(account) (#1540)
Reentrancy in DividendTracker.processAccount(address,bool) (#1327-1337):
External calls:
- amount = _withdrawDividendOfUser(account) (#1328)
- success = IERC20(token).transfer(user,_withdrawableDividend) (#1054)
Event emitted after the call(s):
- Claim(account,amount,automatic) (#1332)
Reentrancy in eUGene.processDividendTracker(uint256) (#1711-1714):
External calls:
- (iterations,claims,lastProcessedIndex) = dividendTracker.process(gas) (#1712)
Event emitted after the call(s):
- ProcessedDividendTracker(iterations,claims,lastProcessedIndex,false,gas,tx.origin) (#1713)
Reentrancy in eUGene.swapBack() (#1961-2005):
External calls:
- swapTokensForEth(contractBalance) (#1971)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1926-1932)
- (success,None) = address(charityWallet).call{value: ethForCharity}() (#1986)
- (success,None) = address(liquidityWallet).call{value: ethForLiquidity}() (#1987)
- swapBnbForRewardToken(ethForRewards) (#1989)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (#1892-1897)
- success = IERC20(token).transfer(address(dividendTracker),tokenBalance) (#1992)
- dividendTracker.distributeTokenDividends(tokenBalance) (#1995)
External calls sending eth:
- (success,None) = address(charityWallet).call{value: ethForCharity}() (#1986)
- (success,None) = address(liquidityWallet).call{value: ethForLiquidity}() (#1987)
- swapBnbForRewardToken(ethForRewards) (#1989)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(0,path,address(this),block.timestamp) (#1892-1897)
Event emitted after the call(s):
- SendDividends(tokenBalance,ethForRewards) (#1996)
Apply the check-effects-interactions pattern.
Additional information: link
DividendTracker.getAccount(address) (#1191-1234) uses timestamp for comparisons
Dangerous comparisons:
- nextClaimTime > block.timestamp (#1231-1233)
DividendTracker.canAutoClaim(uint256) (#1255-1261) uses timestamp for comparisons
Dangerous comparisons:
- lastClaimTime > block.timestamp (#1256)
- block.timestamp.sub(lastClaimTime) >= claimWait (#1260)
eUGene._transfer(address,address,uint256) (#1739-1884) uses timestamp for comparisons
Dangerous comparisons:
- amount == 0 (#1747)
- require(bool,string)(amount <= maxTransactionAmount,Buy transfer amount exceeds the maxTransactionAmount.) (#1776)
- require(bool,string)(amount <= maxTransactionAmount,Sell transfer amount exceeds the maxTransactionAmount.) (#1780)
- canSwap = contractTokenBalance >= swapTokensAtAmount (#1787)
- canSwap && swapEnabled && ! swapping && ! automatedMarketMakerPairs[from] && ! _isExcludedFromFees[from] && ! _isExcludedFromFees[to] (#1790-1795)
- automatedMarketMakerPairs[to] && totalPenaltySellFees > 0 && block.timestamp < walletSellPenaltyEndTime[from] (#1814)
- walletSellPenaltyEndTime[to] - penaltyDuration > block.timestamp (#1844)
- walletSellPenaltyEndTime[to] - penaltyDuration > block.timestamp (#1857)
- fees > 0 (#1864)
- amount >= holderBalance (#1843)
- amount >= holderBalance_scope_0 (#1856)
eUGene.getHolderPenaltySellTax(address) (#1952-1959) uses timestamp for comparisons
Dangerous comparisons:
- walletSellPenaltyEndTime[wallet] <= block.timestamp (#1953)
eUGene.swapBack() (#1961-2005) uses timestamp for comparisons
Dangerous comparisons:
- contractBalance == 0 || totalTokensToSwap == 0 (#1965)
Avoid relying on block.timestamp.
Additional information: link
Low level call in eUGene.swapBack() (#1961-2005):
- (success,None) = address(charityWallet).call{value: ethForCharity}() (#1986)
- (success,None) = address(liquidityWallet).call{value: ethForLiquidity}() (#1987)
- (success,None) = address(marketingWallet).call{value: ethForMarketing * percForMarketing / 100}() (#2000)
- (success,None) = address(marketingWallet).call{value: address(this).balance}() (#2003)
Low level call in eUGene.withdrawStuckEth() (#2007-2010):
- (success) = address(msg.sender).call{value: address(this).balance}() (#2008)
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() (#35) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#36) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#53) is not in mixedCase
Function IUniswapV2Router01.WETH() (#839) is not in mixedCase
Parameter DividendPayingToken.dividendOf(address)._owner (#1071) is not in mixedCase
Parameter DividendPayingToken.withdrawableDividendOf(address)._owner (#1078) is not in mixedCase
Parameter DividendPayingToken.withdrawnDividendOf(address)._owner (#1085) is not in mixedCase
Parameter DividendPayingToken.accumulativeDividendOf(address)._owner (#1095) is not in mixedCase
Constant DividendPayingToken.magnitude (#980) is not in UPPER_CASE_WITH_UNDERSCORES
Constant DividendPayingToken.token (#984) is not in UPPER_CASE_WITH_UNDERSCORES
Parameter DividendTracker.getAccount(address)._account (#1191) is not in mixedCase
Contract eUGene (#1341-2018) is not in CapWords
Event eUGenemarketingWalletUpdated(address,address) (#1426) is not in CapWords
Event eUGeneliquidityWalletUpdated(address,address) (#1427) is not in CapWords
Event eUGenecharityWalletUpdated(address,address) (#1428) is not in CapWords
Parameter eUGene.updateBuyFees(uint256,uint256,uint256,uint256)._marketingFee (#1563) is not in mixedCase
Parameter eUGene.updateBuyFees(uint256,uint256,uint256,uint256)._rewardsFee (#1563) is not in mixedCase
Parameter eUGene.updateBuyFees(uint256,uint256,uint256,uint256)._liquidityFee (#1563) is not in mixedCase
Parameter eUGene.updateBuyFees(uint256,uint256,uint256,uint256)._charityFee (#1563) is not in mixedCase
Parameter eUGene.updateSellFees(uint256,uint256,uint256,uint256)._marketingFee (#1572) is not in mixedCase
Parameter eUGene.updateSellFees(uint256,uint256,uint256,uint256)._rewardsFee (#1572) is not in mixedCase
Parameter eUGene.updateSellFees(uint256,uint256,uint256,uint256)._liquidityFee (#1572) is not in mixedCase
Parameter eUGene.updateSellFees(uint256,uint256,uint256,uint256)._charityFee (#1572) is not in mixedCase
Parameter eUGene.updatePenaltySellFees(uint256,uint256,uint256,uint256)._marketingFee (#1581) is not in mixedCase
Parameter eUGene.updatePenaltySellFees(uint256,uint256,uint256,uint256)._rewardsFee (#1581) is not in mixedCase
Parameter eUGene.updatePenaltySellFees(uint256,uint256,uint256,uint256)._liquidityFee (#1581) is not in mixedCase
Parameter eUGene.updatePenaltySellFees(uint256,uint256,uint256,uint256)._charityFee (#1581) is not in mixedCase
Parameter eUGene.marketingBuyBackSettings(bool,uint256)._buyBackEnabled (#2012) is not in mixedCase
Parameter eUGene.marketingBuyBackSettings(bool,uint256)._percForMarketing (#2012) is not in mixedCase
Constant eUGene.penaltyDuration (#1360) is not in UPPER_CASE_WITH_UNDERSCORES
Constant eUGene.token (#1362) is not in UPPER_CASE_WITH_UNDERSCORES
Variable eUGene._isExcludedMaxTransactionAmount (#1414) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#15)" inContext (#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 (#844) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#845)
Variable DividendPayingToken._withdrawDividendOfUser(address)._withdrawableDividend (#1050) is too similar to DividendTracker.getAccount(address).withdrawableDividends (#1196)
Prevent variables from having similar names.
Additional information: link
DividendTracker.getAccountAtIndex(uint256) (#1236-1253) uses literals with too many digits:
- (0x0000000000000000000000000000000000000000,- 1,- 1,0,0,0,0,0) (#1247)
eUGene.updateSwapTokensAtAmount(uint256) (#1544-1549) uses literals with too many digits:
- require(bool,string)(newAmount >= totalSupply() * 1 / 100000,Swap amount cannot be lower than 0.001% total supply.) (#1545)
eUGene.updateGasForProcessing(uint256) (#1654-1659) uses literals with too many digits:
- require(bool,string)(newValue >= 200000 && newValue <= 600000, gasForProcessing must be between 200,000 and 500,000) (#1655)
eUGene.slitherConstructorVariables() (#1341-2018) uses literals with too many digits:
- _totalSupply = 1000000000000000 (#248)
eUGene.slitherConstructorVariables() (#1341-2018) uses literals with too many digits:
- gasForProcessing = 400000 (#1407)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
SafeMathInt.MAX_INT256 (#770) is never used in SafeMathInt (#768-826)
Remove unused state variables.
Additional information: link
eUGene.feeDivisor (#1381) should be constant
eUGene.liquidityActiveBlock (#1367) should be constant
eUGene.presaleAddress (#1378) should be constant
eUGene.presaleRouterAddress (#1379) 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) (#96-98)
getIndexOfKey(IterableMapping.Map,address) should be declared external:
- IterableMapping.getIndexOfKey(IterableMapping.Map,address) (#100-105)
getKeyAtIndex(IterableMapping.Map,uint256) should be declared external:
- IterableMapping.getKeyAtIndex(IterableMapping.Map,uint256) (#107-109)
size(IterableMapping.Map) should be declared external:
- IterableMapping.size(IterableMapping.Map) (#113-115)
name() should be declared external:
- ERC20.name() (#270-272)
symbol() should be declared external:
- ERC20.symbol() (#278-280)
decimals() should be declared external:
- ERC20.decimals() (#295-297)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (#321-324)
allowance(address,address) should be declared external:
- ERC20.allowance(address,address) (#329-331)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (#340-343)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (#358-366)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (#380-383)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (#399-402)
distributeTokenDividends(uint256) should be declared external:
- DividendPayingToken.distributeTokenDividends(uint256) (#1028-1039)
withdrawDividend() should be declared external:
- DividendPayingToken.withdrawDividend() (#1043-1045)
dividendOf(address) should be declared external:
- DividendPayingToken.dividendOf(address) (#1071-1073)
withdrawnDividendOf(address) should be declared external:
- DividendPayingToken.withdrawnDividendOf(address) (#1085-1087)
getAccountAtIndex(uint256) should be declared external:
- DividendTracker.getAccountAtIndex(uint256) (#1236-1253)
process(uint256) should be declared external:
- DividendTracker.process(uint256) (#1281-1325)
setAutomatedMarketMakerPair(address,bool) should be declared external:
- eUGene.setAutomatedMarketMakerPair(address,bool) (#1615-1619)
isExcludedFromFees(address) should be declared external:
- eUGene.isExcludedFromFees(address) (#1673-1675)
withdrawableDividendOf(address) should be declared external:
- eUGene.withdrawableDividendOf(address) (#1677-1679)
dividendTokenBalanceOf(address) should be declared external:
- eUGene.dividendTokenBalanceOf(address) (#1681-1683)
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