A Binance Smart Chain DeFi deflationary token with non-custodial staking and charity support.
Emo Coin is an emoji based meme coin with a game and NFT marketplace, combined with new emoji packs.
Reentrancy in EMOCOIN._transfer(address,address,uint256) (EmoCoin.sol#218-269):
External calls:
- antibot.check(from,to,amount) (EmoCoin.sol#227)
- swapAndSendToFee(marketingTokens) (EmoCoin.sol#237)
- IERC20(rewardToken).transfer(marketingWalletAddress1,halfBalance) (EmoCoin.sol#278)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#328-334)
- IERC20(rewardToken).transfer(marketingWalletAddress2,newBalance - halfBalance) (EmoCoin.sol#279)
- swapAndLiquify(swapTokens) (EmoCoin.sol#240)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (EmoCoin.sol#339-346)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#312-318)
- swapAndSendDividends(dividendTokens) (EmoCoin.sol#243)
- success = IERC20(rewardToken).transfer(address(dividendTracker),dividends) (EmoCoin.sol#352)
- dividendTracker.distributeCAKEDividends(dividends) (EmoCoin.sol#355)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#328-334)
External calls sending eth:
- swapAndLiquify(swapTokens) (EmoCoin.sol#240)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (EmoCoin.sol#339-346)
State variables written after the call(s):
- _burn(address(this),balanceOf(address(this))) (EmoCoin.sol#245)
- _balances[account] = accountBalance - amount (ERC20.sol#288)
- super._transfer(from,address(this),fees) (EmoCoin.sol#257)
- _balances[from] = fromBalance - amount (ERC20.sol#239)
- _balances[to] += amount (ERC20.sol#241)
- super._transfer(from,to,amount) (EmoCoin.sol#260)
- _balances[from] = fromBalance - amount (ERC20.sol#239)
- _balances[to] += amount (ERC20.sol#241)
- swapping = false (EmoCoin.sol#246)
Apply the check-effects-interactions pattern.
Additional information: link
ERC20Upgradeable.__gap (ERC20Upgradeable.sol#394) shadows:
- ContextUpgradeable.__gap (ContextUpgradeable.sol#36)
OwnableUpgradeable.__gap (OwnableUpgradeable.sol#94) shadows:
- ContextUpgradeable.__gap (ContextUpgradeable.sol#36)
Remove the state variable shadowing.
Additional information: link
EMOCOIN.swapAndSendToFee(uint256) (EmoCoin.sol#271-280) ignores return value by IERC20(rewardToken).transfer(marketingWalletAddress1,halfBalance) (EmoCoin.sol#278)
EMOCOIN.swapAndSendToFee(uint256) (EmoCoin.sol#271-280) ignores return value by IERC20(rewardToken).transfer(marketingWalletAddress2,newBalance - halfBalance) (EmoCoin.sol#279)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
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 ownership is not renounced (belongs to a wallet)
Function ContextUpgradeable.__Context_init() (ContextUpgradeable.sol#18-19) is not in mixedCase
Function ContextUpgradeable.__Context_init_unchained() (ContextUpgradeable.sol#21-22) is not in mixedCase
Variable ContextUpgradeable.__gap (ContextUpgradeable.sol#36) is not in mixedCase
Function DividendPayingToken.__DividendPayingToken_init(address,string,string) (EMOCOINDividendTracker.sol#107-115) is not in mixedCase
Parameter DividendPayingToken.__DividendPayingToken_init(address,string,string)._rewardToken (EMOCOINDividendTracker.sol#108) is not in mixedCase
Parameter DividendPayingToken.__DividendPayingToken_init(address,string,string)._name (EMOCOINDividendTracker.sol#109) is not in mixedCase
Parameter DividendPayingToken.__DividendPayingToken_init(address,string,string)._symbol (EMOCOINDividendTracker.sol#110) is not in mixedCase
Parameter DividendPayingToken.dividendOf(address)._owner (EMOCOINDividendTracker.sol#169) is not in mixedCase
Parameter DividendPayingToken.withdrawableDividendOf(address)._owner (EMOCOINDividendTracker.sol#176) is not in mixedCase
Parameter DividendPayingToken.withdrawnDividendOf(address)._owner (EMOCOINDividendTracker.sol#188) is not in mixedCase
Parameter DividendPayingToken.accumulativeDividendOf(address)._owner (EMOCOINDividendTracker.sol#202) is not in mixedCase
Constant DividendPayingToken.magnitude (EMOCOINDividendTracker.sol#87) is not in UPPER_CASE_WITH_UNDERSCORES
Parameter EMOCOINDividendTracker.getAccount(address)._account (EMOCOINDividendTracker.sol#373) is not in mixedCase
Function ERC20Upgradeable.__ERC20_init(string,string) (ERC20Upgradeable.sol#55-57) is not in mixedCase
Function ERC20Upgradeable.__ERC20_init_unchained(string,string) (ERC20Upgradeable.sol#59-62) is not in mixedCase
Variable ERC20Upgradeable.__gap (ERC20Upgradeable.sol#394) is not in mixedCase
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (IUniswapV2Pair.sol#19) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (IUniswapV2Pair.sol#20) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (IUniswapV2Pair.sol#37) is not in mixedCase
Function IUniswapV2Router01.WETH() (IUniswapV2Router01.sol#6) is not in mixedCase
Function OwnableUpgradeable.__Ownable_init() (OwnableUpgradeable.sol#29-31) is not in mixedCase
Function OwnableUpgradeable.__Ownable_init_unchained() (OwnableUpgradeable.sol#33-35) is not in mixedCase
Variable OwnableUpgradeable.__gap (OwnableUpgradeable.sol#94) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Reentrancy in DividendPayingToken._withdrawDividendOfUser(address) (EMOCOINDividendTracker.sol#138-164):
External calls:
- success = IERC20(rewardToken).transfer(user,_withdrawableDividend) (EMOCOINDividendTracker.sol#148-151)
State variables written after the call(s):
- withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend) (EMOCOINDividendTracker.sol#154-156)
Apply the check-effects-interactions pattern.
Additional information: link
EMOCOIN.processDividendTracker(uint256) (EmoCoin.sol#202-204) ignores return value by dividendTracker.process(gas) (EmoCoin.sol#203)
EMOCOIN.claim() (EmoCoin.sol#206-208) ignores return value by dividendTracker.processAccount(address(msg.sender),false) (EmoCoin.sol#207)
EMOCOIN._transfer(address,address,uint256) (EmoCoin.sol#218-269) ignores return value by dividendTracker.process(gas) (EmoCoin.sol#267)
EMOCOIN.addLiquidity(uint256,uint256) (EmoCoin.sol#337-347) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (EmoCoin.sol#339-346)
Ensure that all the return values of the function calls are used.
Additional information: link
DividendPayingToken.__DividendPayingToken_init(address,string,string)._name (EMOCOINDividendTracker.sol#109) shadows:
- ERC20Upgradeable._name (ERC20Upgradeable.sol#43) (state variable)
DividendPayingToken.__DividendPayingToken_init(address,string,string)._symbol (EMOCOINDividendTracker.sol#110) shadows:
- ERC20Upgradeable._symbol (ERC20Upgradeable.sol#44) (state variable)
DividendPayingToken.dividendOf(address)._owner (EMOCOINDividendTracker.sol#169) shadows:
- OwnableUpgradeable._owner (OwnableUpgradeable.sol#22) (state variable)
DividendPayingToken.withdrawableDividendOf(address)._owner (EMOCOINDividendTracker.sol#176) shadows:
- OwnableUpgradeable._owner (OwnableUpgradeable.sol#22) (state variable)
DividendPayingToken.withdrawnDividendOf(address)._owner (EMOCOINDividendTracker.sol#188) shadows:
- OwnableUpgradeable._owner (OwnableUpgradeable.sol#22) (state variable)
DividendPayingToken.accumulativeDividendOf(address)._owner (EMOCOINDividendTracker.sol#202) shadows:
- OwnableUpgradeable._owner (OwnableUpgradeable.sol#22) (state variable)
Rename the local variables that shadow another component.
Additional information: link
EMOCOIN.setSwapTokensAtAmount(uint256) (EmoCoin.sol#85-87) should emit an event for:
- swapTokensAtAmount = amount (EmoCoin.sol#86)
EMOCOIN.setTokenRewardsFee(uint256) (EmoCoin.sol#108-112) should emit an event for:
- tokenRewardsFee = value (EmoCoin.sol#109)
- totalFees = tokenRewardsFee.add(liquidityFee).add(marketingFee).add(burnFee) (EmoCoin.sol#110)
EMOCOIN.setLiquiditFee(uint256) (EmoCoin.sol#114-118) should emit an event for:
- liquidityFee = value (EmoCoin.sol#115)
- totalFees = tokenRewardsFee.add(liquidityFee).add(marketingFee).add(burnFee) (EmoCoin.sol#116)
EMOCOIN.setMarketingFee(uint256) (EmoCoin.sol#120-124) should emit an event for:
- marketingFee = value (EmoCoin.sol#121)
- totalFees = tokenRewardsFee.add(liquidityFee).add(marketingFee).add(burnFee) (EmoCoin.sol#122)
EMOCOIN.setBurnFee(uint256) (EmoCoin.sol#125-129) should emit an event for:
- totalFees = burnFee.add(tokenRewardsFee).add(liquidityFee).add(marketingFee) (EmoCoin.sol#127)
EMOCOIN.updateGasForProcessing(uint256) (EmoCoin.sol#143-149) should emit an event for:
- gasForProcessing = newValue (EmoCoin.sol#148)
Emit an event for critical parameter changes.
Additional information: link
EMOCOIN.setMarketingWallet(address,address).wallet1 (EmoCoin.sol#103) lacks a zero-check on :
- marketingWalletAddress1 = wallet1 (EmoCoin.sol#104)
EMOCOIN.setMarketingWallet(address,address).wallet2 (EmoCoin.sol#103) lacks a zero-check on :
- marketingWalletAddress2 = wallet2 (EmoCoin.sol#105)
Check that the address is not zero.
Additional information: link
DividendPayingToken._withdrawDividendOfUser(address) (EMOCOINDividendTracker.sol#138-164) has external calls inside a loop: success = IERC20(rewardToken).transfer(user,_withdrawableDividend) (EMOCOINDividendTracker.sol#148-151)
Favor pull over push strategy for external calls.
Additional information: link
Reentrancy in EMOCOIN._transfer(address,address,uint256) (EmoCoin.sol#218-269):
External calls:
- antibot.check(from,to,amount) (EmoCoin.sol#227)
State variables written after the call(s):
- swapping = true (EmoCoin.sol#235)
Reentrancy in EMOCOIN._transfer(address,address,uint256) (EmoCoin.sol#218-269):
External calls:
- antibot.check(from,to,amount) (EmoCoin.sol#227)
- swapAndSendToFee(marketingTokens) (EmoCoin.sol#237)
- IERC20(rewardToken).transfer(marketingWalletAddress1,halfBalance) (EmoCoin.sol#278)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#328-334)
- IERC20(rewardToken).transfer(marketingWalletAddress2,newBalance - halfBalance) (EmoCoin.sol#279)
State variables written after the call(s):
- swapAndSendToFee(marketingTokens) (EmoCoin.sol#237)
- _allowances[owner][spender] = amount (ERC20.sol#318)
Reentrancy in EMOCOIN._transfer(address,address,uint256) (EmoCoin.sol#218-269):
External calls:
- antibot.check(from,to,amount) (EmoCoin.sol#227)
- swapAndSendToFee(marketingTokens) (EmoCoin.sol#237)
- IERC20(rewardToken).transfer(marketingWalletAddress1,halfBalance) (EmoCoin.sol#278)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#328-334)
- IERC20(rewardToken).transfer(marketingWalletAddress2,newBalance - halfBalance) (EmoCoin.sol#279)
- swapAndLiquify(swapTokens) (EmoCoin.sol#240)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (EmoCoin.sol#339-346)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#312-318)
External calls sending eth:
- swapAndLiquify(swapTokens) (EmoCoin.sol#240)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (EmoCoin.sol#339-346)
State variables written after the call(s):
- swapAndLiquify(swapTokens) (EmoCoin.sol#240)
- _allowances[owner][spender] = amount (ERC20.sol#318)
Reentrancy in EMOCOIN._transfer(address,address,uint256) (EmoCoin.sol#218-269):
External calls:
- antibot.check(from,to,amount) (EmoCoin.sol#227)
- swapAndSendToFee(marketingTokens) (EmoCoin.sol#237)
- IERC20(rewardToken).transfer(marketingWalletAddress1,halfBalance) (EmoCoin.sol#278)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#328-334)
- IERC20(rewardToken).transfer(marketingWalletAddress2,newBalance - halfBalance) (EmoCoin.sol#279)
- swapAndLiquify(swapTokens) (EmoCoin.sol#240)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (EmoCoin.sol#339-346)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#312-318)
- swapAndSendDividends(dividendTokens) (EmoCoin.sol#243)
- success = IERC20(rewardToken).transfer(address(dividendTracker),dividends) (EmoCoin.sol#352)
- dividendTracker.distributeCAKEDividends(dividends) (EmoCoin.sol#355)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#328-334)
External calls sending eth:
- swapAndLiquify(swapTokens) (EmoCoin.sol#240)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (EmoCoin.sol#339-346)
State variables written after the call(s):
- swapAndSendDividends(dividendTokens) (EmoCoin.sol#243)
- _allowances[owner][spender] = amount (ERC20.sol#318)
- _burn(address(this),balanceOf(address(this))) (EmoCoin.sol#245)
- _totalSupply -= amount (ERC20.sol#290)
Reentrancy in EMOCOIN.constructor(string,string,uint256,uint256) (EmoCoin.sol#49-81):
External calls:
- dividendTracker.initialize(rewardToken,minimumTokenBalanceForDividends_) (EmoCoin.sol#60)
- _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this),uniswapV2Router.WETH()) (EmoCoin.sol#64)
State variables written after the call(s):
- uniswapV2Pair = _uniswapV2Pair (EmoCoin.sol#65)
Reentrancy in EMOCOIN.constructor(string,string,uint256,uint256) (EmoCoin.sol#49-81):
External calls:
- dividendTracker.initialize(rewardToken,minimumTokenBalanceForDividends_) (EmoCoin.sol#60)
- _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this),uniswapV2Router.WETH()) (EmoCoin.sol#64)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (EmoCoin.sol#66)
- dividendTracker.excludeFromDividends(pair) (EmoCoin.sol#135)
- dividendTracker.excludeFromDividends(address(dividendTracker)) (EmoCoin.sol#69)
- dividendTracker.excludeFromDividends(address(this)) (EmoCoin.sol#70)
- dividendTracker.excludeFromDividends(owner()) (EmoCoin.sol#71)
- dividendTracker.excludeFromDividends(address(0xdead)) (EmoCoin.sol#72)
- dividendTracker.excludeFromDividends(address(uniswapV2Router)) (EmoCoin.sol#73)
State variables written after the call(s):
- _mint(owner(),totalSupply_) (EmoCoin.sol#80)
- _balances[account] += amount (ERC20.sol#263)
- excludeFromFees(owner(),true) (EmoCoin.sol#75)
- _isExcludedFromFees[account] = excluded (EmoCoin.sol#94)
- excludeFromFees(marketingWalletAddress1,true) (EmoCoin.sol#76)
- _isExcludedFromFees[account] = excluded (EmoCoin.sol#94)
- excludeFromFees(marketingWalletAddress2,true) (EmoCoin.sol#77)
- _isExcludedFromFees[account] = excluded (EmoCoin.sol#94)
- excludeFromFees(address(this),true) (EmoCoin.sol#78)
- _isExcludedFromFees[account] = excluded (EmoCoin.sol#94)
- _mint(owner(),totalSupply_) (EmoCoin.sol#80)
- _totalSupply += amount (ERC20.sol#262)
Reentrancy in EMOCOINDividendTracker.processAccount(address,bool) (EMOCOINDividendTracker.sol#524-538):
External calls:
- amount = _withdrawDividendOfUser(account) (EMOCOINDividendTracker.sol#529)
- success = IERC20(rewardToken).transfer(user,_withdrawableDividend) (EMOCOINDividendTracker.sol#148-151)
State variables written after the call(s):
- lastClaimTimes[account] = block.timestamp (EMOCOINDividendTracker.sol#532)
Reentrancy in EMOCOIN.swapAndLiquify(uint256) (EmoCoin.sol#282-301):
External calls:
- swapTokensForEth(half) (EmoCoin.sol#294)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#312-318)
- addLiquidity(otherHalf,newBalance) (EmoCoin.sol#300)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (EmoCoin.sol#339-346)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (EmoCoin.sol#300)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (EmoCoin.sol#339-346)
State variables written after the call(s):
- addLiquidity(otherHalf,newBalance) (EmoCoin.sol#300)
- _allowances[owner][spender] = amount (ERC20.sol#318)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in EMOCOIN._transfer(address,address,uint256) (EmoCoin.sol#218-269):
External calls:
- antibot.check(from,to,amount) (EmoCoin.sol#227)
- swapAndSendToFee(marketingTokens) (EmoCoin.sol#237)
- IERC20(rewardToken).transfer(marketingWalletAddress1,halfBalance) (EmoCoin.sol#278)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#328-334)
- IERC20(rewardToken).transfer(marketingWalletAddress2,newBalance - halfBalance) (EmoCoin.sol#279)
Event emitted after the call(s):
- Approval(owner,spender,amount) (ERC20.sol#319)
- swapAndSendToFee(marketingTokens) (EmoCoin.sol#237)
Reentrancy in EMOCOIN._transfer(address,address,uint256) (EmoCoin.sol#218-269):
External calls:
- antibot.check(from,to,amount) (EmoCoin.sol#227)
- swapAndSendToFee(marketingTokens) (EmoCoin.sol#237)
- IERC20(rewardToken).transfer(marketingWalletAddress1,halfBalance) (EmoCoin.sol#278)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#328-334)
- IERC20(rewardToken).transfer(marketingWalletAddress2,newBalance - halfBalance) (EmoCoin.sol#279)
- swapAndLiquify(swapTokens) (EmoCoin.sol#240)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (EmoCoin.sol#339-346)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#312-318)
External calls sending eth:
- swapAndLiquify(swapTokens) (EmoCoin.sol#240)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (EmoCoin.sol#339-346)
Event emitted after the call(s):
- Approval(owner,spender,amount) (ERC20.sol#319)
- swapAndLiquify(swapTokens) (EmoCoin.sol#240)
Reentrancy in EMOCOIN._transfer(address,address,uint256) (EmoCoin.sol#218-269):
External calls:
- antibot.check(from,to,amount) (EmoCoin.sol#227)
- swapAndSendToFee(marketingTokens) (EmoCoin.sol#237)
- IERC20(rewardToken).transfer(marketingWalletAddress1,halfBalance) (EmoCoin.sol#278)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#328-334)
- IERC20(rewardToken).transfer(marketingWalletAddress2,newBalance - halfBalance) (EmoCoin.sol#279)
- swapAndLiquify(swapTokens) (EmoCoin.sol#240)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (EmoCoin.sol#339-346)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#312-318)
- swapAndSendDividends(dividendTokens) (EmoCoin.sol#243)
- success = IERC20(rewardToken).transfer(address(dividendTracker),dividends) (EmoCoin.sol#352)
- dividendTracker.distributeCAKEDividends(dividends) (EmoCoin.sol#355)
- uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#328-334)
External calls sending eth:
- swapAndLiquify(swapTokens) (EmoCoin.sol#240)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (EmoCoin.sol#339-346)
Event emitted after the call(s):
- Approval(owner,spender,amount) (ERC20.sol#319)
- swapAndSendDividends(dividendTokens) (EmoCoin.sol#243)
- Transfer(account,address(0),amount) (ERC20.sol#292)
- _burn(address(this),balanceOf(address(this))) (EmoCoin.sol#245)
- Transfer(from,to,amount) (ERC20.sol#243)
- super._transfer(from,address(this),fees) (EmoCoin.sol#257)
- Transfer(from,to,amount) (ERC20.sol#243)
- super._transfer(from,to,amount) (EmoCoin.sol#260)
Reentrancy in EMOCOIN.constructor(string,string,uint256,uint256) (EmoCoin.sol#49-81):
External calls:
- dividendTracker.initialize(rewardToken,minimumTokenBalanceForDividends_) (EmoCoin.sol#60)
- _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this),uniswapV2Router.WETH()) (EmoCoin.sol#64)
- _setAutomatedMarketMakerPair(_uniswapV2Pair,true) (EmoCoin.sol#66)
- dividendTracker.excludeFromDividends(pair) (EmoCoin.sol#135)
- dividendTracker.excludeFromDividends(address(dividendTracker)) (EmoCoin.sol#69)
- dividendTracker.excludeFromDividends(address(this)) (EmoCoin.sol#70)
- dividendTracker.excludeFromDividends(owner()) (EmoCoin.sol#71)
- dividendTracker.excludeFromDividends(address(0xdead)) (EmoCoin.sol#72)
- dividendTracker.excludeFromDividends(address(uniswapV2Router)) (EmoCoin.sol#73)
Event emitted after the call(s):
- Transfer(address(0),account,amount) (ERC20.sol#264)
- _mint(owner(),totalSupply_) (EmoCoin.sol#80)
Reentrancy in EMOCOINDividendTracker.processAccount(address,bool) (EMOCOINDividendTracker.sol#524-538):
External calls:
- amount = _withdrawDividendOfUser(account) (EMOCOINDividendTracker.sol#529)
- success = IERC20(rewardToken).transfer(user,_withdrawableDividend) (EMOCOINDividendTracker.sol#148-151)
Event emitted after the call(s):
- Claim(account,amount,automatic) (EMOCOINDividendTracker.sol#533)
Reentrancy in EMOCOIN.swapAndLiquify(uint256) (EmoCoin.sol#282-301):
External calls:
- swapTokensForEth(half) (EmoCoin.sol#294)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (EmoCoin.sol#312-318)
- addLiquidity(otherHalf,newBalance) (EmoCoin.sol#300)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (EmoCoin.sol#339-346)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (EmoCoin.sol#300)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(0),block.timestamp) (EmoCoin.sol#339-346)
Event emitted after the call(s):
- Approval(owner,spender,amount) (ERC20.sol#319)
- addLiquidity(otherHalf,newBalance) (EmoCoin.sol#300)
Apply the check-effects-interactions pattern.
Additional information: link
EMOCOINDividendTracker.getAccount(address) (EMOCOINDividendTracker.sol#373-420) uses timestamp for comparisons
Dangerous comparisons:
- nextClaimTime > block.timestamp (EMOCOINDividendTracker.sol#417-419)
EMOCOINDividendTracker.canAutoClaim(uint256) (EMOCOINDividendTracker.sol#445-451) uses timestamp for comparisons
Dangerous comparisons:
- lastClaimTime > block.timestamp (EMOCOINDividendTracker.sol#446)
- block.timestamp.sub(lastClaimTime) >= claimWait (EMOCOINDividendTracker.sol#450)
Avoid relying on block.timestamp.
Additional information: link
AddressUpgradeable.verifyCallResult(bool,bytes,string) (AddressUpgradeable.sol#174-194) uses assembly
- INLINE ASM (AddressUpgradeable.sol#186-189)
EnumerableSet.values(EnumerableSet.AddressSet) (EnumerableSet.sol#282-292) uses assembly
- INLINE ASM (EnumerableSet.sol#287-289)
EnumerableSet.values(EnumerableSet.UintSet) (EnumerableSet.sol#356-366) uses assembly
- INLINE ASM (EnumerableSet.sol#361-363)
Do not use evm assembly.
Additional information: link
Different versions of Solidity is used:
- Version used: ['>=0.5.0', '>=0.6.2', '^0.8.0', '^0.8.1', '^0.8.2', '^0.8.4']
- ^0.8.1 (AddressUpgradeable.sol#4)
- ^0.8.0 (Context.sol#4)
- ^0.8.0 (ContextUpgradeable.sol#4)
- ^0.8.0 (EMOCOINDividendTracker.sol#3)
- ^0.8.0 (ERC20.sol#4)
- ^0.8.0 (ERC20Upgradeable.sol#4)
- ^0.8.0 (EmoCoin.sol#21)
- ^0.8.0 (EnumerableSet.sol#4)
- ^0.8.0 (IAntiBot.sol#3)
- ^0.8.0 (IERC20.sol#4)
- ^0.8.0 (IERC20Metadata.sol#4)
- ^0.8.0 (IERC20MetadataUpgradeable.sol#4)
- ^0.8.0 (IERC20Upgradeable.sol#4)
- >=0.5.0 (IUniswapV2Factory.sol#2)
- >=0.5.0 (IUniswapV2Pair.sol#2)
- >=0.6.2 (IUniswapV2Router01.sol#2)
- >=0.6.2 (IUniswapV2Router02.sol#2)
- ^0.8.2 (Initializable.sol#4)
- ^0.8.0 (IterableMapping.sol#2)
- ^0.8.0 (Ownable.sol#4)
- ^0.8.0 (OwnableUpgradeable.sol#4)
- ^0.8.0 (SafeMath.sol#4)
- ^0.8.4 (SafeMathInt.sol#2)
- ^0.8.4 (SafeMathUint.sol#2)
Use one Solidity version.
Additional information: link
AddressUpgradeable.functionCall(address,bytes) (AddressUpgradeable.sol#85-87) is never used and should be removed
AddressUpgradeable.functionCall(address,bytes,string) (AddressUpgradeable.sol#95-101) is never used and should be removed
AddressUpgradeable.functionCallWithValue(address,bytes,uint256) (AddressUpgradeable.sol#114-120) is never used and should be removed
AddressUpgradeable.functionCallWithValue(address,bytes,uint256,string) (AddressUpgradeable.sol#128-139) is never used and should be removed
AddressUpgradeable.functionStaticCall(address,bytes) (AddressUpgradeable.sol#147-149) is never used and should be removed
AddressUpgradeable.functionStaticCall(address,bytes,string) (AddressUpgradeable.sol#157-166) is never used and should be removed
AddressUpgradeable.sendValue(address,uint256) (AddressUpgradeable.sol#60-65) is never used and should be removed
AddressUpgradeable.verifyCallResult(bool,bytes,string) (AddressUpgradeable.sol#174-194) is never used and should be removed
Context._msgData() (Context.sol#21-23) is never used and should be removed
ContextUpgradeable.__Context_init() (ContextUpgradeable.sol#18-19) is never used and should be removed
ContextUpgradeable.__Context_init_unchained() (ContextUpgradeable.sol#21-22) is never used and should be removed
ContextUpgradeable._msgData() (ContextUpgradeable.sol#27-29) is never used and should be removed
DividendPayingToken._transfer(address,address,uint256) (EMOCOINDividendTracker.sol#221-236) is never used and should be removed
ERC20Upgradeable._transfer(address,address,uint256) (ERC20Upgradeable.sol#231-251) is never used and should be removed
EnumerableSet._add(EnumerableSet.Set,bytes32) (EnumerableSet.sol#62-72) is never used and should be removed
EnumerableSet._at(EnumerableSet.Set,uint256) (EnumerableSet.sol#138-140) is never used and should be removed
EnumerableSet._contains(EnumerableSet.Set,bytes32) (EnumerableSet.sol#117-119) is never used and should be removed
EnumerableSet._length(EnumerableSet.Set) (EnumerableSet.sol#124-126) is never used and should be removed
EnumerableSet._remove(EnumerableSet.Set,bytes32) (EnumerableSet.sol#80-112) is never used and should be removed
EnumerableSet._values(EnumerableSet.Set) (EnumerableSet.sol#150-152) is never used and should be removed
EnumerableSet.add(EnumerableSet.AddressSet,address) (EnumerableSet.sol#232-234) is never used and should be removed
EnumerableSet.add(EnumerableSet.Bytes32Set,bytes32) (EnumerableSet.sol#166-168) is never used and should be removed
EnumerableSet.add(EnumerableSet.UintSet,uint256) (EnumerableSet.sol#306-308) is never used and should be removed
EnumerableSet.at(EnumerableSet.AddressSet,uint256) (EnumerableSet.sol#270-272) is never used and should be removed
EnumerableSet.at(EnumerableSet.Bytes32Set,uint256) (EnumerableSet.sol#204-206) is never used and should be removed
EnumerableSet.at(EnumerableSet.UintSet,uint256) (EnumerableSet.sol#344-346) is never used and should be removed
EnumerableSet.contains(EnumerableSet.AddressSet,address) (EnumerableSet.sol#249-251) is never used and should be removed
EnumerableSet.contains(EnumerableSet.Bytes32Set,bytes32) (EnumerableSet.sol#183-185) is never used and should be removed
EnumerableSet.contains(EnumerableSet.UintSet,uint256) (EnumerableSet.sol#323-325) is never used and should be removed
EnumerableSet.length(EnumerableSet.AddressSet) (EnumerableSet.sol#256-258) is never used and should be removed
EnumerableSet.length(EnumerableSet.Bytes32Set) (EnumerableSet.sol#190-192) is never used and should be removed
EnumerableSet.length(EnumerableSet.UintSet) (EnumerableSet.sol#330-332) is never used and should be removed
EnumerableSet.remove(EnumerableSet.AddressSet,address) (EnumerableSet.sol#242-244) is never used and should be removed
EnumerableSet.remove(EnumerableSet.Bytes32Set,bytes32) (EnumerableSet.sol#176-178) is never used and should be removed
EnumerableSet.remove(EnumerableSet.UintSet,uint256) (EnumerableSet.sol#316-318) is never used and should be removed
EnumerableSet.values(EnumerableSet.AddressSet) (EnumerableSet.sol#282-292) is never used and should be removed
EnumerableSet.values(EnumerableSet.Bytes32Set) (EnumerableSet.sol#216-218) is never used and should be removed
EnumerableSet.values(EnumerableSet.UintSet) (EnumerableSet.sol#356-366) is never used and should be removed
Initializable._disableInitializers() (Initializable.sol#131-137) is never used and should be removed
SafeMath.div(uint256,uint256,string) (SafeMath.sol#191-200) is never used and should be removed
SafeMath.mod(uint256,uint256) (SafeMath.sol#151-153) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (SafeMath.sol#217-226) is never used and should be removed
SafeMath.sub(uint256,uint256,string) (SafeMath.sol#168-177) is never used and should be removed
SafeMath.tryAdd(uint256,uint256) (SafeMath.sol#22-28) is never used and should be removed
SafeMath.tryDiv(uint256,uint256) (SafeMath.sol#64-69) is never used and should be removed
SafeMath.tryMod(uint256,uint256) (SafeMath.sol#76-81) is never used and should be removed
SafeMath.tryMul(uint256,uint256) (SafeMath.sol#47-57) is never used and should be removed
SafeMath.trySub(uint256,uint256) (SafeMath.sol#35-40) is never used and should be removed
SafeMathInt.abs(int256) (SafeMathInt.sol#56-59) is never used and should be removed
SafeMathInt.div(int256,int256) (SafeMathInt.sol#27-33) is never used and should be removed
SafeMathInt.mul(int256,int256) (SafeMathInt.sol#15-22) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.1 (AddressUpgradeable.sol#4) allows old versions
Pragma version^0.8.0 (Context.sol#4) allows old versions
Pragma version^0.8.0 (ContextUpgradeable.sol#4) allows old versions
Pragma version^0.8.0 (EMOCOINDividendTracker.sol#3) allows old versions
Pragma version^0.8.0 (ERC20.sol#4) allows old versions
Pragma version^0.8.0 (ERC20Upgradeable.sol#4) allows old versions
Pragma version^0.8.0 (EmoCoin.sol#21) allows old versions
Pragma version^0.8.0 (EnumerableSet.sol#4) allows old versions
Pragma version^0.8.0 (IAntiBot.sol#3) allows old versions
Pragma version^0.8.0 (IERC20.sol#4) allows old versions
Pragma version^0.8.0 (IERC20Metadata.sol#4) allows old versions
Pragma version^0.8.0 (IERC20MetadataUpgradeable.sol#4) allows old versions
Pragma version^0.8.0 (IERC20Upgradeable.sol#4) allows old versions
Pragma version>=0.5.0 (IUniswapV2Factory.sol#2) allows old versions
Pragma version>=0.5.0 (IUniswapV2Pair.sol#2) allows old versions
Pragma version>=0.6.2 (IUniswapV2Router01.sol#2) allows old versions
Pragma version>=0.6.2 (IUniswapV2Router02.sol#2) allows old versions
Pragma version^0.8.2 (Initializable.sol#4) allows old versions
Pragma version^0.8.0 (IterableMapping.sol#2) allows old versions
Pragma version^0.8.0 (Ownable.sol#4) allows old versions
Pragma version^0.8.0 (OwnableUpgradeable.sol#4) allows old versions
Pragma version^0.8.0 (SafeMath.sol#4) allows old versions
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 AddressUpgradeable.sendValue(address,uint256) (AddressUpgradeable.sol#60-65):
- (success) = recipient.call{value: amount}() (AddressUpgradeable.sol#63)
Low level call in AddressUpgradeable.functionCallWithValue(address,bytes,uint256,string) (AddressUpgradeable.sol#128-139):
- (success,returndata) = target.call{value: value}(data) (AddressUpgradeable.sol#137)
Low level call in AddressUpgradeable.functionStaticCall(address,bytes,string) (AddressUpgradeable.sol#157-166):
- (success,returndata) = target.staticcall(data) (AddressUpgradeable.sol#164)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Variable DividendPayingToken.__DividendPayingToken_init(address,string,string)._rewardToken (EMOCOINDividendTracker.sol#108) is too similar to EMOCOINDividendTracker.initialize(address,uint256).rewardToken_ (EMOCOINDividendTracker.sol#300)
Variable DividendPayingToken._withdrawDividendOfUser(address)._withdrawableDividend (EMOCOINDividendTracker.sol#142) is too similar to EMOCOINDividendTracker.getAccount(address).withdrawableDividends (EMOCOINDividendTracker.sol#380)
Variable ERC20._totalSupply (ERC20.sol#40) is too similar to EMOCOIN.constructor(string,string,uint256,uint256).totalSupply_ (EmoCoin.sol#52)
Variable EMOCOIN.marketingWalletAddress1 (EmoCoin.sol#33) is too similar to EMOCOIN.marketingWalletAddress2 (EmoCoin.sol#34)
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (IUniswapV2Router01.sol#11) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (IUniswapV2Router01.sol#12)
Prevent variables from having similar names.
Additional information: link
EMOCOIN.constructor(string,string,uint256,uint256) (EmoCoin.sol#49-81) uses literals with too many digits:
- gasForProcessing = 300000 (EmoCoin.sol#57)
EMOCOIN.updateGasForProcessing(uint256) (EmoCoin.sol#143-149) uses literals with too many digits:
- require(bool,string)(newValue >= 200000 && newValue <= 600000,EMOCOIN: gasForProcessing must be between 200,000 and 500,000) (EmoCoin.sol#144-147)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
OwnableUpgradeable.__gap (OwnableUpgradeable.sol#94) is never used in EMOCOINDividendTracker (EMOCOINDividendTracker.sol#275-540)
SafeMathInt.MAX_INT256 (SafeMathInt.sol#10) is never used in SafeMathInt (SafeMathInt.sol#8-66)
Remove unused state variables.
Additional information: link
EMOCOIN.rewardToken (EmoCoin.sol#32) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
distributeCAKEDividends(uint256) should be declared external:
- DividendPayingToken.distributeCAKEDividends(uint256) (EMOCOINDividendTracker.sol#117-128)
withdrawDividend() should be declared external:
- DividendPayingToken.withdrawDividend() (EMOCOINDividendTracker.sol#132-134)
- EMOCOINDividendTracker.withdrawDividend() (EMOCOINDividendTracker.sol#320-325)
dividendOf(address) should be declared external:
- DividendPayingToken.dividendOf(address) (EMOCOINDividendTracker.sol#169-171)
withdrawnDividendOf(address) should be declared external:
- DividendPayingToken.withdrawnDividendOf(address) (EMOCOINDividendTracker.sol#188-195)
isExcludedFromDividends(address) should be declared external:
- EMOCOINDividendTracker.isExcludedFromDividends(address) (EMOCOINDividendTracker.sol#337-343)
getAccountAtIndex(uint256) should be declared external:
- EMOCOINDividendTracker.getAccountAtIndex(uint256) (EMOCOINDividendTracker.sol#422-443)
process(uint256) should be declared external:
- EMOCOINDividendTracker.process(uint256) (EMOCOINDividendTracker.sol#470-522)
name() should be declared external:
- ERC20.name() (ERC20.sol#62-64)
symbol() should be declared external:
- ERC20.symbol() (ERC20.sol#70-72)
decimals() should be declared external:
- ERC20.decimals() (ERC20.sol#87-89)
totalSupply() should be declared external:
- ERC20.totalSupply() (ERC20.sol#94-96)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (ERC20.sol#113-117)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (ERC20.sol#136-140)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (ERC20.sol#158-167)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (ERC20.sol#181-185)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (ERC20.sol#201-210)
name() should be declared external:
- ERC20Upgradeable.name() (ERC20Upgradeable.sol#67-69)
symbol() should be declared external:
- ERC20Upgradeable.symbol() (ERC20Upgradeable.sol#75-77)
decimals() should be declared external:
- ERC20Upgradeable.decimals() (ERC20Upgradeable.sol#92-94)
transfer(address,uint256) should be declared external:
- ERC20Upgradeable.transfer(address,uint256) (ERC20Upgradeable.sol#118-122)
approve(address,uint256) should be declared external:
- ERC20Upgradeable.approve(address,uint256) (ERC20Upgradeable.sol#141-145)
transferFrom(address,address,uint256) should be declared external:
- ERC20Upgradeable.transferFrom(address,address,uint256) (ERC20Upgradeable.sol#163-172)
increaseAllowance(address,uint256) should be declared external:
- ERC20Upgradeable.increaseAllowance(address,uint256) (ERC20Upgradeable.sol#186-190)
decreaseAllowance(address,uint256) should be declared external:
- ERC20Upgradeable.decreaseAllowance(address,uint256) (ERC20Upgradeable.sol#206-215)
excludeMultipleAccountsFromFees(address[],bool) should be declared external:
- EMOCOIN.excludeMultipleAccountsFromFees(address[],bool) (EmoCoin.sol#97-101)
setAnitbotEnabled(bool) should be declared external:
- EMOCOIN.setAnitbotEnabled(bool) (EmoCoin.sol#139-141)
updateGasForProcessing(uint256) should be declared external:
- EMOCOIN.updateGasForProcessing(uint256) (EmoCoin.sol#143-149)
isExcludedFromFees(address) should be declared external:
- EMOCOIN.isExcludedFromFees(address) (EmoCoin.sol#174-176)
withdrawableDividendOf(address) should be declared external:
- EMOCOIN.withdrawableDividendOf(address) (EmoCoin.sol#178-180)
dividendTokenBalanceOf(address) should be declared external:
- EMOCOIN.dividendTokenBalanceOf(address) (EmoCoin.sol#182-184)
isExcludedFromDividends(address) should be declared external:
- EMOCOIN.isExcludedFromDividends(address) (EmoCoin.sol#190-192)
processDividendTracker(uint256) should be declared external:
- EMOCOIN.processDividendTracker(uint256) (EmoCoin.sol#202-204)
get(IterableMapping.Map,address) should be declared external:
- IterableMapping.get(IterableMapping.Map,address) (IterableMapping.sol#13-15)
getIndexOfKey(IterableMapping.Map,address) should be declared external:
- IterableMapping.getIndexOfKey(IterableMapping.Map,address) (IterableMapping.sol#17-26)
getKeyAtIndex(IterableMapping.Map,uint256) should be declared external:
- IterableMapping.getKeyAtIndex(IterableMapping.Map,uint256) (IterableMapping.sol#28-34)
size(IterableMapping.Map) should be declared external:
- IterableMapping.size(IterableMapping.Map) (IterableMapping.sol#36-38)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (Ownable.sol#61-63)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (Ownable.sol#69-72)
renounceOwnership() should be declared external:
- OwnableUpgradeable.renounceOwnership() (OwnableUpgradeable.sol#66-68)
transferOwnership(address) should be declared external:
- OwnableUpgradeable.transferOwnership(address) (OwnableUpgradeable.sol#74-77)
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 token contract audit
Unable to find KYC or doxxing proof
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
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
Token has no active CoinMarketCap listing / rank
Telegram account has relatively few subscribers
Unable to find Blog account (Reddit or Medium)
Unable to find Youtube account
Unable to find Discord account