Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
SwapHandler._createLP(uint256) (#1281-1290) sends eth to arbitrary user
Dangerous calls:
- IRouter(swapRouter).addLiquidityETH{value: address(this).balance}(owner(),erc20Amount_,0,0,erc20.autoLPWallet(),block.timestamp + 10000) (#1282-1289)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in HODLRewardsDistributor.batchProcessClaims(uint256) (#1090-1104):
External calls:
- claimPending(allShareHolders[_lastProccessedIndex]) (#1098)
- returndata = address(token).functionCall(data,SafeERC20: low-level call failed) (#899)
- (success,returndata) = target.call{value: value}(data) (#154)
- IERC20(rewardsaddress).safeTransfer(sharholderAddress_,pendingAmount) (#1079)
External calls sending eth:
- claimPending(allShareHolders[_lastProccessedIndex]) (#1098)
- (success,returndata) = target.call{value: value}(data) (#154)
State variables written after the call(s):
- _incrementLastProccessed() (#1101)
- _lastProccessedIndex ++ (#1168)
- _lastProccessedIndex = 1 (#1170)
Reentrancy in HODLRewardsDistributor.setShare(address,uint256) (#1018-1030):
External calls:
- claimPending(sharholderAddress_) (#1026)
- returndata = address(token).functionCall(data,SafeERC20: low-level call failed) (#899)
- (success,returndata) = target.call{value: value}(data) (#154)
- IERC20(rewardsaddress).safeTransfer(sharholderAddress_,pendingAmount) (#1079)
External calls sending eth:
- claimPending(sharholderAddress_) (#1026)
- (success,returndata) = target.call{value: value}(data) (#154)
State variables written after the call(s):
- _updateUserShares(sharholderAddress_,amount_) (#1029)
- user.shares = newAmount_ (#1148)
- user.rewardDebt = user.shares.mul(accPerShare).div(1e36) (#1149)
- _updateUserShares(sharholderAddress_,amount_) (#1029)
- totalRewardsDebt = totalRewardsDebt.sub(user.rewardDebt) (#1147)
- totalRewardsDebt = totalRewardsDebt.add(user.rewardDebt) (#1150)
Apply the check-effects-interactions pattern.
Additional information: link
HODLRewardsDistributor.depositWrappedNativeTokenRewards(uint256) (#1011-1016) ignores return value by IWrappedNativeToken(wbnb).transferFrom(msg.sender,address(this),amount_) (#1014)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
HODLRewardsDistributor._updateUserShares(address,uint256) (#1140-1165) uses a dangerous strict equality:
- user.shares == 0 && indexOfShareHolders[sharholderAddress_] != 0 (#1156)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
Combination 1: Reentrancy vulnerabilities + Functions that send Ether to arbitraty destination. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
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.
Variable IHODLRewardDistributor.excludeFromRewards(address).shareHolderToBeExcluded_ (#284) is too similar to IHODLRewardDistributor.includeInRewards(address).shareHolderToBeIncluded_ (#288)
Variable HODLRewardsDistributor.excludeFromRewards(address).shareHolderToBeExcluded_ (#1036) is too similar to HODLRewardsDistributor.includeInRewards(address).shareHolderToBeIncluded_ (#1055)
Variable YumiCat.TOTAL_SUPPLY (#1708) is too similar to ERC20._totalSupply (#1372)
Prevent variables from having similar names.
Additional information: link
YumiCat.slitherConstructorVariables() (#1695-2122) uses literals with too many digits:
- processingGasLimit = 300000 (#1757)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
Reentrancy in YumiCat._customTransfer(address,address,uint256) (#2056-2091):
External calls:
- _transfer(from_,address(swapHundler),currentTax) (#2080)
- hodlRewardDistributor.batchProcessClaims(processingGasLimit) (#2095-2097)
- hodlRewardDistributor.setShare(wallet,balanceOf(wallet)) (#2119)
- hodlRewardDistributor.setShare(wallet,0) (#2119)
- hodlRewardDistributor.batchProcessClaims(gasleft()().mul(80).div(100)) (#2095-2097)
- processReserves() (#2084)
- swapHundler.swapToNativeWrappedToken(autoLPReserved,hodlReserved,marketingReserved) (#1894-1898)
State variables written after the call(s):
- processReserves() (#2084)
- autoLPReserved = 0 (#1900)
- processReserves() (#2084)
- hodlReserved = 0 (#1901)
- processReserves() (#2084)
- marketingReserved = 0 (#1902)
Reentrancy in YumiCat._customTransfer(address,address,uint256) (#2056-2091):
External calls:
- _transfer(from_,address(swapHundler),currentTax) (#2080)
- hodlRewardDistributor.batchProcessClaims(processingGasLimit) (#2095-2097)
- hodlRewardDistributor.setShare(wallet,balanceOf(wallet)) (#2119)
- hodlRewardDistributor.setShare(wallet,0) (#2119)
- hodlRewardDistributor.batchProcessClaims(gasleft()().mul(80).div(100)) (#2095-2097)
- processReserves() (#2084)
- swapHundler.swapToNativeWrappedToken(autoLPReserved,hodlReserved,marketingReserved) (#1894-1898)
- _transfer(from_,to_,netTransfer) (#2087)
- hodlRewardDistributor.batchProcessClaims(processingGasLimit) (#2095-2097)
- hodlRewardDistributor.setShare(wallet,balanceOf(wallet)) (#2119)
- hodlRewardDistributor.setShare(wallet,0) (#2119)
- hodlRewardDistributor.batchProcessClaims(gasleft()().mul(80).div(100)) (#2095-2097)
State variables written after the call(s):
- _transfer(from_,to_,netTransfer) (#2087)
- _balances[sender] = senderBalance - amount (#1566)
- _balances[recipient] += amount (#1568)
Reentrancy in HODLRewardsDistributor.claimPending(address) (#1070-1088):
External calls:
- IERC20(rewardsaddress).safeTransfer(sharholderAddress_,pendingAmount) (#1079)
State variables written after the call(s):
- user.claimed = user.claimed.add(pendingAmount) (#1082)
- user.rewardDebt = user.shares.mul(accPerShare).div(1e36) (#1086)
Reentrancy in YumiCat.constructor(string,string,address,address,address,address,address) (#1765-1841):
External calls:
- wbnbPair = IFactory(IRouter(swapRouter_).factory()).createPair(wbnb_,address(this)) (#1781-1783)
- _mint(autoLP_,TOTAL_SUPPLY) (#1820)
- hodlRewardDistributor.batchProcessClaims(processingGasLimit) (#2095-2097)
- hodlRewardDistributor.setShare(wallet,balanceOf(wallet)) (#2119)
- hodlRewardDistributor.setShare(wallet,0) (#2119)
- hodlRewardDistributor.batchProcessClaims(gasleft()().mul(80).div(100)) (#2095-2097)
State variables written after the call(s):
- hodlRewardDistributor = new HODLRewardsDistributor(wbnb_,rewardsAddress_,swapRouter_) (#1823)
Reentrancy in YumiCat.constructor(string,string,address,address,address,address,address) (#1765-1841):
External calls:
- wbnbPair = IFactory(IRouter(swapRouter_).factory()).createPair(wbnb_,address(this)) (#1781-1783)
- _mint(autoLP_,TOTAL_SUPPLY) (#1820)
- hodlRewardDistributor.batchProcessClaims(processingGasLimit) (#2095-2097)
- hodlRewardDistributor.setShare(wallet,balanceOf(wallet)) (#2119)
- hodlRewardDistributor.setShare(wallet,0) (#2119)
- hodlRewardDistributor.batchProcessClaims(gasleft()().mul(80).div(100)) (#2095-2097)
- hodlRewardDistributor.excludeFromRewards(wbnbPair) (#1827)
- hodlRewardDistributor.excludeFromRewards(swapRouter) (#1828)
- hodlRewardDistributor.excludeFromRewards(autoLPWallet) (#1829)
- hodlRewardDistributor.excludeFromRewards(marketingWallet) (#1830)
- hodlRewardDistributor.excludeFromRewards(address(this)) (#1831)
- hodlRewardDistributor.excludeFromRewards(address(swapHundler)) (#1832)
State variables written after the call(s):
- isDistributorSet = true (#1840)
- whitlisted[address(hodlRewardDistributor)] = Whitlisted(true,true,true) (#1834-1838)
Reentrancy in YumiCat.processReserves() (#1893-1903):
External calls:
- swapHundler.swapToNativeWrappedToken(autoLPReserved,hodlReserved,marketingReserved) (#1894-1898)
State variables written after the call(s):
- autoLPReserved = 0 (#1900)
- hodlReserved = 0 (#1901)
- marketingReserved = 0 (#1902)
Reentrancy in YumiCat.transferFrom(address,address,uint256) (#1873-1883):
External calls:
- success = _customTransfer(from_,to_,amount_) (#1880)
- swapHundler.swapToNativeWrappedToken(autoLPReserved,hodlReserved,marketingReserved) (#1894-1898)
- hodlRewardDistributor.setShare(wallet,balanceOf(wallet)) (#2119)
- hodlRewardDistributor.batchProcessClaims(processingGasLimit) (#2095-2097)
- hodlRewardDistributor.setShare(wallet,0) (#2119)
- hodlRewardDistributor.batchProcessClaims(gasleft()().mul(80).div(100)) (#2095-2097)
State variables written after the call(s):
- approve(from_,allowance(from_,_msgSender()).sub(amount_)) (#1881)
- _allowances[owner][spender] = amount (#1645)
Apply the check-effects-interactions pattern.
Additional information: link
SwapHandler.swapToNativeWrappedToken(uint256,uint256,uint256) (#1221-1257) ignores return value by address(erc20.hodlRewardDistributor()).call{value: address(this).balance}() (#1253)
Ensure that the return value of a low-level call is checked or logged.
Additional information: link
SwapHandler.swapToNativeWrappedToken(uint256,uint256,uint256) (#1221-1257) ignores return value by IERC20(owner()).approve(swapRouter,IERC20(owner()).balanceOf(address(this))) (#1226)
SwapHandler._createLP(uint256) (#1281-1290) ignores return value by IRouter(swapRouter).addLiquidityETH{value: address(this).balance}(owner(),erc20Amount_,0,0,erc20.autoLPWallet(),block.timestamp + 10000) (#1282-1289)
Ensure that all the return values of the function calls are used.
Additional information: link
YumiCat.setMaxTx(uint256) (#1760) should emit an event for:
- maxTx = maxTx_ (#1760)
YumiCat.setMaxBalance(uint256) (#1763) should emit an event for:
- maxBalance = maxBalance_ (#1763)
YumiCat.setPeocessingGasLimit(uint256) (#2021-2025) should emit an event for:
- processingGasLimit = maxAmount_ (#2024)
YumiCat.setMinimumShareForRewards(uint256) (#2035-2037) should emit an event for:
- minimumShareForRewards = minimumAmount_ (#2036)
Emit an event for critical parameter changes.
Additional information: link
HODLRewardsDistributor.constructor(address,address,address).wbnb_ (#963) lacks a zero-check on :
- wbnb = wbnb_ (#964)
HODLRewardsDistributor.constructor(address,address,address).rewardsAddress_ (#963) lacks a zero-check on :
- rewardsaddress = rewardsAddress_ (#966)
HODLRewardsDistributor.constructor(address,address,address).swapRouter_ (#963) lacks a zero-check on :
- swapRouter = swapRouter_ (#967)
SwapHandler.constructor(address,address).swapRouter_ (#1210) lacks a zero-check on :
- swapRouter = swapRouter_ (#1213)
SwapHandler.constructor(address,address).wrappedNativeToken_ (#1211) lacks a zero-check on :
- wrappedNativeToken = wrappedNativeToken_ (#1214)
YumiCat.constructor(string,string,address,address,address,address,address).wbnb_ (#1769) lacks a zero-check on :
- wbnb = wbnb_ (#1775)
- wbnbPair = IFactory(IRouter(swapRouter_).factory()).createPair(wbnb_,address(this)) (#1781-1783)
YumiCat.constructor(string,string,address,address,address,address,address).swapRouter_ (#1770) lacks a zero-check on :
- swapRouter = swapRouter_ (#1776)
- wbnbPair = IFactory(IRouter(swapRouter_).factory()).createPair(wbnb_,address(this)) (#1781-1783)
YumiCat.constructor(string,string,address,address,address,address,address).autoLP_ (#1771) lacks a zero-check on :
- autoLPWallet = autoLP_ (#1777)
YumiCat.constructor(string,string,address,address,address,address,address).marketing_ (#1772) lacks a zero-check on :
- marketingWallet = marketing_ (#1778)
Check that the address is not zero.
Additional information: link
Address.functionCallWithValue(address,bytes,uint256,string) (#145-156) has external calls inside a loop: (success,returndata) = target.call{value: value}(data) (#154)
Favor pull over push strategy for external calls.
Additional information: link
renounceOwnership() should be declared external:
- HODLRewardsDistributor.renounceOwnership() (#1110)
- Ownable.renounceOwnership() (#697-699)
- YumiCat.renounceOwnership() (#2030)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#705-708)
- SwapHandler.transferOwnership(address) (#1296-1300)
totalPending() should be declared external:
- HODLRewardsDistributor.totalPending() (#982-984)
batchProcessClaims(uint256) should be declared external:
- HODLRewardsDistributor.batchProcessClaims(uint256) (#1090-1104)
name() should be declared external:
- ERC20.name() (#1394-1396)
symbol() should be declared external:
- ERC20.symbol() (#1402-1404)
decimals() should be declared external:
- ERC20.decimals() (#1419-1421)
- YumiCat.decimals() (#1704-1706)
totalSupply() should be declared external:
- ERC20.totalSupply() (#1426-1428)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (#1445-1448)
- YumiCat.transfer(address,uint256) (#1866-1871)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (#1482-1496)
- YumiCat.transferFrom(address,address,uint256) (#1873-1883)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (#1510-1513)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (#1529-1537)
Use the external attribute for functions never called from the contract.
Additional information: link
Reentrancy in HODLRewardsDistributor.claimPending(address) (#1070-1088):
External calls:
- IERC20(rewardsaddress).safeTransfer(sharholderAddress_,pendingAmount) (#1079)
State variables written after the call(s):
- totalClaimed = totalClaimed.add(pendingAmount) (#1083)
- totalRewardsDebt = totalRewardsDebt.sub(user.rewardDebt) (#1085)
- totalRewardsDebt = totalRewardsDebt.add(user.rewardDebt) (#1087)
Reentrancy in YumiCat.constructor(string,string,address,address,address,address,address) (#1765-1841):
External calls:
- wbnbPair = IFactory(IRouter(swapRouter_).factory()).createPair(wbnb_,address(this)) (#1781-1783)
State variables written after the call(s):
- isLpPair[wbnbPair] = true (#1785)
- swapHundler = new SwapHandler(swapRouter_,wbnb_) (#1787)
- whitlisted[autoLP_] = Whitlisted(true,true,true) (#1790-1794)
- whitlisted[marketing_] = Whitlisted(true,true,true) (#1796-1800)
- whitlisted[address(this)] = Whitlisted(true,true,true) (#1802-1806)
- whitlisted[address(swapHundler)] = Whitlisted(true,true,true) (#1808-1812)
- whitlisted[swapRouter_] = Whitlisted(true,true,false) (#1814-1818)
Reentrancy in YumiCat.initDistributor(address) (#1843-1864):
External calls:
- hodlRewardDistributor.excludeFromRewards(wbnbPair) (#1850)
- hodlRewardDistributor.excludeFromRewards(swapRouter) (#1851)
- hodlRewardDistributor.excludeFromRewards(autoLPWallet) (#1852)
- hodlRewardDistributor.excludeFromRewards(marketingWallet) (#1853)
- hodlRewardDistributor.excludeFromRewards(address(this)) (#1854)
- hodlRewardDistributor.excludeFromRewards(address(swapHundler)) (#1855)
State variables written after the call(s):
- isDistributorSet = true (#1863)
- whitlisted[distributor_] = Whitlisted(true,true,true) (#1857-1861)
Reentrancy in HODLRewardsDistributor.receive() (#957-962):
External calls:
- _swap(msg.value) (#959)
- IRouter(swapRouter).swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount_}(0,path,address(this),block.timestamp + 1000) (#1129-1134)
State variables written after the call(s):
- _updateGlobalShares(addedBalance) (#961)
- accPerShare = accPerShare.add(amount_.mul(1e36).div(totalShares)) (#1118)
Reentrancy in YumiCat.setReflection(bool) (#2005-2012):
External calls:
- processReserves() (#2010)
- swapHundler.swapToNativeWrappedToken(autoLPReserved,hodlReserved,marketingReserved) (#1894-1898)
State variables written after the call(s):
- reflectionEnabled = isEnabled_ (#2011)
Reentrancy in HODLRewardsDistributor.setShare(address,uint256) (#1018-1030):
External calls:
- claimPending(sharholderAddress_) (#1026)
- returndata = address(token).functionCall(data,SafeERC20: low-level call failed) (#899)
- (success,returndata) = target.call{value: value}(data) (#154)
- IERC20(rewardsaddress).safeTransfer(sharholderAddress_,pendingAmount) (#1079)
External calls sending eth:
- claimPending(sharholderAddress_) (#1026)
- (success,returndata) = target.call{value: value}(data) (#154)
State variables written after the call(s):
- _updateUserShares(sharholderAddress_,amount_) (#1029)
- allShareHolders.push(sharholderAddress_) (#1153)
- allShareHolders[indexOfRemoved] = allShareHolders[allShareHolders.length - 1] (#1159)
- allShareHolders.pop() (#1162)
- _updateUserShares(sharholderAddress_,amount_) (#1029)
- indexOfShareHolders[sharholderAddress_] = allShareHolders.length - 1 (#1154)
- indexOfShareHolders[sharholderAddress_] = 0 (#1160)
- indexOfShareHolders[allShareHolders[indexOfRemoved]] = indexOfRemoved (#1161)
- _updateUserShares(sharholderAddress_,amount_) (#1029)
- totalShares = totalShares.sub(user.shares).add(newAmount_) (#1146)
Reentrancy in SwapHandler.swapToNativeWrappedToken(uint256,uint256,uint256) (#1221-1257):
External calls:
- IERC20(owner()).approve(swapRouter,IERC20(owner()).balanceOf(address(this))) (#1226)
State variables written after the call(s):
- totalAutoLPERC20 += half (#1231)
Reentrancy in SwapHandler.swapToNativeWrappedToken(uint256,uint256,uint256) (#1221-1257):
External calls:
- IERC20(owner()).approve(swapRouter,IERC20(owner()).balanceOf(address(this))) (#1226)
- _swap(half,address(this)) (#1233)
- IRouter(swapRouter).swapExactTokensForETHSupportingFeeOnTransferTokens(amount_,0,path,to_,block.timestamp + 10000) (#1271-1277)
State variables written after the call(s):
- totalAutoLPNative += address(this).balance - balanceBefore (#1234)
Reentrancy in SwapHandler.swapToNativeWrappedToken(uint256,uint256,uint256) (#1221-1257):
External calls:
- IERC20(owner()).approve(swapRouter,IERC20(owner()).balanceOf(address(this))) (#1226)
- _swap(half,address(this)) (#1233)
- IRouter(swapRouter).swapExactTokensForETHSupportingFeeOnTransferTokens(amount_,0,path,to_,block.timestamp + 10000) (#1271-1277)
- _createLP(autoLPAmount_ - half) (#1235)
- IRouter(swapRouter).addLiquidityETH{value: address(this).balance}(owner(),erc20Amount_,0,0,erc20.autoLPWallet(),block.timestamp + 10000) (#1282-1289)
External calls sending eth:
- _createLP(autoLPAmount_ - half) (#1235)
- IRouter(swapRouter).addLiquidityETH{value: address(this).balance}(owner(),erc20Amount_,0,0,erc20.autoLPWallet(),block.timestamp + 10000) (#1282-1289)
State variables written after the call(s):
- totalMarketingInERC20 += marketingAmount_ (#1239)
Reentrancy in SwapHandler.swapToNativeWrappedToken(uint256,uint256,uint256) (#1221-1257):
External calls:
- IERC20(owner()).approve(swapRouter,IERC20(owner()).balanceOf(address(this))) (#1226)
- _swap(half,address(this)) (#1233)
- IRouter(swapRouter).swapExactTokensForETHSupportingFeeOnTransferTokens(amount_,0,path,to_,block.timestamp + 10000) (#1271-1277)
- _createLP(autoLPAmount_ - half) (#1235)
- IRouter(swapRouter).addLiquidityETH{value: address(this).balance}(owner(),erc20Amount_,0,0,erc20.autoLPWallet(),block.timestamp + 10000) (#1282-1289)
- balanceBefore = erc20.marketingWallet().balance (#1240)
- _swap(marketingAmount_,erc20.marketingWallet()) (#1241)
- IRouter(swapRouter).swapExactTokensForETHSupportingFeeOnTransferTokens(amount_,0,path,to_,block.timestamp + 10000) (#1271-1277)
- totalMarketingInNative += erc20.marketingWallet().balance - balanceBefore (#1242)
External calls sending eth:
- _createLP(autoLPAmount_ - half) (#1235)
- IRouter(swapRouter).addLiquidityETH{value: address(this).balance}(owner(),erc20Amount_,0,0,erc20.autoLPWallet(),block.timestamp + 10000) (#1282-1289)
State variables written after the call(s):
- totalToHoldersInERC20 += IERC20(owner()).balanceOf(address(this)) (#1246)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in YumiCat._customTransfer(address,address,uint256) (#2056-2091):
External calls:
- _transfer(from_,address(swapHundler),currentTax) (#2080)
- hodlRewardDistributor.batchProcessClaims(processingGasLimit) (#2095-2097)
- hodlRewardDistributor.setShare(wallet,balanceOf(wallet)) (#2119)
- hodlRewardDistributor.setShare(wallet,0) (#2119)
- hodlRewardDistributor.batchProcessClaims(gasleft()().mul(80).div(100)) (#2095-2097)
- processReserves() (#2084)
- swapHundler.swapToNativeWrappedToken(autoLPReserved,hodlReserved,marketingReserved) (#1894-1898)
- _transfer(from_,to_,netTransfer) (#2087)
- hodlRewardDistributor.batchProcessClaims(processingGasLimit) (#2095-2097)
- hodlRewardDistributor.setShare(wallet,balanceOf(wallet)) (#2119)
- hodlRewardDistributor.setShare(wallet,0) (#2119)
- hodlRewardDistributor.batchProcessClaims(gasleft()().mul(80).div(100)) (#2095-2097)
Event emitted after the call(s):
- Transfer(sender,recipient,amount) (#1570)
- _transfer(from_,to_,netTransfer) (#2087)
Reentrancy in HODLRewardsDistributor.claimPending(address) (#1070-1088):
External calls:
- IERC20(rewardsaddress).safeTransfer(sharholderAddress_,pendingAmount) (#1079)
Event emitted after the call(s):
- Claimed(sharholderAddress_,pendingAmount) (#1080)
Reentrancy in YumiCat.constructor(string,string,address,address,address,address,address) (#1765-1841):
External calls:
- wbnbPair = IFactory(IRouter(swapRouter_).factory()).createPair(wbnb_,address(this)) (#1781-1783)
- _mint(autoLP_,TOTAL_SUPPLY) (#1820)
- hodlRewardDistributor.batchProcessClaims(processingGasLimit) (#2095-2097)
- hodlRewardDistributor.setShare(wallet,balanceOf(wallet)) (#2119)
- hodlRewardDistributor.setShare(wallet,0) (#2119)
- hodlRewardDistributor.batchProcessClaims(gasleft()().mul(80).div(100)) (#2095-2097)
Event emitted after the call(s):
- Transfer(address(0),account,amount) (#1591)
- _mint(autoLP_,TOTAL_SUPPLY) (#1820)
Reentrancy in HODLRewardsDistributor.receive() (#957-962):
External calls:
- _swap(msg.value) (#959)
- IRouter(swapRouter).swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount_}(0,path,address(this),block.timestamp + 1000) (#1129-1134)
Event emitted after the call(s):
- RewardsAdded(amount_) (#1119)
- _updateGlobalShares(addedBalance) (#961)
Reentrancy in HODLRewardsDistributor.setShare(address,uint256) (#1018-1030):
External calls:
- claimPending(sharholderAddress_) (#1026)
- returndata = address(token).functionCall(data,SafeERC20: low-level call failed) (#899)
- (success,returndata) = target.call{value: value}(data) (#154)
- IERC20(rewardsaddress).safeTransfer(sharholderAddress_,pendingAmount) (#1079)
External calls sending eth:
- claimPending(sharholderAddress_) (#1026)
- (success,returndata) = target.call{value: value}(data) (#154)
Event emitted after the call(s):
- ShareUpdated(sharholderAddress_,newAmount_) (#1164)
- _updateUserShares(sharholderAddress_,amount_) (#1029)
Reentrancy in YumiCat.transferFrom(address,address,uint256) (#1873-1883):
External calls:
- success = _customTransfer(from_,to_,amount_) (#1880)
- swapHundler.swapToNativeWrappedToken(autoLPReserved,hodlReserved,marketingReserved) (#1894-1898)
- hodlRewardDistributor.setShare(wallet,balanceOf(wallet)) (#2119)
- hodlRewardDistributor.batchProcessClaims(processingGasLimit) (#2095-2097)
- hodlRewardDistributor.setShare(wallet,0) (#2119)
- hodlRewardDistributor.batchProcessClaims(gasleft()().mul(80).div(100)) (#2095-2097)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#1646)
- approve(from_,allowance(from_,_msgSender()).sub(amount_)) (#1881)
Apply the check-effects-interactions pattern.
Additional information: link
Address.isContract(address) (#49-59) uses assembly
- INLINE ASM (#55-57)
Address.verifyCallResult(bool,bytes,string) (#218-238) uses assembly
- INLINE ASM (#230-233)
Do not use evm assembly.
Additional information: link
Different versions of Solidity is used:
- Version used: ['^0.8.0', '^0.8.4']
- ^0.8.4 (#10)
- ^0.8.0 (#26)
- ^0.8.4 (#244)
- ^0.8.4 (#255)
- ^0.8.4 (#302)
- ^0.8.4 (#313)
- ^0.8.4 (#367)
- ^0.8.0 (#381)
- ^0.8.4 (#609)
- ^0.8.0 (#621)
- ^0.8.0 (#648)
- ^0.8.0 (#726)
- ^0.8.0 (#811)
- ^0.8.4 (#910)
- ^0.8.4 (#1176)
- ^0.8.0 (#1307)
- ^0.8.0 (#1337)
- ^0.8.4 (#1693)
Use one Solidity version.
Additional information: link
HODLRewardsDistributor.claimPending(address) (#1070-1088) has costly operations inside a loop:
- totalClaimed = totalClaimed.add(pendingAmount) (#1083)
HODLRewardsDistributor.claimPending(address) (#1070-1088) has costly operations inside a loop:
- totalRewardsDebt = totalRewardsDebt.sub(user.rewardDebt) (#1085)
HODLRewardsDistributor.claimPending(address) (#1070-1088) has costly operations inside a loop:
- totalRewardsDebt = totalRewardsDebt.add(user.rewardDebt) (#1087)
HODLRewardsDistributor._incrementLastProccessed() (#1167-1171) has costly operations inside a loop:
- _lastProccessedIndex ++ (#1168)
HODLRewardsDistributor._incrementLastProccessed() (#1167-1171) has costly operations inside a loop:
- _lastProccessedIndex = 1 (#1170)
Use a local variable to hold the loop computation result.
Additional information: link
Address.functionCall(address,bytes) (#102-104) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#131-137) is never used and should be removed
Address.functionDelegateCall(address,bytes) (#191-193) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (#201-210) is never used and should be removed
Address.functionStaticCall(address,bytes) (#164-166) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (#174-183) is never used and should be removed
Address.sendValue(address,uint256) (#77-82) is never used and should be removed
Context._msgData() (#638-640) is never used and should be removed
ERC20._burn(address,uint256) (#1607-1622) is never used and should be removed
SafeERC20.safeApprove(IERC20,address,uint256) (#851-864) is never used and should be removed
SafeERC20.safeDecreaseAllowance(IERC20,address,uint256) (#875-886) is never used and should be removed
SafeERC20.safeIncreaseAllowance(IERC20,address,uint256) (#866-873) is never used and should be removed
SafeERC20.safeTransferFrom(IERC20,address,address,uint256) (#835-842) is never used and should be removed
SafeMath.div(uint256,uint256,string) (#568-577) is never used and should be removed
SafeMath.mod(uint256,uint256) (#528-530) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#594-603) is never used and should be removed
SafeMath.sub(uint256,uint256,string) (#545-554) is never used and should be removed
SafeMath.tryAdd(uint256,uint256) (#399-405) is never used and should be removed
SafeMath.tryDiv(uint256,uint256) (#441-446) is never used and should be removed
SafeMath.tryMod(uint256,uint256) (#453-458) is never used and should be removed
SafeMath.tryMul(uint256,uint256) (#424-434) is never used and should be removed
SafeMath.trySub(uint256,uint256) (#412-417) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.0 (#26) allows old versions
Pragma version^0.8.0 (#381) allows old versions
Pragma version^0.8.0 (#621) allows old versions
Pragma version^0.8.0 (#648) allows old versions
Pragma version^0.8.0 (#726) allows old versions
Pragma version^0.8.0 (#811) allows old versions
Pragma version^0.8.0 (#1307) allows old versions
Pragma version^0.8.0 (#1337) 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 Address.sendValue(address,uint256) (#77-82):
- (success) = recipient.call{value: amount}() (#80)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (#145-156):
- (success,returndata) = target.call{value: value}(data) (#154)
Low level call in Address.functionStaticCall(address,bytes,string) (#174-183):
- (success,returndata) = target.staticcall(data) (#181)
Low level call in Address.functionDelegateCall(address,bytes,string) (#201-210):
- (success,returndata) = target.delegatecall(data) (#208)
Low level call in SwapHandler.swapToNativeWrappedToken(uint256,uint256,uint256) (#1221-1257):
- address(erc20.hodlRewardDistributor()).call{value: address(this).balance}() (#1253)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
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