SafuuLover.swapBack() (#861-895) sends eth to arbitrary user
Dangerous calls:
- (success) = address(safuuLoverTreasuryReceiver).call{gas: 30000,value: amountETHToTreasuryAndSIF.mul(safuuLoverTreasuryFee).div(safuuLoverTreasuryFee.add(safuuLoverDividendFee))}() (#885-890)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in SafuuLover._transferFrom(address,address,uint256) (#740-787):
External calls:
- rebase() (#752)
- pairContract.sync() (#699)
- addLiquidity() (#756)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#838-844)
- router.addLiquidityETH{value: amountETHLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#849-856)
- swapBack() (#760)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#873-879)
- (success) = address(safuuLoverTreasuryReceiver).call{gas: 30000,value: amountETHToTreasuryAndSIF.mul(safuuLoverTreasuryFee).div(safuuLoverTreasuryFee.add(safuuLoverDividendFee))}() (#885-890)
- distributor.deposit{value: amountETHToTreasuryAndSIF.mul(safuuLoverDividendFee).div(safuuLoverTreasuryFee.add(safuuLoverDividendFee))}() (#892-894)
External calls sending eth:
- addLiquidity() (#756)
- router.addLiquidityETH{value: amountETHLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#849-856)
- swapBack() (#760)
- (success) = address(safuuLoverTreasuryReceiver).call{gas: 30000,value: amountETHToTreasuryAndSIF.mul(safuuLoverTreasuryFee).div(safuuLoverTreasuryFee.add(safuuLoverDividendFee))}() (#885-890)
- distributor.deposit{value: amountETHToTreasuryAndSIF.mul(safuuLoverDividendFee).div(safuuLoverTreasuryFee.add(safuuLoverDividendFee))}() (#892-894)
State variables written after the call(s):
- _gonBalances[sender] = _gonBalances[sender].sub(gonAmount) (#764)
- _gonBalances[recipient] = _gonBalances[recipient].add(gonAmountReceived) (#768-770)
- gonAmountReceived = takeFee(sender,recipient,gonAmount) (#765-767)
- _gonBalances[safuuLoverDefends] = _gonBalances[safuuLoverDefends].add(gonAmount.div(feeDenominator).mul(safuuLoverDefendsFee)) (#804-806)
- _gonBalances[address(this)] = _gonBalances[address(this)].add(gonAmount.div(feeDenominator).mul(_safuuLoverTreasuryFee.add(safuuLoverDividendFee))) (#807-809)
- _gonBalances[autoLiquidityReceiver] = _gonBalances[autoLiquidityReceiver].add(gonAmount.div(feeDenominator).mul(liquidityFee)) (#810-812)
- swapBack() (#760)
- inSwap = true (#618)
- inSwap = false (#620)
Apply the check-effects-interactions pattern.
Additional information: link
DividendDistributor.distributeDividend(address) (#525-536) ignores return value by BUSD.transfer(shareholder,amount) (#531)
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 1: Reentrancy vulnerabilities + Functions that send Ether to arbitraty destination. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
Combination 2: Unchecked transfer + Functions that send Ether to arbitraty destination. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
Combination 3: Reentrancy vulnerabilities + Unchecked transfer vulnerability. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
Contract ownership is not renounced (belongs to a wallet)
DividendDistributor.process(uint256) (#496-519) has costly operations inside a loop:
- currentIndex = 0 (#507)
DividendDistributor.distributeDividend(address) (#525-536) has costly operations inside a loop:
- totalDistributed = totalDistributed.add(amount) (#530)
DividendDistributor.process(uint256) (#496-519) has costly operations inside a loop:
- currentIndex ++ (#516)
Use a local variable to hold the loop computation result.
Additional information: link
SafeMath.mod(uint256,uint256) (#97-100) is never used and should be removed
SafeMathInt.abs(int256) (#42-45) is never used and should be removed
SafeMathInt.add(int256,int256) (#36-40) is never used and should be removed
SafeMathInt.div(int256,int256) (#24-28) is never used and should be removed
SafeMathInt.mul(int256,int256) (#16-22) is never used and should be removed
SafeMathInt.sub(int256,int256) (#30-34) is never used and should be removed
Remove unused functions.
Additional information: link
SafuuLover.totalFee (#595-598) is set pre-construction with a non-constant function or state variable:
- liquidityFee.add(safuuLoverTreasuryFee).add(safuuLoverDividendFee).add(safuuLoverDefendsFee)
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.7.4 (#10) 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 SafuuLover.swapBack() (#861-895):
- (success) = address(safuuLoverTreasuryReceiver).call{gas: 30000,value: amountETHToTreasuryAndSIF.mul(safuuLoverTreasuryFee).div(safuuLoverTreasuryFee.add(safuuLoverDividendFee))}() (#885-890)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IPancakeSwapPair.DOMAIN_SEPARATOR() (#147) is not in mixedCase
Function IPancakeSwapPair.PERMIT_TYPEHASH() (#148) is not in mixedCase
Function IPancakeSwapPair.MINIMUM_LIQUIDITY() (#165) is not in mixedCase
Function IPancakeSwapRouter.WETH() (#185) is not in mixedCase
Parameter DividendDistributor.setDistributionCriteria(uint256,uint256)._minPeriod (#455) is not in mixedCase
Parameter DividendDistributor.setDistributionCriteria(uint256,uint256)._minDistribution (#455) is not in mixedCase
Variable DividendDistributor._token (#412) is not in mixedCase
Variable DividendDistributor.BUSD (#420) is not in mixedCase
Parameter SafuuLover.setAutoRebase(bool)._flag (#945) is not in mixedCase
Parameter SafuuLover.setAutoAddLiquidity(bool)._flag (#954) is not in mixedCase
Parameter SafuuLover.checkFeeExempt(address)._addr (#1017) is not in mixedCase
Parameter SafuuLover.setDistributionCriteria(uint256,uint256)._minPeriod (#1032) is not in mixedCase
Parameter SafuuLover.setDistributionCriteria(uint256,uint256)._minDistribution (#1032) is not in mixedCase
Parameter SafuuLover.setFeeReceivers(address,address,address)._autoLiquidityReceiver (#1057) is not in mixedCase
Parameter SafuuLover.setFeeReceivers(address,address,address)._treasuryReceiver (#1058) is not in mixedCase
Parameter SafuuLover.setFeeReceivers(address,address,address)._safuuLoverDefends (#1059) is not in mixedCase
Parameter SafuuLover.setWhitelist(address)._addr (#1076) is not in mixedCase
Parameter SafuuLover.setBotBlacklist(address,bool)._botAddress (#1080) is not in mixedCase
Parameter SafuuLover.setBotBlacklist(address,bool)._flag (#1080) is not in mixedCase
Parameter SafuuLover.setLP(address)._address (#1085) is not in mixedCase
Variable SafuuLover._isFeeExempt (#576) is not in mixedCase
Variable SafuuLover.DEAD (#601) is not in mixedCase
Variable SafuuLover.ZERO (#602) is not in mixedCase
Variable SafuuLover._autoRebase (#626) is not in mixedCase
Variable SafuuLover._autoAddLiquidity (#627) is not in mixedCase
Variable SafuuLover._initRebaseStartTime (#628) is not in mixedCase
Variable SafuuLover._lastRebasedTime (#629) is not in mixedCase
Variable SafuuLover._lastAddLiquidityTime (#630) is not in mixedCase
Variable SafuuLover._totalSupply (#631) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IPancakeSwapRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#190) is too similar to IPancakeSwapRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#191)
Prevent variables from having similar names.
Additional information: link
DividendDistributor.dividendsPerShareAccuracyFactor (#435) should be constant
SafuuLover.DEAD (#601) should be constant
SafuuLover.ZERO (#602) should be constant
SafuuLover.feeDenominator (#599) should be constant
SafuuLover.liquidityFee (#590) should be constant
SafuuLover.safuuLoverDefendsFee (#594) should be constant
SafuuLover.safuuLoverDividendFee (#592) should be constant
SafuuLover.safuuLoverTreasuryFee (#591) should be constant
SafuuLover.sellFee (#593) should be constant
SafuuLover.swapEnabled (#612) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
SafuuLover.constructor() (#639-673) uses literals with too many digits:
- safuuLoverDefends = 0x000000000000000000000000000000000000dEaD (#648)
SafuuLover.slitherConstructorVariables() (#569-1105) uses literals with too many digits:
- DEAD = 0x000000000000000000000000000000000000dEaD (#601)
SafuuLover.slitherConstructorVariables() (#569-1105) uses literals with too many digits:
- ZERO = 0x0000000000000000000000000000000000000000 (#602)
SafuuLover.slitherConstructorVariables() (#569-1105) uses literals with too many digits:
- distributorGas = 500000 (#609)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
SafeMathInt.MAX_INT256 (#14) is never used in SafeMathInt (#12-46)
Remove unused state variables.
Additional information: link
SafuuLover.rebase() (#675-702) performs a multiplication on the result of a division:
-times = deltaTime.div(900) (#681)
-epoch = times.mul(15) (#682)
SafuuLover.rebase() (#675-702) performs a multiplication on the result of a division:
-times = deltaTime.div(900) (#681)
-_lastRebasedTime = _lastRebasedTime.add(times.mul(900)) (#697)
SafuuLover.takeFee(address,address,uint256) (#789-816) performs a multiplication on the result of a division:
-feeAmount = gonAmount.div(feeDenominator).mul(_totalFee) (#802)
SafuuLover.takeFee(address,address,uint256) (#789-816) performs a multiplication on the result of a division:
-_gonBalances[safuuLoverDefends] = _gonBalances[safuuLoverDefends].add(gonAmount.div(feeDenominator).mul(safuuLoverDefendsFee)) (#804-806)
SafuuLover.takeFee(address,address,uint256) (#789-816) performs a multiplication on the result of a division:
-_gonBalances[address(this)] = _gonBalances[address(this)].add(gonAmount.div(feeDenominator).mul(_safuuLoverTreasuryFee.add(safuuLoverDividendFee))) (#807-809)
SafuuLover.takeFee(address,address,uint256) (#789-816) performs a multiplication on the result of a division:
-_gonBalances[autoLiquidityReceiver] = _gonBalances[autoLiquidityReceiver].add(gonAmount.div(feeDenominator).mul(liquidityFee)) (#810-812)
SafuuLover.getLiquidityBacking(uint256) (#1066-1074) performs a multiplication on the result of a division:
-liquidityBalance = _gonBalances[pair].div(_gonsPerFragment) (#1071)
-accuracy.mul(liquidityBalance.mul(2)).div(getCirculatingSupply()) (#1072-1073)
Consider ordering multiplication before division.
Additional information: link
Reentrancy in DividendDistributor.distributeDividend(address) (#525-536):
External calls:
- BUSD.transfer(shareholder,amount) (#531)
State variables written after the call(s):
- shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount) (#533)
- shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount) (#534)
Reentrancy in DividendDistributor.process(uint256) (#496-519):
External calls:
- distributeDividend(shareholders[currentIndex]) (#511)
- BUSD.transfer(shareholder,amount) (#531)
State variables written after the call(s):
- currentIndex ++ (#516)
Reentrancy in DividendDistributor.setShare(address,uint256) (#460-474):
External calls:
- distributeDividend(shareholder) (#462)
- BUSD.transfer(shareholder,amount) (#531)
State variables written after the call(s):
- shares[shareholder].amount = amount (#472)
- shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount) (#473)
Apply the check-effects-interactions pattern.
Additional information: link
SafuuLover.rebase().rebaseRate (#678) is a local variable never initialized
Initialize all the variables. If a variable is meant to be initialized to zero, explicitly set it to zero to improve code readability.
Additional information: link
SafuuLover.addLiquidity() (#818-859) ignores return value by router.addLiquidityETH{value: amountETHLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#849-856)
Ensure that all the return values of the function calls are used.
Additional information: link
DividendDistributor.setDistributionCriteria(uint256,uint256) (#455-458) should emit an event for:
- minPeriod = _minPeriod (#456)
- minDistribution = _minDistribution (#457)
Emit an event for critical parameter changes.
Additional information: link
SafuuLover.setFeeReceivers(address,address,address)._autoLiquidityReceiver (#1057) lacks a zero-check on :
- autoLiquidityReceiver = _autoLiquidityReceiver (#1061)
SafuuLover.setFeeReceivers(address,address,address)._treasuryReceiver (#1058) lacks a zero-check on :
- safuuLoverTreasuryReceiver = _treasuryReceiver (#1062)
SafuuLover.setFeeReceivers(address,address,address)._safuuLoverDefends (#1059) lacks a zero-check on :
- safuuLoverDefends = _safuuLoverDefends (#1063)
Check that the address is not zero.
Additional information: link
DividendDistributor.distributeDividend(address) (#525-536) has external calls inside a loop: BUSD.transfer(shareholder,amount) (#531)
Favor pull over push strategy for external calls.
Additional information: link
Reentrancy in SafuuLover.addLiquidity() (#818-859):
External calls:
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#838-844)
- router.addLiquidityETH{value: amountETHLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#849-856)
External calls sending eth:
- router.addLiquidityETH{value: amountETHLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#849-856)
State variables written after the call(s):
- _lastAddLiquidityTime = block.timestamp (#858)
Reentrancy in SafuuLover.constructor() (#639-673):
External calls:
- pair = IPancakeSwapFactory(router.factory()).createPair(router.WETH(),address(this)) (#641-644)
State variables written after the call(s):
- _allowedFragments[address(this)][address(router)] = uint256(- 1) (#650)
- _autoAddLiquidity = true (#667)
- _autoRebase = false (#666)
- _gonBalances[safuuLoverTreasuryReceiver] = TOTAL_GONS (#662)
- _gonsPerFragment = TOTAL_GONS.div(_totalSupply) (#663)
- _initRebaseStartTime = block.timestamp (#664)
- _isFeeExempt[safuuLoverTreasuryReceiver] = true (#668)
- _isFeeExempt[address(this)] = true (#669)
- _lastRebasedTime = block.timestamp (#665)
- _transferOwnership(safuuLoverTreasuryReceiver) (#671)
- _owner = newOwner (#377)
- _totalSupply = INITIAL_FRAGMENTS_SUPPLY (#661)
- autoLiquidityReceiver = 0x9f37c5dD175E067E87749DA7AE0b33eB0a523bad (#646)
- distributor = new DividendDistributor() (#653)
- isDividendExempt[msg.sender] = true (#656)
- isDividendExempt[pair] = true (#657)
- isDividendExempt[address(this)] = true (#658)
- isDividendExempt[DEAD] = true (#659)
- pairContract = IPancakeSwapPair(pair) (#651)
- safuuLoverBUSDReward = address(distributor) (#654)
- safuuLoverDefends = 0x000000000000000000000000000000000000dEaD (#648)
- safuuLoverTreasuryReceiver = 0x544b61335Fc915F6C4d8522514Ef5e1a0AF9b6e5 (#647)
Reentrancy in DividendDistributor.deposit() (#476-494):
External calls:
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(0,path,address(this),block.timestamp) (#483-488)
State variables written after the call(s):
- dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)) (#493)
- totalDividends = totalDividends.add(amount) (#492)
Reentrancy in DividendDistributor.distributeDividend(address) (#525-536):
External calls:
- BUSD.transfer(shareholder,amount) (#531)
State variables written after the call(s):
- shareholderClaims[shareholder] = block.timestamp (#532)
Reentrancy in DividendDistributor.setShare(address,uint256) (#460-474):
External calls:
- distributeDividend(shareholder) (#462)
- BUSD.transfer(shareholder,amount) (#531)
State variables written after the call(s):
- addShareholder(shareholder) (#466)
- shareholderIndexes[shareholder] = shareholders.length (#558)
- removeShareholder(shareholder) (#468)
- shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder] (#564)
- addShareholder(shareholder) (#466)
- shareholders.push(shareholder) (#559)
- removeShareholder(shareholder) (#468)
- shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1] (#563)
- shareholders.pop() (#565)
- totalShares = totalShares.sub(shares[shareholder].amount).add(amount) (#471)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in SafuuLover._transferFrom(address,address,uint256) (#740-787):
External calls:
- rebase() (#752)
- pairContract.sync() (#699)
- addLiquidity() (#756)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#838-844)
- router.addLiquidityETH{value: amountETHLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#849-856)
- swapBack() (#760)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#873-879)
- (success) = address(safuuLoverTreasuryReceiver).call{gas: 30000,value: amountETHToTreasuryAndSIF.mul(safuuLoverTreasuryFee).div(safuuLoverTreasuryFee.add(safuuLoverDividendFee))}() (#885-890)
- distributor.deposit{value: amountETHToTreasuryAndSIF.mul(safuuLoverDividendFee).div(safuuLoverTreasuryFee.add(safuuLoverDividendFee))}() (#892-894)
- distributor.setShare(sender,balanceOf(sender)) (#773)
- distributor.setShare(recipient,balanceOf(recipient)) (#776)
- distributor.process(distributorGas) (#779)
External calls sending eth:
- addLiquidity() (#756)
- router.addLiquidityETH{value: amountETHLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#849-856)
- swapBack() (#760)
- (success) = address(safuuLoverTreasuryReceiver).call{gas: 30000,value: amountETHToTreasuryAndSIF.mul(safuuLoverTreasuryFee).div(safuuLoverTreasuryFee.add(safuuLoverDividendFee))}() (#885-890)
- distributor.deposit{value: amountETHToTreasuryAndSIF.mul(safuuLoverDividendFee).div(safuuLoverTreasuryFee.add(safuuLoverDividendFee))}() (#892-894)
Event emitted after the call(s):
- Transfer(sender,recipient,gonAmountReceived.div(_gonsPerFragment)) (#781-785)
Reentrancy in SafuuLover._transferFrom(address,address,uint256) (#740-787):
External calls:
- rebase() (#752)
- pairContract.sync() (#699)
- addLiquidity() (#756)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#838-844)
- router.addLiquidityETH{value: amountETHLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#849-856)
- swapBack() (#760)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#873-879)
- (success) = address(safuuLoverTreasuryReceiver).call{gas: 30000,value: amountETHToTreasuryAndSIF.mul(safuuLoverTreasuryFee).div(safuuLoverTreasuryFee.add(safuuLoverDividendFee))}() (#885-890)
- distributor.deposit{value: amountETHToTreasuryAndSIF.mul(safuuLoverDividendFee).div(safuuLoverTreasuryFee.add(safuuLoverDividendFee))}() (#892-894)
External calls sending eth:
- addLiquidity() (#756)
- router.addLiquidityETH{value: amountETHLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#849-856)
- swapBack() (#760)
- (success) = address(safuuLoverTreasuryReceiver).call{gas: 30000,value: amountETHToTreasuryAndSIF.mul(safuuLoverTreasuryFee).div(safuuLoverTreasuryFee.add(safuuLoverDividendFee))}() (#885-890)
- distributor.deposit{value: amountETHToTreasuryAndSIF.mul(safuuLoverDividendFee).div(safuuLoverTreasuryFee.add(safuuLoverDividendFee))}() (#892-894)
Event emitted after the call(s):
- Transfer(sender,address(this),feeAmount.div(_gonsPerFragment)) (#814)
- gonAmountReceived = takeFee(sender,recipient,gonAmount) (#765-767)
Reentrancy in SafuuLover.constructor() (#639-673):
External calls:
- pair = IPancakeSwapFactory(router.factory()).createPair(router.WETH(),address(this)) (#641-644)
Event emitted after the call(s):
- OwnershipTransferred(_owner,newOwner) (#376)
- _transferOwnership(safuuLoverTreasuryReceiver) (#671)
- Transfer(address(0x0),safuuLoverTreasuryReceiver,_totalSupply) (#672)
Reentrancy in SafuuLover.rebase() (#675-702):
External calls:
- pairContract.sync() (#699)
Event emitted after the call(s):
- LogRebase(epoch,_totalSupply) (#701)
Apply the check-effects-interactions pattern.
Additional information: link
DividendDistributor.shouldDistribute(address) (#521-523) uses timestamp for comparisons
Dangerous comparisons:
- shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution (#522)
SafuuLover.rebase() (#675-702) uses timestamp for comparisons
Dangerous comparisons:
- deltaTimeFromInit < (31536000) (#684)
- deltaTimeFromInit >= (31536000) (#686)
- i < times (#690)
SafuuLover.shouldRebase() (#922-929) uses timestamp for comparisons
Dangerous comparisons:
- _autoRebase && (_totalSupply < MAX_SUPPLY) && msg.sender != pair && ! inSwap && block.timestamp >= (_lastRebasedTime + 900) (#923-928)
SafuuLover.shouldAddLiquidity() (#931-937) uses timestamp for comparisons
Dangerous comparisons:
- _autoAddLiquidity && ! inSwap && msg.sender != pair && block.timestamp >= (_lastAddLiquidityTime + 172800) (#932-936)
Avoid relying on block.timestamp.
Additional information: link
SafuuLover.isContract(address) (#1097-1101) uses assembly
- INLINE ASM (#1099)
Do not use evm assembly.
Additional information: link
owner() should be declared external:
- Ownable.owner() (#352-354)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#365-368)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#370-372)
name() should be declared external:
- ERC20Detailed.name() (#396-398)
symbol() should be declared external:
- ERC20Detailed.symbol() (#400-402)
decimals() should be declared external:
- ERC20Detailed.decimals() (#404-406)
getLiquidityBacking(uint256) should be declared external:
- SafuuLover.getLiquidityBacking(uint256) (#1066-1074)
Use the external attribute for functions never called from the contract.
Additional information: link
Contract ticker ($SALO) contains non-alphanumeric characters.
Not a direct threat, but may indicate unreliable intentions of developer. Non-alphanumeric chars (,.;!#*&") are extremely rare among low risk tokens.
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