GunGamersPro.swapAndLiquify(uint256) (#1702-1775) sends eth to arbitrary user
Dangerous calls:
- (sent) = marketAddress.call{value: marketFeeBalance}() (#1755)
- (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
- (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
GunGamersPro.swapAndSendDividends(uint256) (#1777-1797) sends eth to arbitrary user
Dangerous calls:
- (sent) = diviTracker.call{value: newBalance}() (#1790)
GunGamersPro.swapEthForTokens(uint256,address,address) (#1798-1811) sends eth to arbitrary user
Dangerous calls:
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
GunGamersPro.addLiquidity(uint256,uint256) (#1850-1865) sends eth to arbitrary user
Dangerous calls:
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,burnAddress,block.timestamp) (#1856-1863)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in GunGamersPro._transfer(address,address,uint256) (#1867-2038):
External calls:
- swapAndLiquify(swapTokensAtAmount) (#1979)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,burnAddress,block.timestamp) (#1856-1863)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1821-1827)
- (sent) = marketAddress.call{value: marketFeeBalance}() (#1755)
- (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
- (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
- swapAndSendDividends(sellTokens) (#1982)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1821-1827)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,recipient,block.timestamp) (#1841-1847)
- success = IERC20(DividendToken).transfer(address(dividendTracker),dividends) (#1784)
- (sent) = diviTracker.call{value: newBalance}() (#1790)
- dividendTracker.distributeTokenDividends(dividends) (#1794)
External calls sending eth:
- swapAndLiquify(swapTokensAtAmount) (#1979)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,burnAddress,block.timestamp) (#1856-1863)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = marketAddress.call{value: marketFeeBalance}() (#1755)
- (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
- (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
- swapAndSendDividends(sellTokens) (#1982)
- (sent) = diviTracker.call{value: newBalance}() (#1790)
State variables written after the call(s):
- super._transfer(from,address(this),feeAmount) (#2003)
- _balances[sender] = _balances[sender].sub(amount,ERC20: transfer amount exceeds balance) (#783)
- _balances[recipient] = _balances[recipient].add(amount) (#784)
- super._transfer(from,burnAddress,burnAmount) (#2004)
- _balances[sender] = _balances[sender].sub(amount,ERC20: transfer amount exceeds balance) (#783)
- _balances[recipient] = _balances[recipient].add(amount) (#784)
- super._transfer(from,burnAddress,burnAmount_scope_0) (#2012)
- _balances[sender] = _balances[sender].sub(amount,ERC20: transfer amount exceeds balance) (#783)
- _balances[recipient] = _balances[recipient].add(amount) (#784)
- super._transfer(from,to,amount) (#2017)
- _balances[sender] = _balances[sender].sub(amount,ERC20: transfer amount exceeds balance) (#783)
- _balances[recipient] = _balances[recipient].add(amount) (#784)
- restoreFees() (#2020)
- burnFee = previousBurnFee (#1407)
- restoreFees() (#2020)
- buyBackFee = previousBuyBackFee (#1404)
- restoreFees() (#2020)
- charityFee = previousCharityFee (#1403)
- restoreFees() (#2020)
- liquidityFee = previousLiquidityFee (#1406)
- restoreFees() (#2020)
- marketFee = previousMarketFee (#1402)
- swapping = false (#1984)
- restoreFees() (#2020)
- tokenRewardsFee = previousTokenRewardsFee (#1405)
- restoreFees() (#2020)
- totalFees = previousTotalFees (#1408)
Reentrancy in DividendPayingToken._withdrawDividendOfUser(address) (#1161-1185):
External calls:
- (sent) = user.call{value: _withdrawableDividend}() (#1168)
- success = IERC20(DividendToken).transfer(user,_withdrawableDividend) (#1172)
External calls sending eth:
- (sent) = user.call{value: _withdrawableDividend}() (#1168)
State variables written after the call(s):
- withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend) (#1177)
Apply the check-effects-interactions pattern.
Additional information: link
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
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.
Contract ownership is not renounced (belongs to a wallet)
Reentrancy in GunGamersPro.updateDividendTracker(address) (#1533-1547):
External calls:
- newDividendTracker.excludeFromDividends(address(newDividendTracker)) (#1540)
- newDividendTracker.excludeFromDividends(address(this)) (#1541)
- newDividendTracker.excludeFromDividends(address(uniswapV2Router)) (#1542)
State variables written after the call(s):
- dividendTracker = newDividendTracker (#1546)
Apply the check-effects-interactions pattern.
Additional information: link
GunGamersPro.swapAndLiquify(uint256).buyBackFeeBalance (#1736) is a local variable never initialized
GunGamersPro.swapAndLiquify(uint256).marketFeeBalance (#1734) is a local variable never initialized
GunGamersPro._transfer(address,address,uint256).claims (#2031) is a local variable never initialized
GunGamersPro._transfer(address,address,uint256).iterations (#2031) is a local variable never initialized
GunGamersPro.swapAndLiquify(uint256).charityFeeFull (#1704) is a local variable never initialized
GunGamersPro.swapAndLiquify(uint256).buyBackFeeFull (#1705) is a local variable never initialized
GunGamersPro._transfer(address,address,uint256).lastProcessedIndex (#2031) is a local variable never initialized
GunGamersPro.swapAndLiquify(uint256).charityFeeBalance (#1735) is a local variable never initialized
GunGamersPro.swapAndLiquify(uint256).marketFeeFull (#1703) 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
GunGamersPro.claim() (#1686-1688) ignores return value by dividendTracker.processAccount(msg.sender,false) (#1687)
GunGamersPro.addLiquidity(uint256,uint256) (#1850-1865) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,burnAddress,block.timestamp) (#1856-1863)
GunGamersPro._transfer(address,address,uint256) (#1867-2038) ignores return value by dividendTracker.process(gas) (#2031-2036)
Ensure that all the return values of the function calls are used.
Additional information: link
DividendPayingToken.constructor(string,string)._name (#1121) shadows:
- ERC20._name (#611) (state variable)
DividendPayingToken.constructor(string,string)._symbol (#1121) shadows:
- ERC20._symbol (#612) (state variable)
Rename the local variables that shadow another component.
Additional information: link
DividendPayingToken.updateMasterContract(address) (#1128-1130) should emit an event for:
- masterContract = newAddress (#1129)
Emit an event for critical parameter changes.
Additional information: link
GunGamersPro.updateSellLimitTime(uint256) (#1411-1413) should emit an event for:
- sellLimitTime = _newTime (#1412)
GunGamersPro.updateMaxSellTx(uint256) (#1415-1417) should emit an event for:
- maxSellTransactionAmount = _newAmountNoDecimals * (10 ** decimals()) (#1416)
GunGamersPro.updateSwapAtAmount(uint256) (#1423-1425) should emit an event for:
- swapTokensAtAmount = newAmountNoDecimials * (10 ** decimals()) (#1424)
GunGamersPro.updateMaxBuyTx(uint256) (#1427-1429) should emit an event for:
- maxBuyTransactionAmount = _newAmountNoDecimals * (10 ** decimals()) (#1428)
GunGamersPro.updatedividendTime(uint256) (#1431-1433) should emit an event for:
- dividendTime = _dividendTime (#1432)
GunGamersPro.updateTradingEnabledTime(uint256) (#1443-1445) should emit an event for:
- tradingEnabledTimestamp = newTimeInEpoch (#1444)
GunGamersPro.updateFees(uint256,uint256,uint256,uint256,uint256,uint256) (#1492-1500) should emit an event for:
- tokenRewardsFee = _tokenRewardsFee (#1493)
- liquidityFee = _liquidityFee (#1494)
- marketFee = _marketFee (#1495)
- charityFee = _charityFee (#1496)
- buyBackFee = _buyBackFee (#1497)
- burnFee = _burnFee (#1498)
- totalFees = _tokenRewardsFee.add(_liquidityFee).add(_marketFee).add(_charityFee).add(_buyBackFee).add(_burnFee) (#1499)
GunGamersPro.updateBuyFees(uint256,uint256,uint256,uint256,uint256,uint256) (#1502-1510) should emit an event for:
- buyTokenRewardsFee = _tokenRewardsFee (#1503)
- buyLiquidityFee = _liquidityFee (#1504)
- buyMarketFee = _marketFee (#1505)
- buyCharityFee = _charityFee (#1506)
- buyBuyBackFee = _buyBackFee (#1507)
- buyBurnFee = _burnFee (#1508)
- buyTotalFees = _tokenRewardsFee.add(_liquidityFee).add(_marketFee).add(_charityFee).add(_buyBackFee).add(_burnFee) (#1509)
GunGamersPro.updateSellFees(uint256,uint256,uint256,uint256,uint256,uint256) (#1512-1520) should emit an event for:
- sellTokenRewardsFee = _tokenRewardsFee (#1513)
- sellLiquidityFee = _liquidityFee (#1514)
- sellMarketFee = _marketFee (#1515)
- sellCharityFee = _charityFee (#1516)
- sellBuyBackFee = _buyBackFee (#1517)
- sellBurnFee = _burnFee (#1518)
- sellTotalFees = _tokenRewardsFee.add(_liquidityFee).add(_marketFee).add(_charityFee).add(_buyBackFee).add(_burnFee) (#1519)
Emit an event for critical parameter changes.
Additional information: link
GunGamersPro.updateTokenForDividend(address).newAddress (#1452) lacks a zero-check on :
- DividendToken = newAddress (#1454)
GunGamersPro.updateMarketAddress(address).newAddress (#1458) lacks a zero-check on :
- marketAddress = newAddress (#1459)
GunGamersPro.updateCharityAddress(address).newAddress (#1464) lacks a zero-check on :
- charityAddress = newAddress (#1465)
GunGamersPro.updateBuyBackAddress(address).newAddress (#1470) lacks a zero-check on :
- buyBackAddress = newAddress (#1471)
GunGamersPro.updateMarketTokenFeeAddress(address).newAddress (#1476) lacks a zero-check on :
- marketTokenAddressForFee = newAddress (#1477)
GunGamersPro.updateCharityTokenFeeAddress(address).newAddress (#1480) lacks a zero-check on :
- charityTokenAddressForFee = newAddress (#1481)
GunGamersPro.updateBuyBackTokenFeeAddress(address).newAddress (#1484) lacks a zero-check on :
- buyBackTokenAddressForFee = newAddress (#1485)
GunGamersPro.whitelistDxSale(address,address)._presaleAddress (#1522) lacks a zero-check on :
- presaleAddress = _presaleAddress (#1523)
DividendPayingToken.updateMasterContract(address).newAddress (#1128) lacks a zero-check on :
- masterContract = newAddress (#1129)
GunGamersProDividendTracker.updateTokenForDividend(address).newAddress (#2071) lacks a zero-check on :
- DividendToken = newAddress (#2072)
Check that the address is not zero.
Additional information: link
DividendPayingToken._withdrawDividendOfUser(address) (#1161-1185) has external calls inside a loop: (sent) = user.call{value: _withdrawableDividend}() (#1168)
DividendPayingToken._withdrawDividendOfUser(address) (#1161-1185) has external calls inside a loop: success = IERC20(DividendToken).transfer(user,_withdrawableDividend) (#1172)
Favor pull over push strategy for external calls.
Additional information: link
Variable 'GunGamersPro.swapAndLiquify(uint256).sent (#1755)' in GunGamersPro.swapAndLiquify(uint256) (#1702-1775) potentially used before declaration: (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
Variable 'GunGamersPro.swapAndLiquify(uint256).sent (#1755)' in GunGamersPro.swapAndLiquify(uint256) (#1702-1775) potentially used before declaration: (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
Variable 'GunGamersPro._transfer(address,address,uint256).claims (#2031)' in GunGamersPro._transfer(address,address,uint256) (#1867-2038) potentially used before declaration: ProcessedDividendTracker(iterations,claims,lastProcessedIndex,true,gas,tx.origin) (#2032)
Variable 'GunGamersPro._transfer(address,address,uint256).iterations (#2031)' in GunGamersPro._transfer(address,address,uint256) (#1867-2038) potentially used before declaration: ProcessedDividendTracker(iterations,claims,lastProcessedIndex,true,gas,tx.origin) (#2032)
Variable 'GunGamersPro._transfer(address,address,uint256).lastProcessedIndex (#2031)' in GunGamersPro._transfer(address,address,uint256) (#1867-2038) potentially used before declaration: ProcessedDividendTracker(iterations,claims,lastProcessedIndex,true,gas,tx.origin) (#2032)
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 GunGamersPro._transfer(address,address,uint256) (#1867-2038):
External calls:
- swapAndLiquify(swapTokensAtAmount) (#1979)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,burnAddress,block.timestamp) (#1856-1863)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1821-1827)
- (sent) = marketAddress.call{value: marketFeeBalance}() (#1755)
- (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
- (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
- swapAndSendDividends(sellTokens) (#1982)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1821-1827)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,recipient,block.timestamp) (#1841-1847)
- success = IERC20(DividendToken).transfer(address(dividendTracker),dividends) (#1784)
- (sent) = diviTracker.call{value: newBalance}() (#1790)
- dividendTracker.distributeTokenDividends(dividends) (#1794)
External calls sending eth:
- swapAndLiquify(swapTokensAtAmount) (#1979)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,burnAddress,block.timestamp) (#1856-1863)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = marketAddress.call{value: marketFeeBalance}() (#1755)
- (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
- (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
- swapAndSendDividends(sellTokens) (#1982)
- (sent) = diviTracker.call{value: newBalance}() (#1790)
State variables written after the call(s):
- swapAndSendDividends(sellTokens) (#1982)
- _allowances[owner][spender] = amount (#845)
Reentrancy in GunGamersPro._transfer(address,address,uint256) (#1867-2038):
External calls:
- swapAndLiquify(swapTokensAtAmount) (#1979)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,burnAddress,block.timestamp) (#1856-1863)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1821-1827)
- (sent) = marketAddress.call{value: marketFeeBalance}() (#1755)
- (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
- (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
- swapAndSendDividends(sellTokens) (#1982)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1821-1827)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,recipient,block.timestamp) (#1841-1847)
- success = IERC20(DividendToken).transfer(address(dividendTracker),dividends) (#1784)
- (sent) = diviTracker.call{value: newBalance}() (#1790)
- dividendTracker.distributeTokenDividends(dividends) (#1794)
- dividendTracker.setBalance(address(from),balanceOf(from)) (#2023)
- dividendTracker.setBalance(address(to),balanceOf(to)) (#2024)
External calls sending eth:
- swapAndLiquify(swapTokensAtAmount) (#1979)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,burnAddress,block.timestamp) (#1856-1863)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = marketAddress.call{value: marketFeeBalance}() (#1755)
- (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
- (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
- swapAndSendDividends(sellTokens) (#1982)
- (sent) = diviTracker.call{value: newBalance}() (#1790)
State variables written after the call(s):
- processDividendTime += dividendTime (#2030)
Reentrancy in GunGamersPro.constructor() (#1350-1388):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#1360-1361)
State variables written after the call(s):
- uniswapV2Pair = _uniswapV2Pair (#1364)
- uniswapV2Router = _uniswapV2Router (#1363)
Reentrancy in GunGamersPro.constructor() (#1350-1388):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#1360-1361)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1366)
- dividendTracker.excludeFromDividends(pair) (#1614)
- dividendTracker.excludeFromDividends(address(dividendTracker)) (#1368)
- dividendTracker.excludeFromDividends(address(this)) (#1369)
- dividendTracker.excludeFromDividends(address(_uniswapV2Router)) (#1370)
- dividendTracker.excludeFromDividends(owner()) (#1371)
State variables written after the call(s):
- _mint(owner(),100000000 * (10 ** decimals())) (#1387)
- _balances[account] = _balances[account].add(amount) (#803)
- excludeFromFees(burnAddress,true) (#1378)
- _isExcludedFromFees[account] = excluded (#1557)
- excludeFromFees(address(this),true) (#1379)
- _isExcludedFromFees[account] = excluded (#1557)
- excludeFromFees(owner(),true) (#1380)
- _isExcludedFromFees[account] = excluded (#1557)
- _mint(owner(),100000000 * (10 ** decimals())) (#1387)
- _totalSupply = _totalSupply.add(amount) (#802)
- canTransferBeforeTradingIsEnabled[owner()] = true (#1382)
Reentrancy in GunGamersProDividendTracker.processAccount(address,bool) (#2250-2260):
External calls:
- amount = _withdrawDividendOfUser(account) (#2251)
- (sent) = user.call{value: _withdrawableDividend}() (#1168)
- success = IERC20(DividendToken).transfer(user,_withdrawableDividend) (#1172)
External calls sending eth:
- amount = _withdrawDividendOfUser(account) (#2251)
- (sent) = user.call{value: _withdrawableDividend}() (#1168)
State variables written after the call(s):
- lastClaimTimes[account] = block.timestamp (#2254)
Reentrancy in GunGamersPro.swapAndLiquify(uint256) (#1702-1775):
External calls:
- swapTokensForEth(initHalf) (#1730)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1821-1827)
- swapEthForTokens(marketFeeBalance,marketTokenAddressForFee,marketAddress) (#1753)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = marketAddress.call{value: marketFeeBalance}() (#1755)
- swapEthForTokens(charityFeeBalance,charityTokenAddressForFee,charityAddress) (#1760)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
- swapEthForTokens(buyBackFeeBalance,address(this),buyBackAddress) (#1767)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
- addLiquidity(finalHalf,finalBalance) (#1773)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,burnAddress,block.timestamp) (#1856-1863)
External calls sending eth:
- swapEthForTokens(marketFeeBalance,marketTokenAddressForFee,marketAddress) (#1753)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = marketAddress.call{value: marketFeeBalance}() (#1755)
- swapEthForTokens(charityFeeBalance,charityTokenAddressForFee,charityAddress) (#1760)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
- swapEthForTokens(buyBackFeeBalance,address(this),buyBackAddress) (#1767)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
- addLiquidity(finalHalf,finalBalance) (#1773)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,burnAddress,block.timestamp) (#1856-1863)
State variables written after the call(s):
- addLiquidity(finalHalf,finalBalance) (#1773)
- _allowances[owner][spender] = amount (#845)
Reentrancy in GunGamersPro.updateTokenForDividend(address) (#1452-1456):
External calls:
- dividendTracker.updateTokenForDividend(newAddress) (#1453)
State variables written after the call(s):
- DividendToken = newAddress (#1454)
Reentrancy in GunGamersPro.whitelistDxSale(address,address) (#1522-1531):
External calls:
- dividendTracker.excludeFromDividends(_presaleAddress) (#1525)
State variables written after the call(s):
- excludeFromFees(_presaleAddress,true) (#1526)
- _isExcludedFromFees[account] = excluded (#1557)
- canTransferBeforeTradingIsEnabled[_routerAddress] = true (#1528)
Reentrancy in GunGamersPro.whitelistDxSale(address,address) (#1522-1531):
External calls:
- dividendTracker.excludeFromDividends(_presaleAddress) (#1525)
- dividendTracker.excludeFromDividends(_routerAddress) (#1529)
State variables written after the call(s):
- excludeFromFees(_routerAddress,true) (#1530)
- _isExcludedFromFees[account] = excluded (#1557)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in GunGamersPro._setAutomatedMarketMakerPair(address,bool) (#1609-1618):
External calls:
- dividendTracker.excludeFromDividends(pair) (#1614)
Event emitted after the call(s):
- SetAutomatedMarketMakerPair(pair,value) (#1617)
Reentrancy in GunGamersPro._transfer(address,address,uint256) (#1867-2038):
External calls:
- swapAndLiquify(swapTokensAtAmount) (#1979)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,burnAddress,block.timestamp) (#1856-1863)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1821-1827)
- (sent) = marketAddress.call{value: marketFeeBalance}() (#1755)
- (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
- (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
- swapAndSendDividends(sellTokens) (#1982)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1821-1827)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,recipient,block.timestamp) (#1841-1847)
- success = IERC20(DividendToken).transfer(address(dividendTracker),dividends) (#1784)
- (sent) = diviTracker.call{value: newBalance}() (#1790)
- dividendTracker.distributeTokenDividends(dividends) (#1794)
External calls sending eth:
- swapAndLiquify(swapTokensAtAmount) (#1979)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,burnAddress,block.timestamp) (#1856-1863)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = marketAddress.call{value: marketFeeBalance}() (#1755)
- (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
- (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
- swapAndSendDividends(sellTokens) (#1982)
- (sent) = diviTracker.call{value: newBalance}() (#1790)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#846)
- swapAndSendDividends(sellTokens) (#1982)
- SendDividends(tokens,dividends) (#1795)
- swapAndSendDividends(sellTokens) (#1982)
- Transfer(sender,recipient,amount) (#785)
- super._transfer(from,burnAddress,burnAmount_scope_0) (#2012)
- Transfer(sender,recipient,amount) (#785)
- super._transfer(from,to,amount) (#2017)
- Transfer(sender,recipient,amount) (#785)
- super._transfer(from,burnAddress,burnAmount) (#2004)
- Transfer(sender,recipient,amount) (#785)
- super._transfer(from,address(this),feeAmount) (#2003)
Reentrancy in GunGamersPro._transfer(address,address,uint256) (#1867-2038):
External calls:
- swapAndLiquify(swapTokensAtAmount) (#1979)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,burnAddress,block.timestamp) (#1856-1863)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1821-1827)
- (sent) = marketAddress.call{value: marketFeeBalance}() (#1755)
- (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
- (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
- swapAndSendDividends(sellTokens) (#1982)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1821-1827)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,recipient,block.timestamp) (#1841-1847)
- success = IERC20(DividendToken).transfer(address(dividendTracker),dividends) (#1784)
- (sent) = diviTracker.call{value: newBalance}() (#1790)
- dividendTracker.distributeTokenDividends(dividends) (#1794)
- dividendTracker.setBalance(address(from),balanceOf(from)) (#2023)
- dividendTracker.setBalance(address(to),balanceOf(to)) (#2024)
- dividendTracker.process(gas) (#2031-2036)
External calls sending eth:
- swapAndLiquify(swapTokensAtAmount) (#1979)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,burnAddress,block.timestamp) (#1856-1863)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = marketAddress.call{value: marketFeeBalance}() (#1755)
- (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
- (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
- swapAndSendDividends(sellTokens) (#1982)
- (sent) = diviTracker.call{value: newBalance}() (#1790)
Event emitted after the call(s):
- ProcessedDividendTracker(iterations,claims,lastProcessedIndex,true,gas,tx.origin) (#2032)
Reentrancy in DividendPayingToken._withdrawDividendOfUser(address) (#1161-1185):
External calls:
- (sent) = user.call{value: _withdrawableDividend}() (#1168)
Event emitted after the call(s):
- DividendWithdrawn(user,_withdrawableDividend,DividendToken) (#1170)
Reentrancy in DividendPayingToken._withdrawDividendOfUser(address) (#1161-1185):
External calls:
- success = IERC20(DividendToken).transfer(user,_withdrawableDividend) (#1172)
Event emitted after the call(s):
- DividendWithdrawn(user,_withdrawableDividend,DividendToken) (#1173)
Reentrancy in GunGamersPro.constructor() (#1350-1388):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#1360-1361)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1366)
- dividendTracker.excludeFromDividends(pair) (#1614)
Event emitted after the call(s):
- SetAutomatedMarketMakerPair(pair,value) (#1617)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1366)
Reentrancy in GunGamersPro.constructor() (#1350-1388):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#1360-1361)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1366)
- dividendTracker.excludeFromDividends(pair) (#1614)
- dividendTracker.excludeFromDividends(address(dividendTracker)) (#1368)
- dividendTracker.excludeFromDividends(address(this)) (#1369)
- dividendTracker.excludeFromDividends(address(_uniswapV2Router)) (#1370)
- dividendTracker.excludeFromDividends(owner()) (#1371)
Event emitted after the call(s):
- Transfer(address(0),account,amount) (#804)
- _mint(owner(),100000000 * (10 ** decimals())) (#1387)
Reentrancy in GunGamersProDividendTracker.processAccount(address,bool) (#2250-2260):
External calls:
- amount = _withdrawDividendOfUser(account) (#2251)
- (sent) = user.call{value: _withdrawableDividend}() (#1168)
- success = IERC20(DividendToken).transfer(user,_withdrawableDividend) (#1172)
External calls sending eth:
- amount = _withdrawDividendOfUser(account) (#2251)
- (sent) = user.call{value: _withdrawableDividend}() (#1168)
Event emitted after the call(s):
- Claim(account,amount,automatic) (#2255)
Reentrancy in GunGamersPro.processDividendTracker(uint256) (#1681-1684):
External calls:
- (iterations,claims,lastProcessedIndex) = dividendTracker.process(gas) (#1682)
Event emitted after the call(s):
- ProcessedDividendTracker(iterations,claims,lastProcessedIndex,false,gas,tx.origin) (#1683)
Reentrancy in GunGamersPro.swapAndLiquify(uint256) (#1702-1775):
External calls:
- swapTokensForEth(initHalf) (#1730)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1821-1827)
- swapEthForTokens(marketFeeBalance,marketTokenAddressForFee,marketAddress) (#1753)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = marketAddress.call{value: marketFeeBalance}() (#1755)
- swapEthForTokens(charityFeeBalance,charityTokenAddressForFee,charityAddress) (#1760)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
- swapEthForTokens(buyBackFeeBalance,address(this),buyBackAddress) (#1767)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
- addLiquidity(finalHalf,finalBalance) (#1773)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,burnAddress,block.timestamp) (#1856-1863)
External calls sending eth:
- swapEthForTokens(marketFeeBalance,marketTokenAddressForFee,marketAddress) (#1753)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = marketAddress.call{value: marketFeeBalance}() (#1755)
- swapEthForTokens(charityFeeBalance,charityTokenAddressForFee,charityAddress) (#1760)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
- swapEthForTokens(buyBackFeeBalance,address(this),buyBackAddress) (#1767)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(0,path,receiver,block.timestamp) (#1805-1810)
- (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
- addLiquidity(finalHalf,finalBalance) (#1773)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,burnAddress,block.timestamp) (#1856-1863)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#846)
- addLiquidity(finalHalf,finalBalance) (#1773)
- SwapAndLiquify(half,finalBalance,otherHalf) (#1774)
Reentrancy in GunGamersPro.swapAndSendDividends(uint256) (#1777-1797):
External calls:
- swapTokensForTokens(tokens,address(this)) (#1782)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,recipient,block.timestamp) (#1841-1847)
- success = IERC20(DividendToken).transfer(address(dividendTracker),dividends) (#1784)
- swapTokensForEth(tokens) (#1787)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1821-1827)
- (sent) = diviTracker.call{value: newBalance}() (#1790)
- dividendTracker.distributeTokenDividends(dividends) (#1794)
External calls sending eth:
- (sent) = diviTracker.call{value: newBalance}() (#1790)
Event emitted after the call(s):
- SendDividends(tokens,dividends) (#1795)
Reentrancy in GunGamersPro.updateDividendTracker(address) (#1533-1547):
External calls:
- newDividendTracker.excludeFromDividends(address(newDividendTracker)) (#1540)
- newDividendTracker.excludeFromDividends(address(this)) (#1541)
- newDividendTracker.excludeFromDividends(address(uniswapV2Router)) (#1542)
Event emitted after the call(s):
- UpdateDividendTracker(newAddress,address(dividendTracker)) (#1544)
Reentrancy in GunGamersPro.updateTokenForDividend(address) (#1452-1456):
External calls:
- dividendTracker.updateTokenForDividend(newAddress) (#1453)
Event emitted after the call(s):
- UpdateDividendToken(newAddress,address(DividendToken)) (#1455)
Apply the check-effects-interactions pattern.
Additional information: link
GunGamersPro.getTradingIsEnabled() (#1698-1700) uses timestamp for comparisons
Dangerous comparisons:
- block.timestamp >= tradingEnabledTimestamp (#1699)
GunGamersPro._transfer(address,address,uint256) (#1867-2038) uses timestamp for comparisons
Dangerous comparisons:
- from != owner() && ! swapping && tradingIsEnabled && automatedMarketMakerPairs[to] && from != address(uniswapV2Router) && ! _isExcludedFromFees[to] (#1919-1924)
- firstsell[from] + sellLimitTime < block.timestamp (#1928)
- tradingIsEnabled && canSwap && ! swapping && ! automatedMarketMakerPairs[from] && from != burnAddress && to != burnAddress (#1968-1973)
- takeFee = tradingIsEnabled && ! swapping (#1988)
- takeFee || buyOrSell (#1995)
- canDividend = block.timestamp >= processDividendTime (#2026)
- ! swapping && canDividend (#2028)
GunGamersProDividendTracker.getAccount(address) (#2114-2157) uses timestamp for comparisons
Dangerous comparisons:
- nextClaimTime > block.timestamp (#2154-2156)
GunGamersProDividendTracker.canAutoClaim(uint256) (#2178-2184) uses timestamp for comparisons
Dangerous comparisons:
- lastClaimTime > block.timestamp (#2179)
- block.timestamp.sub(lastClaimTime) >= claimWait (#2183)
Avoid relying on block.timestamp.
Additional information: link
Different versions of Solidity is used:
- Version used: ['>=0.5.0', '>=0.6.0<0.8.0', '>=0.6.2', '^0.7.6']
- ^0.7.6 (#5)
- >=0.6.0<0.8.0 (#83)
- >=0.6.2 (#108)
- >=0.6.2 (#205)
- >=0.5.0 (#250)
- >=0.5.0 (#269)
- ^0.7.6 (#323)
- ^0.7.6 (#385)
- ^0.7.6 (#452)
- ^0.7.6 (#476)
- ^0.7.6 (#517)
- ^0.7.6 (#563)
- ^0.7.6 (#577)
- ^0.7.6 (#877)
- ^0.7.6 (#1089)
- ^0.7.6 (#1239)
Use one Solidity version.
Additional information: link
Context._msgData() (#100-103) is never used and should be removed
DividendPayingToken._transfer(address,address,uint256) (#1204-1210) is never used and should be removed
ERC20._setupDecimals(uint8) (#856-858) is never used and should be removed
SafeMath.div(uint256,uint256,string) (#1063-1066) is never used and should be removed
SafeMath.mod(uint256,uint256) (#1025-1028) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#1083-1086) is never used and should be removed
SafeMath.tryAdd(uint256,uint256) (#897-901) is never used and should be removed
SafeMath.tryDiv(uint256,uint256) (#933-936) is never used and should be removed
SafeMath.tryMod(uint256,uint256) (#943-946) is never used and should be removed
SafeMath.tryMul(uint256,uint256) (#918-926) is never used and should be removed
SafeMath.trySub(uint256,uint256) (#908-911) is never used and should be removed
SafeMathInt.div(int256,int256) (#536-542) is never used and should be removed
SafeMathInt.mul(int256,int256) (#526-534) is never used and should be removed
Remove unused functions.
Additional information: link
GunGamersPro.totalFees (#1277) is set pre-construction with a non-constant function or state variable:
- tokenRewardsFee.add(liquidityFee).add(marketFee).add(charityFee).add(buyBackFee).add(burnFee)
GunGamersPro.buyTotalFees (#1285) is set pre-construction with a non-constant function or state variable:
- buyTokenRewardsFee.add(buyLiquidityFee).add(buyMarketFee).add(buyCharityFee).add(buyBuyBackFee).add(buyBurnFee)
GunGamersPro.sellTotalFees (#1293) is set pre-construction with a non-constant function or state variable:
- sellTokenRewardsFee.add(sellLiquidityFee).add(sellMarketFee).add(sellCharityFee).add(sellBuyBackFee).add(sellBurnFee)
GunGamersPro.previousMarketFee (#1295) is set pre-construction with a non-constant function or state variable:
- marketFee
GunGamersPro.previousCharityFee (#1296) is set pre-construction with a non-constant function or state variable:
- charityFee
GunGamersPro.previousBuyBackFee (#1297) is set pre-construction with a non-constant function or state variable:
- buyBackFee
GunGamersPro.previousTokenRewardsFee (#1298) is set pre-construction with a non-constant function or state variable:
- tokenRewardsFee
GunGamersPro.previousLiquidityFee (#1299) is set pre-construction with a non-constant function or state variable:
- liquidityFee
GunGamersPro.previousBurnFee (#1300) is set pre-construction with a non-constant function or state variable:
- burnFee
GunGamersPro.previousTotalFees (#1301) is set pre-construction with a non-constant function or state variable:
- totalFees
Remove any initialization of state variables via non-constant state variables or function calls. If variables must be set upon contract deployment, locate initialization in the constructor instead.
Additional information: link
Pragma version>=0.6.0<0.8.0 (#83) is too complex
Pragma version>=0.6.2 (#108) allows old versions
Pragma version>=0.6.2 (#205) allows old versions
Pragma version>=0.5.0 (#250) allows old versions
Pragma version>=0.5.0 (#269) allows old versions
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 DividendPayingToken._withdrawDividendOfUser(address) (#1161-1185):
- (sent) = user.call{value: _withdrawableDividend}() (#1168)
Low level call in GunGamersPro.swapAndLiquify(uint256) (#1702-1775):
- (sent) = marketAddress.call{value: marketFeeBalance}() (#1755)
- (sent) = charityAddress.call{value: charityFeeBalance}() (#1762)
- (sent) = buyBackAddress.call{value: buyBackFeeBalance}() (#1769)
Low level call in GunGamersPro.swapAndSendDividends(uint256) (#1777-1797):
- (sent) = diviTracker.call{value: newBalance}() (#1790)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IUniswapV2Router01.WETH() (#112) is not in mixedCase
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (#286) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#287) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#304) is not in mixedCase
Parameter DividendPayingToken.dividendOf(address)._owner (#1187) is not in mixedCase
Parameter DividendPayingToken.withdrawableDividendOf(address)._owner (#1191) is not in mixedCase
Parameter DividendPayingToken.withdrawnDividendOf(address)._owner (#1195) is not in mixedCase
Parameter DividendPayingToken.accumulativeDividendOf(address)._owner (#1199) is not in mixedCase
Constant DividendPayingToken.magnitude (#1103) is not in UPPER_CASE_WITH_UNDERSCORES
Variable DividendPayingToken.DividendToken (#1108) is not in mixedCase
Parameter GunGamersPro.swapAndLiquifyOwner(uint256)._tokens (#1394) is not in mixedCase
Parameter GunGamersPro.swapAndSendDividendsOwner(uint256)._tokens (#1398) is not in mixedCase
Parameter GunGamersPro.updateSellLimitTime(uint256)._newTime (#1411) is not in mixedCase
Parameter GunGamersPro.updateMaxSellTx(uint256)._newAmountNoDecimals (#1415) is not in mixedCase
Parameter GunGamersPro.updateMaxBuyTx(uint256)._newAmountNoDecimals (#1427) is not in mixedCase
Parameter GunGamersPro.updatedividendTime(uint256)._dividendTime (#1431) is not in mixedCase
Parameter GunGamersPro.updateBuyBackMode(bool)._isBuyBackActive (#1435) is not in mixedCase
Parameter GunGamersPro.updateisTransferDisabled(bool)._isTransferDisabled (#1439) is not in mixedCase
Parameter GunGamersPro.updateFees(uint256,uint256,uint256,uint256,uint256,uint256)._tokenRewardsFee (#1492) is not in mixedCase
Parameter GunGamersPro.updateFees(uint256,uint256,uint256,uint256,uint256,uint256)._liquidityFee (#1492) is not in mixedCase
Parameter GunGamersPro.updateFees(uint256,uint256,uint256,uint256,uint256,uint256)._marketFee (#1492) is not in mixedCase
Parameter GunGamersPro.updateFees(uint256,uint256,uint256,uint256,uint256,uint256)._charityFee (#1492) is not in mixedCase
Parameter GunGamersPro.updateFees(uint256,uint256,uint256,uint256,uint256,uint256)._buyBackFee (#1492) is not in mixedCase
Parameter GunGamersPro.updateFees(uint256,uint256,uint256,uint256,uint256,uint256)._burnFee (#1492) is not in mixedCase
Parameter GunGamersPro.updateBuyFees(uint256,uint256,uint256,uint256,uint256,uint256)._tokenRewardsFee (#1502) is not in mixedCase
Parameter GunGamersPro.updateBuyFees(uint256,uint256,uint256,uint256,uint256,uint256)._liquidityFee (#1502) is not in mixedCase
Parameter GunGamersPro.updateBuyFees(uint256,uint256,uint256,uint256,uint256,uint256)._marketFee (#1502) is not in mixedCase
Parameter GunGamersPro.updateBuyFees(uint256,uint256,uint256,uint256,uint256,uint256)._charityFee (#1502) is not in mixedCase
Parameter GunGamersPro.updateBuyFees(uint256,uint256,uint256,uint256,uint256,uint256)._buyBackFee (#1502) is not in mixedCase
Parameter GunGamersPro.updateBuyFees(uint256,uint256,uint256,uint256,uint256,uint256)._burnFee (#1502) is not in mixedCase
Parameter GunGamersPro.updateSellFees(uint256,uint256,uint256,uint256,uint256,uint256)._tokenRewardsFee (#1512) is not in mixedCase
Parameter GunGamersPro.updateSellFees(uint256,uint256,uint256,uint256,uint256,uint256)._liquidityFee (#1512) is not in mixedCase
Parameter GunGamersPro.updateSellFees(uint256,uint256,uint256,uint256,uint256,uint256)._marketFee (#1512) is not in mixedCase
Parameter GunGamersPro.updateSellFees(uint256,uint256,uint256,uint256,uint256,uint256)._charityFee (#1512) is not in mixedCase
Parameter GunGamersPro.updateSellFees(uint256,uint256,uint256,uint256,uint256,uint256)._buyBackFee (#1512) is not in mixedCase
Parameter GunGamersPro.updateSellFees(uint256,uint256,uint256,uint256,uint256,uint256)._burnFee (#1512) is not in mixedCase
Parameter GunGamersPro.whitelistDxSale(address,address)._presaleAddress (#1522) is not in mixedCase
Parameter GunGamersPro.whitelistDxSale(address,address)._routerAddress (#1522) is not in mixedCase
Variable GunGamersPro.DividendToken (#1246) is not in mixedCase
Variable GunGamersPro._maxWalletToken (#1257) is not in mixedCase
Parameter GunGamersProDividendTracker.getAccount(address)._account (#2114) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#101)" inContext (#95-104)
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 (#117) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#118)
Variable GunGamersPro.updateMaxSellTx(uint256)._newAmountNoDecimals (#1415) is too similar to GunGamersPro.updateMaxWalletAmount(uint256).newAmountNoDecimials (#1419)
Variable GunGamersPro.updateMaxSellTx(uint256)._newAmountNoDecimals (#1415) is too similar to GunGamersPro.updateSwapAtAmount(uint256).newAmountNoDecimials (#1423)
Variable GunGamersPro.updateMaxBuyTx(uint256)._newAmountNoDecimals (#1427) is too similar to GunGamersPro.updateMinimumBalanceForDividends(uint256).newAmountNoDecimials (#1447)
Variable GunGamersPro.updateMaxSellTx(uint256)._newAmountNoDecimals (#1415) is too similar to GunGamersPro.updateMinimumBalanceForDividends(uint256).newAmountNoDecimials (#1447)
Variable GunGamersPro.updateMaxBuyTx(uint256)._newAmountNoDecimals (#1427) is too similar to GunGamersPro.updateSwapAtAmount(uint256).newAmountNoDecimials (#1423)
Variable GunGamersPro.updateMaxBuyTx(uint256)._newAmountNoDecimals (#1427) is too similar to GunGamersPro.updateMaxWalletAmount(uint256).newAmountNoDecimials (#1419)
Variable GunGamersPro.swapAndLiquify(uint256).sent_scope_0 (#1762) is too similar to GunGamersPro.swapAndLiquify(uint256).sent_scope_1 (#1769)
Variable DividendPayingToken._withdrawDividendOfUser(address)._withdrawableDividend (#1162) is too similar to GunGamersProDividendTracker.getAccount(address).withdrawableDividends (#2119)
Prevent variables from having similar names.
Additional information: link
GunGamersPro.constructor() (#1350-1388) uses literals with too many digits:
- _mint(owner(),100000000 * (10 ** decimals())) (#1387)
GunGamersPro.updateGasForProcessing(uint256) (#1620-1625) uses literals with too many digits:
- require(bool,string)(newValue >= 200000 && newValue <= 500000, GunGamersPro: gasForProcessing must be between 200,000 and 500,000) (#1621)
GunGamersPro.slitherConstructorVariables() (#1240-2040) uses literals with too many digits:
- maxBuyTransactionAmount = 100000000 * (10 ** 18) (#1254)
GunGamersPro.slitherConstructorVariables() (#1240-2040) uses literals with too many digits:
- maxSellTransactionAmount = 100000000 * (10 ** 18) (#1255)
GunGamersPro.slitherConstructorVariables() (#1240-2040) uses literals with too many digits:
- swapTokensAtAmount = 100000000 * (10 ** 18) (#1256)
GunGamersPro.slitherConstructorVariables() (#1240-2040) uses literals with too many digits:
- _maxWalletToken = 100000000 * (10 ** 18) (#1257)
GunGamersPro.slitherConstructorVariables() (#1240-2040) uses literals with too many digits:
- gasForProcessing = 300000 (#1308)
GunGamersProDividendTracker.getAccountAtIndex(uint256) (#2159-2176) uses literals with too many digits:
- (0x0000000000000000000000000000000000000000,- 1,- 1,0,0,0,0,0) (#2170)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
DividendPayingToken.lastAmount (#1106) is never used in GunGamersProDividendTracker (#2042-2263)
Remove unused state variables.
Additional information: link
DividendPayingToken.lastAmount (#1106) 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) (#334-336)
getIndexOfKey(IterableMapping.Map,address) should be declared external:
- IterableMapping.getIndexOfKey(IterableMapping.Map,address) (#338-343)
getKeyAtIndex(IterableMapping.Map,uint256) should be declared external:
- IterableMapping.getKeyAtIndex(IterableMapping.Map,uint256) (#345-347)
size(IterableMapping.Map) should be declared external:
- IterableMapping.size(IterableMapping.Map) (#349-351)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#435-438)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#444-448)
name() should be declared external:
- ERC20.name() (#633-635)
symbol() should be declared external:
- ERC20.symbol() (#641-643)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (#684-687)
allowance(address,address) should be declared external:
- ERC20.allowance(address,address) (#692-694)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (#703-706)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (#721-725)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (#739-742)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (#758-761)
updateMasterContract(address) should be declared external:
- DividendPayingToken.updateMasterContract(address) (#1128-1130)
distributeDividends() should be declared external:
- DividendPayingToken.distributeDividends() (#1131-1142)
distributeTokenDividends(uint256) should be declared external:
- DividendPayingToken.distributeTokenDividends(uint256) (#1144-1155)
withdrawDividend() should be declared external:
- DividendPayingToken.withdrawDividend() (#1157-1159)
- GunGamersProDividendTracker.withdrawDividend() (#2078-2080)
dividendOf(address) should be declared external:
- DividendPayingToken.dividendOf(address) (#1187-1189)
withdrawnDividendOf(address) should be declared external:
- DividendPayingToken.withdrawnDividendOf(address) (#1195-1197)
excludeFromLimits(address,bool) should be declared external:
- GunGamersPro.excludeFromLimits(address,bool) (#1562-1567)
blacklistAddress(address,bool) should be declared external:
- GunGamersPro.blacklistAddress(address,bool) (#1576-1581)
excludeFromDividends(address) should be declared external:
- GunGamersPro.excludeFromDividends(address) (#1583-1587)
enableDividends(address) should be declared external:
- GunGamersPro.enableDividends(address) (#1589-1593)
updateGasForProcessing(uint256) should be declared external:
- GunGamersPro.updateGasForProcessing(uint256) (#1620-1625)
isExcludedFromFees(address) should be declared external:
- GunGamersPro.isExcludedFromFees(address) (#1639-1641)
isExcludedFromLimits(address) should be declared external:
- GunGamersPro.isExcludedFromLimits(address) (#1643-1645)
withdrawableDividendOf(address) should be declared external:
- GunGamersPro.withdrawableDividendOf(address) (#1647-1649)
dividendTokenBalanceOf(address) should be declared external:
- GunGamersPro.dividendTokenBalanceOf(address) (#1651-1653)
getAccountAtIndex(uint256) should be declared external:
- GunGamersProDividendTracker.getAccountAtIndex(uint256) (#2159-2176)
process(uint256) should be declared external:
- GunGamersProDividendTracker.process(uint256) (#2203-2248)
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