🦍$LUNAPE 🦍 - The Next Phase in the Luna Classic Revival! 🚀❤️💪 A Luna Protocol Unseen in Defi, with Dual Rewards System, Autostaking and Autocompounding at an APY of 200,000% 🔥🔥🔥⚡️⚡️Sustainable Protocol Rewards $LUNAPE and Luna Classic! ⚡️⚡️✍Audited , KYC'D & DOXXED + SAFU Badge by Contract Checker ✅✅ 🎮Gaming - Scratchcards ! $LUNAPE Rocket Club NFTs + NFT Marketplace! Huge Influencers Onboard + Massive Twitter Events💫🌟 LUNC Market Leader! $LUNC Burns! 🔥💰 First 100 Buyers Surprise Rewards 🔥💰
LunaProtocol.sendBNB(address,uint256) (#1069-1074) sends eth to arbitrary user
Dangerous calls:
- (success) = recipient.call{value: amount}() (#1072)
LunaProtocol.burnToken(uint256) (#1440-1450) sends eth to arbitrary user
Dangerous calls:
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,DEAD,block.timestamp) (#1445-1449)
LunaProtocol.swapAndLiquify(uint256) (#1453-1482) sends eth to arbitrary user
Dangerous calls:
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
LunaProtocol.swapAndSendDividends(uint256) (#1484-1502) sends eth to arbitrary user
Dangerous calls:
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,address(this),block.timestamp) (#1489-1493)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in LunaProtocol._transferFrom(address,address,uint256) (#1221-1257):
External calls:
- rebase() (#1231)
- IUniswapV2Pair(uniswapV2Pair).sync() (#1146)
- swapBack() (#1233)
- (success) = recipient.call{value: amount}() (#1072)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,address(this),block.timestamp) (#1489-1493)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,DEAD,block.timestamp) (#1445-1449)
- success = IERC20(rewardToken).transfer(address(dividendTracker),balanceRewardToken) (#1496)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(half,0,path,address(this),block.timestamp) (#1463-1468)
- dividendTracker.distributeDividends(balanceRewardToken) (#1499)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(contractTokenBalance,0,path,address(this),block.timestamp) (#1400-1405)
External calls sending eth:
- swapBack() (#1233)
- (success) = recipient.call{value: amount}() (#1072)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,DEAD,block.timestamp) (#1445-1449)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,address(this),block.timestamp) (#1489-1493)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
State variables written after the call(s):
- _rBalance[sender] = _rBalance[sender] - rAmount (#1235)
- _rBalance[recipient] = _rBalance[recipient] + amountReceived (#1239)
- amountReceived = takeFee(sender,rAmount,recipient) (#1238)
- _rBalance[address(this)] = _rBalance[address(this)] + feeAmount (#1272)
Apply the check-effects-interactions pattern.
Additional information: link
LunaProtocol._allowances (#882) shadows:
- ERC20._allowances (#429)
LunaProtocol._totalSupply (#926) shadows:
- ERC20._totalSupply (#431)
Remove the state variable shadowing.
Additional information: link
LunaProtocol.claimStuckTokens(address) (#1054-1063) ignores return value by ERC20token.transfer(msg.sender,balance) (#1062)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Too many vulnerabilities (Unchecked transfer, Reentrancy vulnerability, etc.). High risk of a scam. DYOR & manual audit are advised.
Unable to verify that contract auditor is trusted: Certik, Quantstamp, Hacken, Solidity, Paladinsec, Openzeppelin, Verichains
Contract ownership is not renounced (belongs to a wallet)
Combination 1: Reentrancy vulnerabilities + Functions that send Ether to arbitraty destination. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
Combination 2: Unchecked transfer + Functions that send Ether to arbitraty destination. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
Combination 3: Reentrancy vulnerabilities + Unchecked transfer vulnerability. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
Contract ticker ($LUNAPE) contains non-alphanumeric characters.
Not a direct threat, but may indicate unreliable intentions of developer. Non-alphanumeric chars (,.;!#*&") are extremely rare among low risk tokens.
Reentrancy in LunaProtocol.constructor(address) (#974-1039):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#1005-1006)
State variables written after the call(s):
- uniswapV2Pair = _uniswapV2Pair (#1009)
- uniswapV2Router = _uniswapV2Router (#1008)
Reentrancy in LunaProtocol.constructor(address) (#974-1039):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#1005-1006)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1011)
- dividendTracker.excludeFromDividends(pair) (#1117)
State variables written after the call(s):
- _allowances[address(this)][address(uniswapV2Router)] = MAX (#1013)
- _mint(newOwner,4_000_000_000 * (10 ** 18)) (#1015)
- _balances[account] = _balances[account].add(amount) (#511)
- _mint(newOwner,4_000_000_000 * (10 ** 18)) (#1015)
- _totalSupply = _totalSupply.add(amount) (#510)
- _totalSupply = initialSupply (#1018)
- autoRebase = false (#1024)
- initialSupply = 4_000_000_000 * (10 ** 18) (#1017)
- lastRebasedTime = block.timestamp (#1025)
- rSupply = MAX - (MAX % initialSupply) (#1020)
- rate = rSupply / _totalSupply (#1021)
- rebaseRate = 4339 (#1023)
Reentrancy in LunaProtocol.constructor(address) (#974-1039):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#1005-1006)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1011)
- dividendTracker.excludeFromDividends(pair) (#1117)
- dividendTracker.excludeFromDividends(address(dividendTracker)) (#1027)
- dividendTracker.excludeFromDividends(address(this)) (#1028)
- dividendTracker.excludeFromDividends(DEAD) (#1029)
- dividendTracker.excludeFromDividends(address(_uniswapV2Router)) (#1030)
State variables written after the call(s):
- _isExcludedFromFees[owner()] = true (#1032)
- _isExcludedFromFees[newOwner] = true (#1033)
- _isExcludedFromFees[DEAD] = true (#1034)
- _isExcludedFromFees[address(this)] = true (#1035)
- _rBalance[newOwner] = rSupply (#1038)
- swapThreshold = rSupply / 5000 (#1037)
Reentrancy in DividendTracker.processAccount(address,bool) (#867-877):
External calls:
- amount = _withdrawDividendOfUser(account) (#868)
- success = IERC20(rewardToken).transfer(user,_withdrawableDividend) (#601)
State variables written after the call(s):
- lastClaimTimes[account] = block.timestamp (#871)
Reentrancy in LunaProtocol.updateUniswapV2Router(address) (#1097-1104):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this),uniswapV2Router.WETH()) (#1101-1102)
State variables written after the call(s):
- uniswapV2Pair = _uniswapV2Pair (#1103)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in LunaProtocol._setAutomatedMarketMakerPair(address,bool) (#1112-1121):
External calls:
- dividendTracker.excludeFromDividends(pair) (#1117)
Event emitted after the call(s):
- SetAutomatedMarketMakerPair(pair,value) (#1120)
Reentrancy in LunaProtocol._transferFrom(address,address,uint256) (#1221-1257):
External calls:
- rebase() (#1231)
- IUniswapV2Pair(uniswapV2Pair).sync() (#1146)
- swapBack() (#1233)
- (success) = recipient.call{value: amount}() (#1072)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,DEAD,block.timestamp) (#1445-1449)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,address(this),block.timestamp) (#1489-1493)
- success = IERC20(rewardToken).transfer(address(dividendTracker),balanceRewardToken) (#1496)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(half,0,path,address(this),block.timestamp) (#1463-1468)
- dividendTracker.distributeDividends(balanceRewardToken) (#1499)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(contractTokenBalance,0,path,address(this),block.timestamp) (#1400-1405)
External calls sending eth:
- swapBack() (#1233)
- (success) = recipient.call{value: amount}() (#1072)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,DEAD,block.timestamp) (#1445-1449)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,address(this),block.timestamp) (#1489-1493)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
Event emitted after the call(s):
- SendDividends(balanceRewardToken) (#1500)
- swapBack() (#1233)
- SendEcosystem(ecosystemBNB) (#1418)
- swapBack() (#1233)
- SendRewardPool(rewardPoolBNB) (#1429)
- swapBack() (#1233)
- SendTreasury(marketingBNB) (#1412)
- swapBack() (#1233)
- SwapAndLiquify(half,newBalance,otherHalf) (#1481)
- swapBack() (#1233)
Reentrancy in LunaProtocol._transferFrom(address,address,uint256) (#1221-1257):
External calls:
- rebase() (#1231)
- IUniswapV2Pair(uniswapV2Pair).sync() (#1146)
- swapBack() (#1233)
- (success) = recipient.call{value: amount}() (#1072)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,address(this),block.timestamp) (#1489-1493)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,DEAD,block.timestamp) (#1445-1449)
- success = IERC20(rewardToken).transfer(address(dividendTracker),balanceRewardToken) (#1496)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(half,0,path,address(this),block.timestamp) (#1463-1468)
- dividendTracker.distributeDividends(balanceRewardToken) (#1499)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(contractTokenBalance,0,path,address(this),block.timestamp) (#1400-1405)
- dividendTracker.setBalance(address(sender),balanceOf(sender)) (#1242)
- dividendTracker.setBalance(address(recipient),balanceOf(recipient)) (#1243)
- dividendTracker.process(gas) (#1248-1253)
External calls sending eth:
- swapBack() (#1233)
- (success) = recipient.call{value: amount}() (#1072)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,DEAD,block.timestamp) (#1445-1449)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,address(this),block.timestamp) (#1489-1493)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
Event emitted after the call(s):
- ProcessedDividendTracker(iterations,claims,lastProcessedIndex,true,gas,tx.origin) (#1249)
- Transfer(sender,recipient,amountReceived / rate) (#1255)
Reentrancy in LunaProtocol._transferFrom(address,address,uint256) (#1221-1257):
External calls:
- rebase() (#1231)
- IUniswapV2Pair(uniswapV2Pair).sync() (#1146)
- swapBack() (#1233)
- (success) = recipient.call{value: amount}() (#1072)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,address(this),block.timestamp) (#1489-1493)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,DEAD,block.timestamp) (#1445-1449)
- success = IERC20(rewardToken).transfer(address(dividendTracker),balanceRewardToken) (#1496)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(half,0,path,address(this),block.timestamp) (#1463-1468)
- dividendTracker.distributeDividends(balanceRewardToken) (#1499)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(contractTokenBalance,0,path,address(this),block.timestamp) (#1400-1405)
External calls sending eth:
- swapBack() (#1233)
- (success) = recipient.call{value: amount}() (#1072)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,DEAD,block.timestamp) (#1445-1449)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,address(this),block.timestamp) (#1489-1493)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
Event emitted after the call(s):
- Transfer(sender,address(this),feeAmount / rate) (#1273)
- amountReceived = takeFee(sender,rAmount,recipient) (#1238)
Reentrancy in LunaProtocol.constructor(address) (#974-1039):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#1005-1006)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1011)
- dividendTracker.excludeFromDividends(pair) (#1117)
Event emitted after the call(s):
- SetAutomatedMarketMakerPair(pair,value) (#1120)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (#1011)
- Transfer(address(0),account,amount) (#512)
- _mint(newOwner,4_000_000_000 * (10 ** 18)) (#1015)
Reentrancy in DividendTracker.processAccount(address,bool) (#867-877):
External calls:
- amount = _withdrawDividendOfUser(account) (#868)
- success = IERC20(rewardToken).transfer(user,_withdrawableDividend) (#601)
Event emitted after the call(s):
- Claim(account,amount,automatic) (#872)
Reentrancy in LunaProtocol.processDividendTracker(uint256) (#1598-1601):
External calls:
- (iterations,claims,lastProcessedIndex) = dividendTracker.process(gas) (#1599)
Event emitted after the call(s):
- ProcessedDividendTracker(iterations,claims,lastProcessedIndex,false,gas,tx.origin) (#1600)
Reentrancy in LunaProtocol.rebase() (#1131-1149):
External calls:
- IUniswapV2Pair(uniswapV2Pair).sync() (#1146)
Event emitted after the call(s):
- LogRebase(rebase_count,_totalSupply) (#1148)
Reentrancy in LunaProtocol.swapAndLiquify(uint256) (#1453-1482):
External calls:
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(half,0,path,address(this),block.timestamp) (#1463-1468)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
External calls sending eth:
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
Event emitted after the call(s):
- SwapAndLiquify(half,newBalance,otherHalf) (#1481)
Reentrancy in LunaProtocol.swapAndSendDividends(uint256) (#1484-1502):
External calls:
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,address(this),block.timestamp) (#1489-1493)
- success = IERC20(rewardToken).transfer(address(dividendTracker),balanceRewardToken) (#1496)
- dividendTracker.distributeDividends(balanceRewardToken) (#1499)
External calls sending eth:
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,address(this),block.timestamp) (#1489-1493)
Event emitted after the call(s):
- SendDividends(balanceRewardToken) (#1500)
Reentrancy in LunaProtocol.swapBack() (#1371-1438):
External calls:
- swapAndLiquify(liquidityTokens) (#1387)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(half,0,path,address(this),block.timestamp) (#1463-1468)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(contractTokenBalance,0,path,address(this),block.timestamp) (#1400-1405)
- sendBNB(address(treasuryWallet),marketingBNB) (#1411)
- (success) = recipient.call{value: amount}() (#1072)
External calls sending eth:
- swapAndLiquify(liquidityTokens) (#1387)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
- sendBNB(address(treasuryWallet),marketingBNB) (#1411)
- (success) = recipient.call{value: amount}() (#1072)
Event emitted after the call(s):
- SendTreasury(marketingBNB) (#1412)
Reentrancy in LunaProtocol.swapBack() (#1371-1438):
External calls:
- swapAndLiquify(liquidityTokens) (#1387)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(half,0,path,address(this),block.timestamp) (#1463-1468)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(contractTokenBalance,0,path,address(this),block.timestamp) (#1400-1405)
- sendBNB(address(treasuryWallet),marketingBNB) (#1411)
- (success) = recipient.call{value: amount}() (#1072)
- sendBNB(address(ecosystemWallet),ecosystemBNB) (#1417)
- (success) = recipient.call{value: amount}() (#1072)
External calls sending eth:
- swapAndLiquify(liquidityTokens) (#1387)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
- sendBNB(address(treasuryWallet),marketingBNB) (#1411)
- (success) = recipient.call{value: amount}() (#1072)
- sendBNB(address(ecosystemWallet),ecosystemBNB) (#1417)
- (success) = recipient.call{value: amount}() (#1072)
Event emitted after the call(s):
- SendEcosystem(ecosystemBNB) (#1418)
Reentrancy in LunaProtocol.swapBack() (#1371-1438):
External calls:
- swapAndLiquify(liquidityTokens) (#1387)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(half,0,path,address(this),block.timestamp) (#1463-1468)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(contractTokenBalance,0,path,address(this),block.timestamp) (#1400-1405)
- sendBNB(address(treasuryWallet),marketingBNB) (#1411)
- (success) = recipient.call{value: amount}() (#1072)
- sendBNB(address(ecosystemWallet),ecosystemBNB) (#1417)
- (success) = recipient.call{value: amount}() (#1072)
- swapAndSendDividends(rewardBNB) (#1423)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,address(this),block.timestamp) (#1489-1493)
- success = IERC20(rewardToken).transfer(address(dividendTracker),balanceRewardToken) (#1496)
- dividendTracker.distributeDividends(balanceRewardToken) (#1499)
External calls sending eth:
- swapAndLiquify(liquidityTokens) (#1387)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
- sendBNB(address(treasuryWallet),marketingBNB) (#1411)
- (success) = recipient.call{value: amount}() (#1072)
- sendBNB(address(ecosystemWallet),ecosystemBNB) (#1417)
- (success) = recipient.call{value: amount}() (#1072)
- swapAndSendDividends(rewardBNB) (#1423)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,address(this),block.timestamp) (#1489-1493)
Event emitted after the call(s):
- SendDividends(balanceRewardToken) (#1500)
- swapAndSendDividends(rewardBNB) (#1423)
Reentrancy in LunaProtocol.swapBack() (#1371-1438):
External calls:
- swapAndLiquify(liquidityTokens) (#1387)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(half,0,path,address(this),block.timestamp) (#1463-1468)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(contractTokenBalance,0,path,address(this),block.timestamp) (#1400-1405)
- sendBNB(address(treasuryWallet),marketingBNB) (#1411)
- (success) = recipient.call{value: amount}() (#1072)
- sendBNB(address(ecosystemWallet),ecosystemBNB) (#1417)
- (success) = recipient.call{value: amount}() (#1072)
- swapAndSendDividends(rewardBNB) (#1423)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,address(this),block.timestamp) (#1489-1493)
- success = IERC20(rewardToken).transfer(address(dividendTracker),balanceRewardToken) (#1496)
- dividendTracker.distributeDividends(balanceRewardToken) (#1499)
- sendBNB(address(rewardPoolWallet),rewardPoolBNB) (#1428)
- (success) = recipient.call{value: amount}() (#1072)
External calls sending eth:
- swapAndLiquify(liquidityTokens) (#1387)
- uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
- sendBNB(address(treasuryWallet),marketingBNB) (#1411)
- (success) = recipient.call{value: amount}() (#1072)
- sendBNB(address(ecosystemWallet),ecosystemBNB) (#1417)
- (success) = recipient.call{value: amount}() (#1072)
- swapAndSendDividends(rewardBNB) (#1423)
- uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,address(this),block.timestamp) (#1489-1493)
- sendBNB(address(rewardPoolWallet),rewardPoolBNB) (#1428)
- (success) = recipient.call{value: amount}() (#1072)
Event emitted after the call(s):
- SendRewardPool(rewardPoolBNB) (#1429)
Reentrancy in LunaProtocol.updateDividendTracker(address) (#1516-1532):
External calls:
- newDividendTracker.excludeFromDividends(address(newDividendTracker)) (#1523)
- newDividendTracker.excludeFromDividends(address(this)) (#1524)
- newDividendTracker.excludeFromDividends(DEAD) (#1525)
- newDividendTracker.excludeFromDividends(address(uniswapV2Router)) (#1526)
- newDividendTracker.excludeFromDividends(address(uniswapV2Pair)) (#1527)
Event emitted after the call(s):
- UpdateDividendTracker(newAddress,address(dividendTracker)) (#1529)
Apply the check-effects-interactions pattern.
Additional information: link
DividendTracker.getAccount(address) (#731-774) uses timestamp for comparisons
Dangerous comparisons:
- nextClaimTime > block.timestamp (#771-773)
DividendTracker.canAutoClaim(uint256) (#795-801) uses timestamp for comparisons
Dangerous comparisons:
- lastClaimTime > block.timestamp (#796)
- block.timestamp.sub(lastClaimTime) >= claimWait (#800)
LunaProtocol.shouldRebase() (#1123-1129) uses timestamp for comparisons
Dangerous comparisons:
- autoRebase && msg.sender != uniswapV2Pair && ! inSwap && block.timestamp >= (lastRebasedTime + 1800) (#1124-1128)
LunaProtocol.rebase() (#1131-1149) uses timestamp for comparisons
Dangerous comparisons:
- i < times (#1136)
Avoid relying on block.timestamp.
Additional information: link
LunaProtocol.rebase() (#1131-1149) performs a multiplication on the result of a division:
-times = (block.timestamp - lastRebasedTime) / 1800 (#1134)
-lastRebasedTime = lastRebasedTime + (times * 1800) (#1144)
LunaProtocol.setSwapBackSettings(bool,uint256) (#1504-1508) performs a multiplication on the result of a division:
-swapThreshold = rSupply / 100000 * _percentage_base100000 (#1507)
Consider ordering multiplication before division.
Additional information: link
Reentrancy in DividendPayingToken._withdrawDividendOfUser(address) (#596-611):
External calls:
- success = IERC20(rewardToken).transfer(user,_withdrawableDividend) (#601)
State variables written after the call(s):
- withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend) (#604)
Reentrancy in LunaProtocol.updateDividendTracker(address) (#1516-1532):
External calls:
- newDividendTracker.excludeFromDividends(address(newDividendTracker)) (#1523)
- newDividendTracker.excludeFromDividends(address(this)) (#1524)
- newDividendTracker.excludeFromDividends(DEAD) (#1525)
- newDividendTracker.excludeFromDividends(address(uniswapV2Router)) (#1526)
- newDividendTracker.excludeFromDividends(address(uniswapV2Pair)) (#1527)
State variables written after the call(s):
- dividendTracker = newDividendTracker (#1531)
Apply the check-effects-interactions pattern.
Additional information: link
LunaProtocol._transferFrom(address,address,uint256).claims (#1248) is a local variable never initialized
LunaProtocol._transferFrom(address,address,uint256).lastProcessedIndex (#1248) is a local variable never initialized
LunaProtocol.swapBack().liquidityTokens (#1383) is a local variable never initialized
LunaProtocol._transferFrom(address,address,uint256).iterations (#1248) 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
LunaProtocol._transferFrom(address,address,uint256) (#1221-1257) ignores return value by dividendTracker.process(gas) (#1248-1253)
LunaProtocol.swapAndLiquify(uint256) (#1453-1482) ignores return value by uniswapV2Router.addLiquidityETH{value: newBalance}(address(this),otherHalf,0,0,DEAD,block.timestamp) (#1472-1479)
LunaProtocol.claim() (#1603-1605) ignores return value by dividendTracker.processAccount(address(msg.sender),false) (#1604)
LunaProtocol.claimAddress(address) (#1607-1609) ignores return value by dividendTracker.processAccount(address(claimee),false) (#1608)
Ensure that all the return values of the function calls are used.
Additional information: link
DividendPayingToken.constructor(string,string,address)._name (#575) shadows:
- ERC20._name (#432) (state variable)
DividendPayingToken.constructor(string,string,address)._symbol (#575) shadows:
- ERC20._symbol (#433) (state variable)
DividendPayingToken.dividendOf(address)._owner (#613) shadows:
- Ownable._owner (#17) (state variable)
DividendPayingToken.withdrawableDividendOf(address)._owner (#617) shadows:
- Ownable._owner (#17) (state variable)
DividendPayingToken.withdrawnDividendOf(address)._owner (#621) shadows:
- Ownable._owner (#17) (state variable)
DividendPayingToken.accumulativeDividendOf(address)._owner (#625) shadows:
- Ownable._owner (#17) (state variable)
Rename the local variables that shadow another component.
Additional information: link
DividendTracker.setLastProcessedIndex(uint256) (#719-721) should emit an event for:
- lastProcessedIndex = index (#720)
LunaProtocol.setSwapBackSettings(bool,uint256) (#1504-1508) should emit an event for:
- swapThreshold = rSupply / 100000 * _percentage_base100000 (#1507)
Emit an event for critical parameter changes.
Additional information: link
DividendPayingToken.constructor(string,string,address)._rewardToken (#575) lacks a zero-check on :
- rewardToken = _rewardToken (#576)
LunaProtocol.setOperatorWallet(address)._operatorWallet (#1050) lacks a zero-check on :
- operator = _operatorWallet (#1051)
LunaProtocol.updateUniswapV2Router(address)._uniswapV2Pair (#1101-1102) lacks a zero-check on :
- uniswapV2Pair = _uniswapV2Pair (#1103)
Check that the address is not zero.
Additional information: link
DividendPayingToken._withdrawDividendOfUser(address) (#596-611) has external calls inside a loop: success = IERC20(rewardToken).transfer(user,_withdrawableDividend) (#601)
Favor pull over push strategy for external calls.
Additional information: link
Variable 'LunaProtocol._transferFrom(address,address,uint256).claims (#1248)' in LunaProtocol._transferFrom(address,address,uint256) (#1221-1257) potentially used before declaration: ProcessedDividendTracker(iterations,claims,lastProcessedIndex,true,gas,tx.origin) (#1249)
Variable 'LunaProtocol._transferFrom(address,address,uint256).iterations (#1248)' in LunaProtocol._transferFrom(address,address,uint256) (#1221-1257) potentially used before declaration: ProcessedDividendTracker(iterations,claims,lastProcessedIndex,true,gas,tx.origin) (#1249)
Variable 'LunaProtocol._transferFrom(address,address,uint256).lastProcessedIndex (#1248)' in LunaProtocol._transferFrom(address,address,uint256) (#1221-1257) potentially used before declaration: ProcessedDividendTracker(iterations,claims,lastProcessedIndex,true,gas,tx.origin) (#1249)
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
Context._msgData() (#11-13) is never used and should be removed
DividendPayingToken._transfer(address,address,uint256) (#630-636) is never used and should be removed
ERC20._transfer(address,address,uint256) (#494-505) is never used and should be removed
SafeMath.div(uint256,uint256) (#80-82) is never used and should be removed
SafeMath.div(uint256,uint256,string) (#84-90) is never used and should be removed
SafeMath.mod(uint256,uint256) (#92-94) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#96-99) is never used and should be removed
SafeMathInt.abs(int256) (#131-134) is never used and should be removed
SafeMathInt.div(int256,int256) (#114-120) is never used and should be removed
SafeMathInt.mul(int256,int256) (#106-113) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version0.8.15 (#4) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
solc-0.8.15 is not recommended for deployment
Deploy with any of the following Solidity versions: 0.5.16 - 0.5.17, 0.6.11 - 0.6.12, 0.7.5 - 0.7.6 Use a simple pragma version that allows any of these versions. Consider using the latest version of Solidity for testing.
Additional information: link
Low level call in LunaProtocol.sendBNB(address,uint256) (#1069-1074):
- (success) = recipient.call{value: amount}() (#1072)
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() (#235) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#236) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#253) is not in mixedCase
Function IUniswapV2Router01.WETH() (#273) is not in mixedCase
Parameter DividendPayingToken.dividendOf(address)._owner (#613) is not in mixedCase
Parameter DividendPayingToken.withdrawableDividendOf(address)._owner (#617) is not in mixedCase
Parameter DividendPayingToken.withdrawnDividendOf(address)._owner (#621) is not in mixedCase
Parameter DividendPayingToken.accumulativeDividendOf(address)._owner (#625) is not in mixedCase
Constant DividendPayingToken.magnitude (#566) is not in UPPER_CASE_WITH_UNDERSCORES
Parameter DividendTracker.updateMinimumTokenBalanceForDividends(uint256)._newMinimumBalance (#697) is not in mixedCase
Parameter DividendTracker.getAccount(address)._account (#731) is not in mixedCase
Parameter LunaProtocol.setOperatorWallet(address)._operatorWallet (#1050) is not in mixedCase
Parameter LunaProtocol.setAutoRebase(bool)._flag (#1083) is not in mixedCase
Parameter LunaProtocol.updateSellFees(uint256,uint256,uint256,uint256,uint256,uint256)._liquiditySellFee (#1289) is not in mixedCase
Parameter LunaProtocol.updateSellFees(uint256,uint256,uint256,uint256,uint256,uint256)._treasurySellFee (#1290) is not in mixedCase
Parameter LunaProtocol.updateSellFees(uint256,uint256,uint256,uint256,uint256,uint256)._ecosystemSellFee (#1291) is not in mixedCase
Parameter LunaProtocol.updateSellFees(uint256,uint256,uint256,uint256,uint256,uint256)._rewardPoolSellFee (#1292) is not in mixedCase
Parameter LunaProtocol.updateSellFees(uint256,uint256,uint256,uint256,uint256,uint256)._rewardSellFee (#1293) is not in mixedCase
Parameter LunaProtocol.updateSellFees(uint256,uint256,uint256,uint256,uint256,uint256)._burnSellFee (#1293) is not in mixedCase
Parameter LunaProtocol.updateBuyFees(uint256,uint256,uint256,uint256,uint256)._liquidityBuyFee (#1306) is not in mixedCase
Parameter LunaProtocol.updateBuyFees(uint256,uint256,uint256,uint256,uint256)._treasuryBuyFee (#1307) is not in mixedCase
Parameter LunaProtocol.updateBuyFees(uint256,uint256,uint256,uint256,uint256)._ecosystemBuyFee (#1308) is not in mixedCase
Parameter LunaProtocol.updateBuyFees(uint256,uint256,uint256,uint256,uint256)._rewardPoolBuyFee (#1309) is not in mixedCase
Parameter LunaProtocol.updateBuyFees(uint256,uint256,uint256,uint256,uint256)._rewardBuyFee (#1310) is not in mixedCase
Parameter LunaProtocol.updateBuyFees(uint256,uint256)._treasuryTransferFee (#1322) is not in mixedCase
Parameter LunaProtocol.updateBuyFees(uint256,uint256)._liquidityTransferFee (#1322) is not in mixedCase
Parameter LunaProtocol.changeTreasuryWallet(address)._treasuryWallet (#1338) is not in mixedCase
Parameter LunaProtocol.changeEcosystemWallet(address)._ecosystemWallet (#1345) is not in mixedCase
Parameter LunaProtocol.changeRewardPoolWallet(address)._rewardPoolWallet (#1354) is not in mixedCase
Parameter LunaProtocol.setSwapBackSettings(bool,uint256)._enabled (#1504) is not in mixedCase
Parameter LunaProtocol.setSwapBackSettings(bool,uint256)._percentage_base100000 (#1504) is not in mixedCase
Variable LunaProtocol._rBalance (#881) is not in mixedCase
Variable LunaProtocol.WtoWtransferFee (#901) is not in mixedCase
Variable LunaProtocol.DEAD (#911) is not in mixedCase
Variable LunaProtocol.rebase_count (#936) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#278) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#279)
Variable DividendPayingToken._withdrawDividendOfUser(address)._withdrawableDividend (#597) is too similar to DividendTracker.getAccount(address).withdrawableDividends (#736)
Prevent variables from having similar names.
Additional information: link
DividendTracker.getAccountAtIndex(uint256) (#776-793) uses literals with too many digits:
- (0x0000000000000000000000000000000000000000,- 1,- 1,0,0,0,0,0) (#787)
LunaProtocol.setSwapBackSettings(bool,uint256) (#1504-1508) uses literals with too many digits:
- swapThreshold = rSupply / 100000 * _percentage_base100000 (#1507)
LunaProtocol.updateGasForProcessing(uint256) (#1534-1539) uses literals with too many digits:
- require(bool,string)(newValue >= 200000 && newValue <= 500000,gasForProcessing must be between 200,000 and 500,000) (#1535)
LunaProtocol.slitherConstructorVariables() (#880-1624) uses literals with too many digits:
- DEAD = 0x000000000000000000000000000000000000dEaD (#911)
LunaProtocol.slitherConstructorVariables() (#880-1624) uses literals with too many digits:
- gasForProcessing = 300000 (#917)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
SafeMathInt.MAX_INT256 (#104) is never used in SafeMathInt (#102-139)
Remove unused state variables.
Additional information: link
LunaProtocol.DEAD (#911) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#34-36)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#38-41)
get(IterableMapping.Map,address) should be declared external:
- IterableMapping.get(IterableMapping.Map,address) (#157-159)
getIndexOfKey(IterableMapping.Map,address) should be declared external:
- IterableMapping.getIndexOfKey(IterableMapping.Map,address) (#161-166)
getKeyAtIndex(IterableMapping.Map,uint256) should be declared external:
- IterableMapping.getKeyAtIndex(IterableMapping.Map,uint256) (#168-170)
size(IterableMapping.Map) should be declared external:
- IterableMapping.size(IterableMapping.Map) (#172-174)
name() should be declared external:
- ERC20.name() (#440-442)
symbol() should be declared external:
- ERC20.symbol() (#444-446)
decimals() should be declared external:
- ERC20.decimals() (#448-450)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (#460-463)
- LunaProtocol.transfer(address,uint256) (#1187-1194)
allowance(address,address) should be declared external:
- ERC20.allowance(address,address) (#465-467)
- LunaProtocol.allowance(address,address) (#1158-1160)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (#469-472)
- LunaProtocol.approve(address,uint256) (#1152-1156)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (#474-482)
- LunaProtocol.transferFrom(address,address,uint256) (#1196-1207)
distributeDividends(uint256) should be declared external:
- DividendPayingToken.distributeDividends(uint256) (#579-590)
withdrawDividend() should be declared external:
- DividendPayingToken.withdrawDividend() (#592-594)
- DividendTracker.withdrawDividend() (#693-695)
dividendOf(address) should be declared external:
- DividendPayingToken.dividendOf(address) (#613-615)
withdrawnDividendOf(address) should be declared external:
- DividendPayingToken.withdrawnDividendOf(address) (#621-623)
getAccountAtIndex(uint256) should be declared external:
- DividendTracker.getAccountAtIndex(uint256) (#776-793)
process(uint256) should be declared external:
- DividendTracker.process(uint256) (#820-865)
decreaseAllowance(address,uint256) should be declared external:
- LunaProtocol.decreaseAllowance(address,uint256) (#1162-1171)
increaseAllowance(address,uint256) should be declared external:
- LunaProtocol.increaseAllowance(address,uint256) (#1173-1177)
isExcludedFromFees(address) should be declared external:
- LunaProtocol.isExcludedFromFees(address) (#1285-1287)
updateDividendTracker(address) should be declared external:
- LunaProtocol.updateDividendTracker(address) (#1516-1532)
updateGasForProcessing(uint256) should be declared external:
- LunaProtocol.updateGasForProcessing(uint256) (#1534-1539)
withdrawableDividendOf(address) should be declared external:
- LunaProtocol.withdrawableDividendOf(address) (#1556-1558)
dividendTokenBalanceOf(address) should be declared external:
- LunaProtocol.dividendTokenBalanceOf(address) (#1560-1562)
totalRewardsEarned(address) should be declared external:
- LunaProtocol.totalRewardsEarned(address) (#1564-1566)
Use the external attribute for functions never called from the contract.
Additional information: link
BscScan page for the token does not contain additional info: website, socials, description, etc.
Additional information: link
Unable to find audit link on the website
Unable to find token on CoinGecko
Additional information: link
Unable to find token on CoinMarketCap
Additional information: link
Token is not listed at Mobula.Finance
Additional information: link
Unable to find token on CoinHunt
Additional information: link
Unable to find code repository for the project
Young tokens have high risks of scam / price dump / death
Token has no active CoinMarketCap listing / rank
Young tokens have high risks of scam / price dump / death
Young tokens have high risks of scam / price dump / death
Token has no active CoinGecko listing / rank
Unable to find Blog account (Reddit or Medium)
Unable to find Youtube account
Unable to find Discord account