Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
PetsLove.swapBack(bool) (#625-674) sends eth to arbitrary user
Dangerous calls:
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#658)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in PetsLove._transferFrom(address,address,uint256) (#534-565):
External calls:
- swapBack(recipient == pair) (#543)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#641-647)
- distributor.deposit{value: amountBNBReflection}() (#657)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#658)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#664-671)
- triggerAutoBuyback() (#544)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#709-714)
External calls sending eth:
- swapBack(recipient == pair) (#543)
- distributor.deposit{value: amountBNBReflection}() (#657)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#658)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#664-671)
- triggerAutoBuyback() (#544)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#709-714)
State variables written after the call(s):
- _balances[sender] = _balances[sender].sub(amount,Insufficient Balance) (#548)
- _balances[recipient] = _balances[recipient].add(amountReceived) (#552)
- amountReceived = takeFee(sender,recipient,amount) (#550)
- _balances[address(this)] = _balances[address(this)].add(feeAmount) (#608)
- triggerAutoBuyback() (#544)
- inSwap = true (#475)
- inSwap = false (#475)
Apply the check-effects-interactions pattern.
Additional information: link
DividendDistributor.distributeDividend(address) (#359-370) ignores return value by PETH.transfer(shareholder,amount) (#365)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
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.
PetsLove.PETH (#406) is never used in PetsLove (#404-837)
Remove unused state variables.
Additional information: link
Function IDEXRouter.WETH() (#183) is not in mixedCase
Parameter DividendDistributor.setDistributionCriteria(uint256,uint256)._minPeriod (#287) is not in mixedCase
Parameter DividendDistributor.setDistributionCriteria(uint256,uint256)._minDistribution (#287) is not in mixedCase
Variable DividendDistributor._token (#240) is not in mixedCase
Variable DividendDistributor.PETH (#248) is not in mixedCase
Variable DividendDistributor.WBNB (#249) is not in mixedCase
Parameter PetsLove.tradingStatus(bool)._status (#621) is not in mixedCase
Parameter PetsLove.setAutoBuybackSettings(bool,uint256,uint256,uint256)._enabled (#717) is not in mixedCase
Parameter PetsLove.setAutoBuybackSettings(bool,uint256,uint256,uint256)._cap (#717) is not in mixedCase
Parameter PetsLove.setAutoBuybackSettings(bool,uint256,uint256,uint256)._amount (#717) is not in mixedCase
Parameter PetsLove.setAutoBuybackSettings(bool,uint256,uint256,uint256)._period (#717) is not in mixedCase
Parameter PetsLove.setBuyFees(uint256,uint256,uint256,uint256,uint256)._liquidityFee (#766) is not in mixedCase
Parameter PetsLove.setBuyFees(uint256,uint256,uint256,uint256,uint256)._buybackFee (#766) is not in mixedCase
Parameter PetsLove.setBuyFees(uint256,uint256,uint256,uint256,uint256)._reflectionFee (#766) is not in mixedCase
Parameter PetsLove.setBuyFees(uint256,uint256,uint256,uint256,uint256)._marketingFee (#766) is not in mixedCase
Parameter PetsLove.setBuyFees(uint256,uint256,uint256,uint256,uint256)._feeDenominator (#766) is not in mixedCase
Parameter PetsLove.setSellFees(uint256,uint256,uint256,uint256,uint256)._liquidityFee (#775) is not in mixedCase
Parameter PetsLove.setSellFees(uint256,uint256,uint256,uint256,uint256)._buybackFee (#775) is not in mixedCase
Parameter PetsLove.setSellFees(uint256,uint256,uint256,uint256,uint256)._reflectionFee (#775) is not in mixedCase
Parameter PetsLove.setSellFees(uint256,uint256,uint256,uint256,uint256)._marketingFee (#775) is not in mixedCase
Parameter PetsLove.setSellFees(uint256,uint256,uint256,uint256,uint256)._feeDenominator (#775) is not in mixedCase
Parameter PetsLove.setFeeReceivers(address,address)._autoLiquidityReceiver (#784) is not in mixedCase
Parameter PetsLove.setFeeReceivers(address,address)._marketingFeeReceiver (#784) is not in mixedCase
Parameter PetsLove.setSwapBackSettings(bool,uint256)._enabled (#789) is not in mixedCase
Parameter PetsLove.setSwapBackSettings(bool,uint256)._amount (#789) is not in mixedCase
Parameter PetsLove.setTargetLiquidity(uint256,uint256)._target (#794) is not in mixedCase
Parameter PetsLove.setTargetLiquidity(uint256,uint256)._denominator (#794) is not in mixedCase
Parameter PetsLove.setDistributionCriteria(uint256,uint256)._minPeriod (#804) is not in mixedCase
Parameter PetsLove.setDistributionCriteria(uint256,uint256)._minDistribution (#804) is not in mixedCase
Variable PetsLove.PETH (#406) is not in mixedCase
Variable PetsLove.WBNB (#407) is not in mixedCase
Variable PetsLove.DEAD (#408) is not in mixedCase
Variable PetsLove.ZERO (#409) is not in mixedCase
Constant PetsLove._name (#411) is not in UPPER_CASE_WITH_UNDERSCORES
Constant PetsLove._symbol (#412) is not in UPPER_CASE_WITH_UNDERSCORES
Constant PetsLove._decimals (#413) is not in UPPER_CASE_WITH_UNDERSCORES
Variable PetsLove._totalSupply (#415) is not in mixedCase
Variable PetsLove._maxTxAmount (#416) is not in mixedCase
Variable PetsLove._balances (#418) is not in mixedCase
Variable PetsLove._allowances (#419) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Reentrancy in DividendDistributor.distributeDividend(address) (#359-370):
External calls:
- PETH.transfer(shareholder,amount) (#365)
State variables written after the call(s):
- shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount) (#367)
- shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount) (#368)
Reentrancy in DividendDistributor.process(uint256) (#328-352):
External calls:
- distributeDividend(shareholders[currentIndex]) (#344)
- PETH.transfer(shareholder,amount) (#365)
State variables written after the call(s):
- currentIndex ++ (#349)
Reentrancy in DividendDistributor.setShare(address,uint256) (#292-306):
External calls:
- distributeDividend(shareholder) (#294)
- PETH.transfer(shareholder,amount) (#365)
State variables written after the call(s):
- shares[shareholder].amount = amount (#304)
- shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount) (#305)
Apply the check-effects-interactions pattern.
Additional information: link
PetsLove.swapBack(bool) (#625-674) ignores return value by router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#664-671)
Ensure that all the return values of the function calls are used.
Additional information: link
Variable IDEXRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#188) is too similar to IDEXRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#189)
Prevent variables from having similar names.
Additional information: link
DividendDistributor.slitherConstructorVariables() (#237-402) uses literals with too many digits:
- minDistribution = 1000000 * (10 ** 9) (#265)
PetsLove.slitherConstructorVariables() (#404-837) uses literals with too many digits:
- DEAD = 0x000000000000000000000000000000000000dEaD (#408)
PetsLove.slitherConstructorVariables() (#404-837) uses literals with too many digits:
- ZERO = 0x0000000000000000000000000000000000000000 (#409)
PetsLove.slitherConstructorVariables() (#404-837) uses literals with too many digits:
- _totalSupply = 1000000000000000 * (10 ** _decimals) (#415)
PetsLove.slitherConstructorVariables() (#404-837) uses literals with too many digits:
- distributorGas = 500000 (#468)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
DividendDistributor.setDistributionCriteria(uint256,uint256) (#287-290) should emit an event for:
- minPeriod = _minPeriod (#288)
- minDistribution = _minDistribution (#289)
PetsLove.setAutoBuybackSettings(bool,uint256,uint256,uint256) (#717-724) should emit an event for:
- autoBuybackCap = _cap (#719)
- autoBuybackAmount = _amount (#721)
PetsLove.setBuybackMultiplierSettings(uint256,uint256,uint256) (#726-731) should emit an event for:
- buybackMultiplierNumerator = numerator (#728)
- buybackMultiplierDenominator = denominator (#729)
- buybackMultiplierLength = length (#730)
PetsLove.setTxLimit(uint256) (#743-746) should emit an event for:
- _maxTxAmount = amount (#745)
PetsLove.setBuyFees(uint256,uint256,uint256,uint256,uint256) (#766-773) should emit an event for:
- liquidityBuyFee = _liquidityFee (#767)
- reflectionBuyFee = _reflectionFee (#769)
- marketingBuyFee = _marketingFee (#770)
- totalBuyFee = _liquidityFee.add(_buybackFee).add(_reflectionFee).add(_marketingFee) (#771)
- buyFeeDenominator = _feeDenominator (#772)
PetsLove.setSellFees(uint256,uint256,uint256,uint256,uint256) (#775-782) should emit an event for:
- liquiditySellFee = _liquidityFee (#776)
- reflectionSellFee = _reflectionFee (#778)
- marketingSellFee = _marketingFee (#779)
- totalSellFee = _liquidityFee.add(_buybackFee).add(_reflectionFee).add(_marketingFee) (#780)
- sellFeeDenominator = _feeDenominator (#781)
PetsLove.setSwapBackSettings(bool,uint256) (#789-792) should emit an event for:
- swapThreshold = _amount (#791)
PetsLove.setTargetLiquidity(uint256,uint256) (#794-797) should emit an event for:
- targetLiquidity = _target (#795)
- targetLiquidityDenominator = _denominator (#796)
Emit an event for critical parameter changes.
Additional information: link
Auth.transferOwnership(address).adr (#168) lacks a zero-check on :
- owner = adr (#169)
PetsLove.constructor().owner_ (#485) lacks a zero-check on :
- autoLiquidityReceiver = owner_ (#495)
- marketingFeeReceiver = owner_ (#496)
PetsLove.setFeeReceivers(address,address)._autoLiquidityReceiver (#784) lacks a zero-check on :
- autoLiquidityReceiver = _autoLiquidityReceiver (#785)
PetsLove.setFeeReceivers(address,address)._marketingFeeReceiver (#784) lacks a zero-check on :
- marketingFeeReceiver = _marketingFeeReceiver (#786)
Check that the address is not zero.
Additional information: link
DividendDistributor.distributeDividend(address) (#359-370) has external calls inside a loop: PETH.transfer(shareholder,amount) (#365)
Favor pull over push strategy for external calls.
Additional information: link
Reentrancy in PetsLove._transferFrom(address,address,uint256) (#534-565):
External calls:
- swapBack(recipient == pair) (#543)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#641-647)
- distributor.deposit{value: amountBNBReflection}() (#657)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#658)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#664-671)
- triggerAutoBuyback() (#544)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#709-714)
External calls sending eth:
- swapBack(recipient == pair) (#543)
- distributor.deposit{value: amountBNBReflection}() (#657)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#658)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#664-671)
- triggerAutoBuyback() (#544)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#709-714)
State variables written after the call(s):
- launch() (#546)
- launchedAt = block.number (#739)
- launch() (#546)
- launchedAtTimestamp = block.timestamp (#740)
Reentrancy in PetsLove.constructor() (#478-500):
External calls:
- pair = IDEXFactory(router.factory()).createPair(WBNB,address(this)) (#480)
State variables written after the call(s):
- _allowances[address(this)][address(router)] = ~ uint256(0) (#481)
- _balances[owner_] = _totalSupply (#498)
- autoLiquidityReceiver = owner_ (#495)
- distributor = new DividendDistributor(address(router)) (#483)
- isDividendExempt[pair] = true (#489)
- isDividendExempt[address(this)] = true (#490)
- isDividendExempt[DEAD] = false (#493)
- isFeeExempt[owner_] = true (#487)
- isFeeExempt[address(this)] = true (#491)
- isTxLimitExempt[owner_] = true (#488)
- isTxLimitExempt[address(this)] = true (#492)
- marketingFeeReceiver = owner_ (#496)
Reentrancy in DividendDistributor.deposit() (#308-326):
External calls:
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(0,path,address(this),block.timestamp) (#315-320)
State variables written after the call(s):
- dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)) (#325)
- totalDividends = totalDividends.add(amount) (#324)
Reentrancy in DividendDistributor.distributeDividend(address) (#359-370):
External calls:
- PETH.transfer(shareholder,amount) (#365)
State variables written after the call(s):
- shareholderClaims[shareholder] = block.timestamp (#366)
Reentrancy in DividendDistributor.setShare(address,uint256) (#292-306):
External calls:
- distributeDividend(shareholder) (#294)
- PETH.transfer(shareholder,amount) (#365)
State variables written after the call(s):
- addShareholder(shareholder) (#298)
- shareholderIndexes[shareholder] = shareholders.length (#393)
- removeShareholder(shareholder) (#300)
- shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder] (#399)
- addShareholder(shareholder) (#298)
- shareholders.push(shareholder) (#394)
- removeShareholder(shareholder) (#300)
- shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1] (#398)
- shareholders.pop() (#400)
- totalShares = totalShares.sub(shares[shareholder].amount).add(amount) (#303)
Reentrancy in PetsLove.triggerAutoBuyback() (#697-702):
External calls:
- buyTokens(autoBuybackAmount,DEAD) (#698)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#709-714)
State variables written after the call(s):
- autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount) (#700)
- autoBuybackBlockLast = block.number (#699)
- autoBuybackEnabled = false (#701)
Reentrancy in PetsLove.triggerManualBuyback(uint256,bool) (#684-690):
External calls:
- buyTokens(amount,DEAD) (#685)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#709-714)
State variables written after the call(s):
- buybackMultiplierTriggeredAt = block.timestamp (#687)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in PetsLove._transferFrom(address,address,uint256) (#534-565):
External calls:
- swapBack(recipient == pair) (#543)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#641-647)
- distributor.deposit{value: amountBNBReflection}() (#657)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#658)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#664-671)
- triggerAutoBuyback() (#544)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#709-714)
- distributor.setShare(sender,_balances[sender]) (#554)
- distributor.setShare(recipient,_balances[recipient]) (#555)
- distributor.process(distributorGas) (#557)
External calls sending eth:
- swapBack(recipient == pair) (#543)
- distributor.deposit{value: amountBNBReflection}() (#657)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#658)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#664-671)
- triggerAutoBuyback() (#544)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#709-714)
Event emitted after the call(s):
- Transfer(sender,recipient,amountReceived) (#559)
Reentrancy in PetsLove._transferFrom(address,address,uint256) (#534-565):
External calls:
- swapBack(recipient == pair) (#543)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#641-647)
- distributor.deposit{value: amountBNBReflection}() (#657)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#658)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#664-671)
- triggerAutoBuyback() (#544)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#709-714)
External calls sending eth:
- swapBack(recipient == pair) (#543)
- distributor.deposit{value: amountBNBReflection}() (#657)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#658)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#664-671)
- triggerAutoBuyback() (#544)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#709-714)
Event emitted after the call(s):
- Transfer(sender,address(this),feeAmount) (#609)
- amountReceived = takeFee(sender,recipient,amount) (#550)
Reentrancy in PetsLove.constructor() (#478-500):
External calls:
- pair = IDEXFactory(router.factory()).createPair(WBNB,address(this)) (#480)
Event emitted after the call(s):
- Transfer(address(0),owner_,_totalSupply) (#499)
Reentrancy in PetsLove.swapBack(bool) (#625-674):
External calls:
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#641-647)
- distributor.deposit{value: amountBNBReflection}() (#657)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#658)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#664-671)
External calls sending eth:
- distributor.deposit{value: amountBNBReflection}() (#657)
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#658)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#664-671)
Event emitted after the call(s):
- AutoLiquify(amountBNBLiquidity,amountToLiquify) (#672)
Reentrancy in PetsLove.triggerManualBuyback(uint256,bool) (#684-690):
External calls:
- buyTokens(amount,DEAD) (#685)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (#709-714)
Event emitted after the call(s):
- BuybackMultiplierActive(buybackMultiplierLength) (#688)
Apply the check-effects-interactions pattern.
Additional information: link
DividendDistributor.shouldDistribute(address) (#354-357) uses timestamp for comparisons
Dangerous comparisons:
- shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution (#355-356)
PetsLove._transferFrom(address,address,uint256) (#534-565) uses timestamp for comparisons
Dangerous comparisons:
- require(bool)(_balances[sender] > 0) (#546)
PetsLove.getMultipliedFee() (#591-600) uses timestamp for comparisons
Dangerous comparisons:
- launchedAtTimestamp + 86400 > block.timestamp (#592)
- buybackMultiplierTriggeredAt.add(buybackMultiplierLength) > block.timestamp (#594)
PetsLove.shouldSwapBack() (#614-619) uses timestamp for comparisons
Dangerous comparisons:
- msg.sender != pair && ! inSwap && swapEnabled && _balances[address(this)] >= swapThreshold (#615-618)
PetsLove.isOverLiquified(uint256,uint256) (#830-832) uses timestamp for comparisons
Dangerous comparisons:
- getLiquidityBacking(accuracy) > target (#831)
Avoid relying on block.timestamp.
Additional information: link
DividendDistributor.process(uint256) (#328-352) has costly operations inside a loop:
- currentIndex = 0 (#340)
DividendDistributor.distributeDividend(address) (#359-370) has costly operations inside a loop:
- totalDistributed = totalDistributed.add(amount) (#364)
DividendDistributor.process(uint256) (#328-352) has costly operations inside a loop:
- currentIndex ++ (#349)
Use a local variable to hold the loop computation result.
Additional information: link
SafeMath.div(uint256,uint256,string) (#84-89) is never used and should be removed
SafeMath.mod(uint256,uint256) (#73-75) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#91-96) is never used and should be removed
SafeMath.tryAdd(uint256,uint256) (#16-22) is never used and should be removed
SafeMath.tryDiv(uint256,uint256) (#43-48) is never used and should be removed
SafeMath.tryMod(uint256,uint256) (#50-55) is never used and should be removed
SafeMath.tryMul(uint256,uint256) (#31-41) is never used and should be removed
SafeMath.trySub(uint256,uint256) (#24-29) is never used and should be removed
Remove unused functions.
Additional information: link
PetsLove._maxTxAmount (#416) is set pre-construction with a non-constant function or state variable:
- _totalSupply.div(1)
PetsLove.swapThreshold (#471) is set pre-construction with a non-constant function or state variable:
- _totalSupply / 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 (#10) allows old versions
solc-0.8.0 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 PetsLove.swapBack(bool) (#625-674):
- (success) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#658)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
DividendDistributor.WBNB (#249) should be constant
DividendDistributor.dividendsPerShareAccuracyFactor (#262) should be constant
PetsLove.DEAD (#408) should be constant
PetsLove.PETH (#406) should be constant
PetsLove.WBNB (#407) should be constant
PetsLove.ZERO (#409) should be constant
PetsLove._totalSupply (#415) should be constant
PetsLove.autoBuybackMultiplier (#460) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
authorize(address) should be declared external:
- Auth.authorize(address) (#140-142)
unauthorize(address) should be declared external:
- Auth.unauthorize(address) (#147-149)
transferOwnership(address) should be declared external:
- Auth.transferOwnership(address) (#168-172)
tradingStatus(bool) should be declared external:
- PetsLove.tradingStatus(bool) (#621-623)
getUnpaidEarnings(address) should be declared external:
- PetsLove.getUnpaidEarnings(address) (#812-814)
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