MAGIC._balances (#1980) shadows:
- ERC20._balances (#963)
MAGIC._allowances (#1981) shadows:
- ERC20._allowances (#965)
MAGIC._name (#1998) shadows:
- ERC20._name (#969)
MAGIC._symbol (#1999) shadows:
- ERC20._symbol (#970)
Remove the state variable shadowing.
Additional information: link
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
RewardDistributor.distributeBounty(address) (#1879-1890) ignores return value by IERC20(WBNB).transfer(keeper,amount) (#1885)
MAGIC.rescueToken(IERC20,uint256,address) (#2228-2233) ignores return value by token.transfer(to,amount) (#2232)
MAGIC.depositLPFee(uint256,address) (#2368-2397) ignores return value by IERC20(token).transferFrom(msg.sender,address(this),amount) (#2373)
MAGIC.depositLPFee(uint256,address) (#2368-2397) ignores return value by IERC20(WBNB).transfer(_defaultFees.developmentAddress,developmentFeeAmount) (#2384)
MAGIC.depositLPFee(uint256,address) (#2368-2397) ignores return value by IERC20(WBNB).transfer(distributorAddress,reflectionFeeAmount) (#2385)
MAGIC.depositLPFee(uint256,address) (#2368-2397) ignores return value by IERC20(token).transfer(_defaultFees.developmentAddress,developmentFeeAmount_scope_1) (#2391)
MAGIC.depositLPFee(uint256,address) (#2368-2397) ignores return value by IERC20(token).transfer(distributorAddress,reflectionFeeAmount_scope_2) (#2392)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
MAGIC._emptyFees (#1975) is never initialized. It is used in:
- MAGIC.removeAllFee() (#2312-2315)
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
Contract ownership is not renounced (belongs to a wallet)
Contract locking ether found:
Contract RewardDistributor (#1750-1922) has payable functions:
- RewardDistributor.receive() (#1797)
But does not have a function to withdraw the ether
Remove the payable attribute or add a withdraw function.
Additional information: link
Not a direct threat, but may indicate unreliable intentions of developer. Widespread names (e.g. Elon, King, Moon, Doge) are common among meme-tokens and scams. The allow to gain free hype and attract unexperienced investors.
Not a direct threat, but may indicate unreliable intentions of developer. Both name and ticker of current token are widespread, i.e. common across multiple tokens. This is slightly suspicious
Reentrancy in MAGIC._tokenTransfer(address,address,uint256,bool) (#2602-2620):
External calls:
- distributor.setShare(sender,_balances[sender]) (#2611)
- distributor.setShare(recipient,_balances[recipient]) (#2612)
- distributor.process(distributorGas) (#2614)
State variables written after the call(s):
- restoreAllFee() (#2619)
- _defaultFees = _previousFees (#2308)
Reentrancy in MAGIC._transfer(address,address,uint256) (#2575-2600):
External calls:
- triggerAutoBuyback() (#2588)
- IERC20(WBNB).approve(address(pyeSwapRouter),amount) (#2516)
- pyeSwapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(amount,0,path,to,block.timestamp) (#2517-2523)
- _tokenTransfer(from,to,amount,takeFee) (#2599)
- distributor.setShare(sender,_balances[sender]) (#2611)
- distributor.setShare(recipient,_balances[recipient]) (#2612)
- distributor.process(distributorGas) (#2614)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#2599)
- _balances[sender] = _balances[sender].sub(amount,Insufficient Balance) (#2607)
- _balances[recipient] = _balances[recipient].add(_values.transferAmount) (#2608)
- _balances[address(this)] = _balances[address(this)].add(tAmount) (#2295)
Reentrancy in RewardDistributor.distributeBounty(address) (#1879-1890):
External calls:
- IERC20(WBNB).transfer(keeper,amount) (#1885)
State variables written after the call(s):
- shares[keeper].totalRealised = shares[keeper].totalRealised.add(amount) (#1887)
- shares[keeper].totalExcluded = getCumulativeBountys(shares[keeper].amount) (#1888)
Reentrancy in RewardDistributor.process(uint256) (#1848-1872):
External calls:
- distributeBounty(keepers[currentIndex]) (#1864)
- IERC20(WBNB).transfer(keeper,amount) (#1885)
State variables written after the call(s):
- currentIndex ++ (#1869)
Reentrancy in RewardDistributor.setShare(address,uint256) (#1804-1818):
External calls:
- distributeBounty(keeper) (#1806)
- IERC20(WBNB).transfer(keeper,amount) (#1885)
State variables written after the call(s):
- shares[keeper].amount = amount (#1816)
- shares[keeper].totalExcluded = getCumulativeBountys(shares[keeper].amount) (#1817)
Apply the check-effects-interactions pattern.
Additional information: link
RewardDistributor.deposit(address,uint256) (#1820-1846) ignores return value by IERC20(token).approve(address(pyeSwapRouter),amount) (#1831)
MAGIC.constructor() (#2055-2095) ignores return value by IPYESwapPair(pyeSwapPair).updateTotalFee(1200) (#2092)
MAGIC.addPair(address,address) (#2197-2218) ignores return value by IPYESwapPair(_pair).updateTotalFee(getTotalFee()) (#2216)
MAGIC.swapToWBNB(uint256,address) (#2399-2412) ignores return value by IERC20(token).approve(address(pyeSwapRouter),amount) (#2404)
MAGIC._updatePairsFee() (#2425-2429) ignores return value by IPYESwapPair(pairs[j]).updateTotalFee(getTotalFee()) (#2427)
MAGIC.buyTokens(uint256,address) (#2511-2524) ignores return value by IERC20(WBNB).approve(address(pyeSwapRouter),amount) (#2516)
MAGIC.updateRouterAndPair(address,address) (#2538-2557) ignores return value by IPYESwapPair(pyeSwapPair).updateTotalFee(getTotalFee()) (#2556)
Ensure that all the return values of the function calls are used.
Additional information: link
MAGIC.allowance(address,address).owner (#2238) shadows:
- Ownable.owner() (#769-771) (function)
MAGIC._approve(address,address,uint256).owner (#2262) shadows:
- Ownable.owner() (#769-771) (function)
Rename the local variables that shadow another component.
Additional information: link
RewardDistributor.setDistributionCriteria(uint256,uint256) (#1799-1802) should emit an event for:
- minPeriod = _minPeriod (#1800)
- minDistribution = _minDistribution (#1801)
RewardDistributor.deposit(address,uint256) (#1820-1846) should emit an event for:
- bountysPerShare = bountysPerShare.add(bountysPerShareAccuracyFactor.mul(amount).div(totalShares)) (#1823)
- bountysPerShare = bountysPerShare.add(bountysPerShareAccuracyFactor.mul(newAmount).div(totalShares)) (#1844)
MAGIC.setMaxTxPercent(uint256) (#2338-2342) should emit an event for:
- _maxTxAmount = _tTotal.mul(maxTxPercent).div(10 ** 4) (#2339-2341)
MAGIC.setDistributorSettings(uint256) (#2486-2489) should emit an event for:
- distributorGas = _gas (#2488)
MAGIC.setAutoBuybackSettings(bool,uint256,uint256) (#2527-2533) should emit an event for:
- autoBuybackAmount = _amount (#2530)
Emit an event for critical parameter changes.
Additional information: link
MAGIC.rescueBNB(uint256,address).to (#2223) lacks a zero-check on :
- address(to).transfer(amount) (#2224)
MAGIC.updateRouterAndPair(address,address)._pair (#2538) lacks a zero-check on :
- pyeSwapPair = _pair (#2542)
Check that the address is not zero.
Additional information: link
RewardDistributor.distributeBounty(address) (#1879-1890) has external calls inside a loop: IERC20(WBNB).transfer(keeper,amount) (#1885)
Favor pull over push strategy for external calls.
Additional information: link
Reentrancy in MAGIC.constructor() (#2055-2095):
External calls:
- pyeSwapPair = IPYESwapFactory(pyeSwapRouter.factory()).createPair(address(this),WBNB,true) (#2060-2061)
State variables written after the call(s):
- _defaultFees = Fees(800,200,200,0xAb705Bb28d885af07F14312F548C4f5E6BCE01a4) (#2085-2090)
- _isExcludedFromFee[owner()] = true (#2069)
- _isExcludedFromFee[address(this)] = true (#2070)
- _isExcludedFromFee[pyeSwapPair] = true (#2071)
- _isExcludedFromFee[distributorAddress] = true (#2072)
- distributor = new RewardDistributor() (#2062)
- distributorAddress = address(distributor) (#2063)
- isBountyExempt[_msgSender()] = true (#2079)
- isBountyExempt[pyeSwapPair] = true (#2080)
- isBountyExempt[address(this)] = true (#2081)
- isBountyExempt[_burnAddress] = true (#2082)
- isBountyExempt[distributorAddress] = true (#2083)
- isTxLimitExempt[_msgSender()] = true (#2074)
- isTxLimitExempt[pyeSwapPair] = true (#2075)
- isTxLimitExempt[address(pyeSwapRouter)] = true (#2076)
- isTxLimitExempt[distributorAddress] = true (#2077)
- pairs[pairsLength] = pyeSwapPair (#2066)
- pairsLength += 1 (#2067)
- tokens[pairsLength] = WBNB (#2065)
Reentrancy in RewardDistributor.deposit(address,uint256) (#1820-1846):
External calls:
- IERC20(token).approve(address(pyeSwapRouter),amount) (#1831)
- pyeSwapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(amount,0,path,address(this),block.timestamp + 600) (#1833-1839)
State variables written after the call(s):
- bountysPerShare = bountysPerShare.add(bountysPerShareAccuracyFactor.mul(newAmount).div(totalShares)) (#1844)
- totalBountys = totalBountys.add(newAmount) (#1843)
Reentrancy in RewardDistributor.distributeBounty(address) (#1879-1890):
External calls:
- IERC20(WBNB).transfer(keeper,amount) (#1885)
State variables written after the call(s):
- keeperClaims[keeper] = block.timestamp (#1886)
Reentrancy in RewardDistributor.setShare(address,uint256) (#1804-1818):
External calls:
- distributeBounty(keeper) (#1806)
- IERC20(WBNB).transfer(keeper,amount) (#1885)
State variables written after the call(s):
- addKeeper(keeper) (#1810)
- keeperIndexes[keeper] = keepers.length (#1912)
- removeKeeper(keeper) (#1812)
- keeperIndexes[keepers[keepers.length - 1]] = keeperIndexes[keeper] (#1918)
- addKeeper(keeper) (#1810)
- keepers.push(keeper) (#1913)
- removeKeeper(keeper) (#1812)
- keepers[keeperIndexes[keeper]] = keepers[keepers.length - 1] (#1917)
- keepers.pop() (#1919)
- totalShares = totalShares.sub(shares[keeper].amount).add(amount) (#1815)
Reentrancy in MAGIC.transferFrom(address,address,uint256) (#2569-2573):
External calls:
- _transfer(sender,recipient,amount) (#2570)
- IERC20(WBNB).approve(address(pyeSwapRouter),amount) (#2516)
- pyeSwapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(amount,0,path,to,block.timestamp) (#2517-2523)
- distributor.setShare(sender,_balances[sender]) (#2611)
- distributor.setShare(recipient,_balances[recipient]) (#2612)
- distributor.process(distributorGas) (#2614)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,BEP20: transfer amount exceeds allowance)) (#2571)
- _allowances[owner][spender] = amount (#2269)
Reentrancy in MAGIC.triggerAutoBuyback() (#2504-2508):
External calls:
- buyTokens(autoBuybackAmount,_burnAddress) (#2505)
- IERC20(WBNB).approve(address(pyeSwapRouter),amount) (#2516)
- pyeSwapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(amount,0,path,to,block.timestamp) (#2517-2523)
State variables written after the call(s):
- autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount) (#2507)
- autoBuybackBlockLast = block.number (#2506)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in MAGIC._tokenTransfer(address,address,uint256,bool) (#2602-2620):
External calls:
- distributor.setShare(sender,_balances[sender]) (#2611)
- distributor.setShare(recipient,_balances[recipient]) (#2612)
- distributor.process(distributorGas) (#2614)
Event emitted after the call(s):
- Transfer(sender,recipient,_values.transferAmount) (#2616)
Reentrancy in MAGIC._transfer(address,address,uint256) (#2575-2600):
External calls:
- triggerAutoBuyback() (#2588)
- IERC20(WBNB).approve(address(pyeSwapRouter),amount) (#2516)
- pyeSwapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(amount,0,path,to,block.timestamp) (#2517-2523)
- _tokenTransfer(from,to,amount,takeFee) (#2599)
- distributor.setShare(sender,_balances[sender]) (#2611)
- distributor.setShare(recipient,_balances[recipient]) (#2612)
- distributor.process(distributorGas) (#2614)
Event emitted after the call(s):
- Transfer(sender,recipient,_values.transferAmount) (#2616)
- _tokenTransfer(from,to,amount,takeFee) (#2599)
Reentrancy in MAGIC.constructor() (#2055-2095):
External calls:
- pyeSwapPair = IPYESwapFactory(pyeSwapRouter.factory()).createPair(address(this),WBNB,true) (#2060-2061)
- IPYESwapPair(pyeSwapPair).updateTotalFee(1200) (#2092)
Event emitted after the call(s):
- Transfer(address(0),_msgSender(),_tTotal) (#2094)
Reentrancy in MAGIC.transferFrom(address,address,uint256) (#2569-2573):
External calls:
- _transfer(sender,recipient,amount) (#2570)
- IERC20(WBNB).approve(address(pyeSwapRouter),amount) (#2516)
- pyeSwapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(amount,0,path,to,block.timestamp) (#2517-2523)
- distributor.setShare(sender,_balances[sender]) (#2611)
- distributor.setShare(recipient,_balances[recipient]) (#2612)
- distributor.process(distributorGas) (#2614)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#2270)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,BEP20: transfer amount exceeds allowance)) (#2571)
Apply the check-effects-interactions pattern.
Additional information: link
RewardDistributor.shouldDistribute(address) (#1874-1877) uses timestamp for comparisons
Dangerous comparisons:
- keeperClaims[keeper] + minPeriod < block.timestamp && getUnpaidEarnings(keeper) > minDistribution (#1875-1876)
Avoid relying on block.timestamp.
Additional information: link
Address.verifyCallResult(bool,bytes,string) (#542-562) uses assembly
- INLINE ASM (#554-557)
Do not use evm assembly.
Additional information: link
Different versions of Solidity is used:
- Version used: ['>=0.5.0', '>=0.6.0<=0.8.1', '>=0.6.2', '^0.8.0', '^0.8.1']
- ^0.8.0 (#5)
- >=0.6.2 (#17)
- >=0.6.2 (#116)
- >=0.5.0 (#166)
- >=0.5.0 (#226)
- >=0.5.0 (#250)
- >=0.6.0<=0.8.1 (#263)
- ^0.8.1 (#345)
- ^0.8.0 (#570)
- ^0.8.0 (#616)
- ^0.8.0 (#662)
- ^0.8.0 (#712)
- ^0.8.0 (#739)
- ^0.8.0 (#817)
- ^0.8.0 (#902)
- ^0.8.0 (#932)
- ^0.8.0 (#1317)
- ^0.8.0 (#1514)
- ^0.8.1 (#1743)
- ^0.8.1 (#1928)
- ABIEncoderV2 (#1929)
Use one Solidity version.
Additional information: link
RewardDistributor.process(uint256) (#1848-1872) has costly operations inside a loop:
- currentIndex = 0 (#1860)
RewardDistributor.distributeBounty(address) (#1879-1890) has costly operations inside a loop:
- totalDistributed = totalDistributed.add(amount) (#1884)
RewardDistributor.process(uint256) (#1848-1872) has costly operations inside a loop:
- currentIndex ++ (#1869)
Use a local variable to hold the loop computation result.
Additional information: link
Address.functionCall(address,bytes) (#426-428) is never used and should be removed
Address.functionCall(address,bytes,string) (#436-442) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#455-461) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#469-480) is never used and should be removed
Address.functionDelegateCall(address,bytes) (#515-517) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (#525-534) is never used and should be removed
Address.functionStaticCall(address,bytes) (#488-490) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (#498-507) is never used and should be removed
Address.isContract(address) (#377-383) is never used and should be removed
Address.sendValue(address,uint256) (#401-406) is never used and should be removed
Address.verifyCallResult(bool,bytes,string) (#542-562) is never used and should be removed
Context._msgData() (#729-731) is never used and should be removed
Counters.decrement(Counters.Counter) (#598-604) is never used and should be removed
Counters.reset(Counters.Counter) (#606-608) is never used and should be removed
ERC20._afterTokenTransfer(address,address,uint256) (#1305-1309) is never used and should be removed
ERC20._approve(address,address,uint256) (#1237-1247) is never used and should be removed
ERC20._burn(address,uint256) (#1207-1222) is never used and should be removed
ERC20._mint(address,uint256) (#1184-1194) is never used and should be removed
ERC20._spendAllowance(address,address,uint256) (#1257-1269) is never used and should be removed
ERC20._transfer(address,address,uint256) (#1153-1173) is never used and should be removed
Math.ceilDiv(uint256,uint256) (#651-654) is never used and should be removed
Math.max(uint256,uint256) (#625-627) is never used and should be removed
Math.min(uint256,uint256) (#632-634) is never used and should be removed
SafeMath.div(uint256,uint256,string) (#1701-1710) is never used and should be removed
SafeMath.mod(uint256,uint256) (#1661-1663) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#1727-1736) is never used and should be removed
SafeMath.tryAdd(uint256,uint256) (#1532-1538) is never used and should be removed
SafeMath.tryDiv(uint256,uint256) (#1574-1579) is never used and should be removed
SafeMath.tryMod(uint256,uint256) (#1586-1591) is never used and should be removed
SafeMath.tryMul(uint256,uint256) (#1557-1567) is never used and should be removed
SafeMath.trySub(uint256,uint256) (#1545-1550) is never used and should be removed
Remove unused functions.
Additional information: link
MAGIC.minimumBuyBackThreshold (#2001) is set pre-construction with a non-constant function or state variable:
- _tTotal / 1000000
MAGIC.swapThreshold (#2035) is set pre-construction with a non-constant function or state variable:
- _tTotal / 2000
Remove any initialization of state variables via non-constant state variables or function calls. If variables must be set upon contract deployment, locate initialization in the constructor instead.
Additional information: link
Pragma version^0.8.0 (#5) allows old versions
Pragma version>=0.6.2 (#17) allows old versions
Pragma version>=0.6.2 (#116) allows old versions
Pragma version>=0.5.0 (#166) allows old versions
Pragma version>=0.5.0 (#226) allows old versions
Pragma version>=0.5.0 (#250) allows old versions
Pragma version>=0.6.0<=0.8.1 (#263) is too complex
Pragma version^0.8.1 (#345) allows old versions
Pragma version^0.8.0 (#570) allows old versions
Pragma version^0.8.0 (#616) allows old versions
Pragma version^0.8.0 (#662) allows old versions
Pragma version^0.8.0 (#712) allows old versions
Pragma version^0.8.0 (#739) allows old versions
Pragma version^0.8.0 (#817) allows old versions
Pragma version^0.8.0 (#902) allows old versions
Pragma version^0.8.0 (#932) allows old versions
Pragma version^0.8.0 (#1317) allows old versions
Pragma version^0.8.0 (#1514) allows old versions
Pragma version^0.8.1 (#1743) allows old versions
Pragma version^0.8.1 (#1928) allows old versions
solc-0.8.1 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 Address.sendValue(address,uint256) (#401-406):
- (success) = recipient.call{value: amount}() (#404)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (#469-480):
- (success,returndata) = target.call{value: value}(data) (#478)
Low level call in Address.functionStaticCall(address,bytes,string) (#498-507):
- (success,returndata) = target.staticcall(data) (#505)
Low level call in Address.functionDelegateCall(address,bytes,string) (#525-534):
- (success,returndata) = target.delegatecall(data) (#532)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IPYESwapRouter01.WETH() (#21) is not in mixedCase
Function IPYESwapPair.DOMAIN_SEPARATOR() (#186) is not in mixedCase
Function IPYESwapPair.PERMIT_TYPEHASH() (#187) is not in mixedCase
Function IPYESwapPair.MINIMUM_LIQUIDITY() (#204) is not in mixedCase
Parameter RewardDistributor.setDistributionCriteria(uint256,uint256)._minPeriod (#1799) is not in mixedCase
Parameter RewardDistributor.setDistributionCriteria(uint256,uint256)._minDistribution (#1799) is not in mixedCase
Variable RewardDistributor._token (#1753) is not in mixedCase
Variable RewardDistributor.WBNB (#1762) is not in mixedCase
Parameter MAGIC.addPair(address,address)._pair (#2197) is not in mixedCase
Parameter MAGIC.addPair(address,address)._token (#2197) is not in mixedCase
Parameter MAGIC.calculateFee(uint256,uint256)._amount (#2299) is not in mixedCase
Parameter MAGIC.calculateFee(uint256,uint256)._fee (#2299) is not in mixedCase
Parameter MAGIC.setReflectionPercent(uint256)._reflectionFee (#2432) is not in mixedCase
Parameter MAGIC.setdevelopmentPercent(uint256)._developmentFee (#2439) is not in mixedCase
Parameter MAGIC.setBuyBackPercent(uint256)._burnFee (#2451) is not in mixedCase
Parameter MAGIC.setdevelopmentAddress(address)._development (#2459) is not in mixedCase
Parameter MAGIC.setDistributionCriteria(uint256,uint256)._minPeriod (#2481) is not in mixedCase
Parameter MAGIC.setDistributionCriteria(uint256,uint256)._minDistribution (#2481) is not in mixedCase
Parameter MAGIC.setDistributorSettings(uint256)._gas (#2486) is not in mixedCase
Parameter MAGIC.setAutoBuybackSettings(bool,uint256,uint256)._enabled (#2527) is not in mixedCase
Parameter MAGIC.setAutoBuybackSettings(bool,uint256,uint256)._amount (#2527) is not in mixedCase
Parameter MAGIC.setAutoBuybackSettings(bool,uint256,uint256)._period (#2527) is not in mixedCase
Parameter MAGIC.updateRouterAndPair(address,address)._router (#2538) is not in mixedCase
Parameter MAGIC.updateRouterAndPair(address,address)._pair (#2538) is not in mixedCase
Variable MAGIC._balances (#1980) is not in mixedCase
Constant MAGIC._name (#1998) is not in UPPER_CASE_WITH_UNDERSCORES
Constant MAGIC._symbol (#1999) is not in UPPER_CASE_WITH_UNDERSCORES
Variable MAGIC._defaultFees (#1973) is not in mixedCase
Constant MAGIC._decimals (#2000) is not in UPPER_CASE_WITH_UNDERSCORES
Variable MAGIC.WBNB (#2008) is not in mixedCase
Variable MAGIC._burnAddress (#2009) is not in mixedCase
Variable MAGIC._maxTxAmount (#2010) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IPYESwapRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#26) is too similar to IPYESwapRouter01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#27)
Prevent variables from having similar names.
Additional information: link
MAGIC.slitherConstructorVariables() (#1947-2622) uses literals with too many digits:
- minimumBuyBackThreshold = _tTotal / 1000000 (#2001)
MAGIC.slitherConstructorVariables() (#1947-2622) uses literals with too many digits:
- _burnAddress = 0x000000000000000000000000000000000000dEaD (#2009)
MAGIC.slitherConstructorVariables() (#1947-2622) uses literals with too many digits:
- distributorGas = 500000 (#2029)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
MAGIC._name (#1998) is never used in MAGIC (#1947-2622)
MAGIC._symbol (#1999) is never used in MAGIC (#1947-2622)
Remove unused state variables.
Additional information: link
MAGIC._burnAddress (#2009) should be constant
MAGIC._tTotal (#2002) should be constant
MAGIC.swapEnabled (#2034) should be constant
RewardDistributor.bountysPerShareAccuracyFactor (#1773) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#788-790)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#796-799)
name() should be declared external:
- ERC20.name() (#989-991)
symbol() should be declared external:
- ERC20.symbol() (#997-999)
decimals() should be declared external:
- ERC20.decimals() (#1014-1016)
- MAGIC.decimals() (#2150-2152)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (#1040-1044)
- MAGIC.transfer(address,uint256) (#2563-2566)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (#1063-1067)
- MAGIC.approve(address,uint256) (#2243-2246)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (#1085-1094)
- MAGIC.transferFrom(address,address,uint256) (#2569-2573)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (#1108-1112)
- MAGIC.increaseAllowance(address,uint256) (#2249-2252)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (#1128-1137)
- MAGIC.decreaseAllowance(address,uint256) (#2255-2258)
snapshot() should be declared external:
- MAGIC.snapshot() (#2106-2108)
getCurrentSnapshot() should be declared external:
- MAGIC.getCurrentSnapshot() (#2112-2114)
blacklistAddress(address) should be declared external:
- MAGIC.blacklistAddress(address) (#2135-2138)
removeFromBlacklist(address) should be declared external:
- MAGIC.removeFromBlacklist(address) (#2141-2144)
getBalance(address) should be declared external:
- MAGIC.getBalance(address) (#2166-2168)
getCirculatingSupply() should be declared external:
- MAGIC.getCirculatingSupply() (#2171-2173)
addPair(address,address) should be declared external:
- MAGIC.addPair(address,address) (#2197-2218)
isExcludedFromFee(address) should be declared external:
- MAGIC.isExcludedFromFee(address) (#2318-2320)
isExcludedFromReward(address) should be declared external:
- MAGIC.isExcludedFromReward(address) (#2323-2325)
excludeFromFee(address) should be declared external:
- MAGIC.excludeFromFee(address) (#2328-2330)
includeInFee(address) should be declared external:
- MAGIC.includeInFee(address) (#2333-2335)
depositLPFee(uint256,address) should be declared external:
- MAGIC.depositLPFee(uint256,address) (#2368-2397)
updateRewardDistributorAddress(address) should be declared external:
- MAGIC.updateRewardDistributorAddress(address) (#2466-2476)
updateRouterAndPair(address,address) should be declared external:
- MAGIC.updateRouterAndPair(address,address) (#2538-2557)
Use the external attribute for functions never called from the contract.
Additional information: link
Unable to find website, listings and other project-related information
Young tokens have high risks of scam / price dump / death
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Unable to find Telegram and Twitter accounts