RedPill.swapBack() (#859-928) sends eth to arbitrary user
Dangerous calls:
- (tmpSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#905-908)
- (tmpSuccess,None) = address(devFeeReceiver).call{gas: 30000,value: amountBNBDev}() (#909-912)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in RedPill._transferFrom(address,address,uint256) (#656-740):
External calls:
- swapBack() (#710)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#880-886)
- distributor.deposit{value: amountBNBReflection}() (#904)
- (tmpSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#905-908)
- (tmpSuccess,None) = address(devFeeReceiver).call{gas: 30000,value: amountBNBDev}() (#909-912)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#918-925)
External calls sending eth:
- swapBack() (#710)
- distributor.deposit{value: amountBNBReflection}() (#904)
- (tmpSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#905-908)
- (tmpSuccess,None) = address(devFeeReceiver).call{gas: 30000,value: amountBNBDev}() (#909-912)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#918-925)
State variables written after the call(s):
- _rBalance[sender] = _rBalance[sender].sub(rAmount,Insufficient Balance) (#714-717)
- _rBalance[recipient] = _rBalance[recipient].add(amountReceived) (#723)
- amountReceived = takeFee(sender,rAmount,(recipient == pair)) (#719-722)
- _rBalance[address(this)] = _rBalance[address(this)].add(feeAmount) (#788)
Apply the check-effects-interactions pattern.
Additional information: link
DividendDistributor.distributeDividend(address) (#399-416) ignores return value by RWRD.transfer(shareholder,amount) (#407)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Too many vulnerabilities (Unchecked transfer, Reentrancy vulnerability, etc.). High risk of a scam. DYOR & manual audit are advised.
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
RedPill.swapBack().tmpSuccess (#905) is written in both
(tmpSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#905-908)
(tmpSuccess,None) = address(devFeeReceiver).call{gas: 30000,value: amountBNBDev}() (#909-912)
RedPill.swapBack().tmpSuccess (#905) is written in both
(tmpSuccess,None) = address(devFeeReceiver).call{gas: 30000,value: amountBNBDev}() (#909-912)
tmpSuccess = false (#915)
Fix or remove the writes.
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.
RedPill.setMaster(address) (#1014-1016) should emit an event for:
- master = _master (#1015)
Emit an event for critical parameter changes.
Additional information: link
Reentrancy in DividendDistributor.distributeDividend(address) (#399-416):
External calls:
- RWRD.transfer(shareholder,amount) (#407)
State variables written after the call(s):
- shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount) (#409-411)
- shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount) (#412-414)
Reentrancy in DividendDistributor.process(uint256) (#361-387):
External calls:
- distributeDividend(shareholders[currentIndex]) (#379)
- RWRD.transfer(shareholder,amount) (#407)
State variables written after the call(s):
- currentIndex ++ (#384)
Reentrancy in DividendDistributor.setShare(address,uint256) (#320-340):
External calls:
- distributeDividend(shareholder) (#326)
- RWRD.transfer(shareholder,amount) (#407)
State variables written after the call(s):
- shares[shareholder].amount = amount (#336)
- shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount) (#337-339)
Apply the check-effects-interactions pattern.
Additional information: link
RedPill.takeFee(address,uint256,bool) (#770-792) performs a multiplication on the result of a division:
-feeAmount = rAmount.div(feeDenominator * 100).mul(totalFee).mul(multiplier) (#780-782)
RedPill.takeFee(address,uint256,bool) (#770-792) performs a multiplication on the result of a division:
-feeAmount = rAmount.div(100).mul(99) (#785)
RedPill.swapBack() (#859-928) performs a multiplication on the result of a division:
-amountToLiquify = tokensToSell.div(totalFee).mul(dynamicLiquidityFee).div(2) (#868-871)
RedPill.setSwapBackSettings(bool,uint256) (#989-995) performs a multiplication on the result of a division:
-swapThreshold = rSupply.div(10000).mul(_percentage_base10000) (#994)
RedPill.setMaxWalletPercent_base1000(uint256) (#1074-1079) performs a multiplication on the result of a division:
-_maxWalletToken = rSupply.div(1000).mul(maxWallPercent_base1000) (#1078)
RedPill.setMaxTxPercent_base1000(uint256) (#1081-1086) performs a multiplication on the result of a division:
-_maxTxAmount = rSupply.div(1000).mul(maxTXPercentage_base1000) (#1085)
RedPill.slitherConstructorVariables() (#468-1159) performs a multiplication on the result of a division:
-_maxTxAmount = rSupply.div(100).mul(2) (#553)
RedPill.slitherConstructorVariables() (#468-1159) performs a multiplication on the result of a division:
-_maxWalletToken = rSupply.div(100).mul(3) (#554)
Consider ordering multiplication before division.
Additional information: link
RedPill.manage_houseguests(address[],bool).i (#848) 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
RedPill.swapBack() (#859-928) ignores return value by router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#918-925)
Ensure that all the return values of the function calls are used.
Additional information: link
DividendDistributor.setDistributionCriteria(uint256,uint256) (#312-318) should emit an event for:
- minPeriod = _minPeriod (#316)
- minDistribution = _minDistribution (#317)
RedPill.set_sell_multiplier(uint256) (#817-819) should emit an event for:
- sellMultiplier = Multiplier (#818)
RedPill.tradingStatus(bool,uint256) (#823-829) should emit an event for:
- deadBlocks = _deadBlocks (#827)
RedPill.launchStatus(uint256) (#831-833) should emit an event for:
- launchedAt = _launchblock (#832)
RedPill.setFees(uint256,uint256,uint256,uint256,uint256) (#961-977) should emit an event for:
- liquidityFee = _liquidityFee (#968)
- reflectionFee = _reflectionFee (#969)
- marketingFee = _marketingFee (#970)
- devFee = _devFee (#971)
- totalFee = _liquidityFee.add(_reflectionFee).add(_marketingFee).add(_devFee) (#972-974)
- feeDenominator = _feeDenominator (#975)
RedPill.setSwapBackSettings(bool,uint256) (#989-995) should emit an event for:
- swapThreshold = rSupply.div(10000).mul(_percentage_base10000) (#994)
RedPill.setTargetLiquidity(uint256,uint256) (#997-1003) should emit an event for:
- targetLiquidity = _target (#1001)
- targetLiquidityDenominator = _denominator (#1002)
RedPill.setMaxWalletPercent_base1000(uint256) (#1074-1079) should emit an event for:
- _maxWalletToken = rSupply.div(1000).mul(maxWallPercent_base1000) (#1078)
RedPill.setMaxTxPercent_base1000(uint256) (#1081-1086) should emit an event for:
- _maxTxAmount = rSupply.div(1000).mul(maxTXPercentage_base1000) (#1085)
Emit an event for critical parameter changes.
Additional information: link
Auth.transferOwnership(address).adr (#167) lacks a zero-check on :
- owner = adr (#168)
RedPill.setFeeReceivers(address,address,address)._autoLiquidityReceiver (#980) lacks a zero-check on :
- autoLiquidityReceiver = _autoLiquidityReceiver (#984)
RedPill.setFeeReceivers(address,address,address)._marketingFeeReceiver (#981) lacks a zero-check on :
- marketingFeeReceiver = _marketingFeeReceiver (#985)
RedPill.setFeeReceivers(address,address,address)._devFeeReceiver (#982) lacks a zero-check on :
- devFeeReceiver = _devFeeReceiver (#986)
RedPill.setMaster(address)._master (#1014) lacks a zero-check on :
- master = _master (#1015)
Check that the address is not zero.
Additional information: link
DividendDistributor.distributeDividend(address) (#399-416) has external calls inside a loop: RWRD.transfer(shareholder,amount) (#407)
RedPill.multiTransfer(address,address[],uint256[]) (#1090-1125) has external calls inside a loop: distributor.setShare(addresses[i_scope_0],balanceOf(addresses[i_scope_0])) (#1115-1117)
RedPill.multiTransfer_fixed(address,address[],uint256) (#1127-1154) has external calls inside a loop: distributor.setShare(addresses[i],balanceOf(addresses[i])) (#1144-1146)
Favor pull over push strategy for external calls.
Additional information: link
Reentrancy in RedPill.constructor() (#556-584):
External calls:
- pair = IDEXFactory(router.factory()).createPair(WBNB,address(this)) (#558)
State variables written after the call(s):
- _allowances[address(this)][address(router)] = uint256(- 1) (#559)
- _rBalance[msg.sender] = rSupply (#582)
- _totalSupply = INITIAL_FRAGMENTS_SUPPLY (#562)
- autoLiquidityReceiver = msg.sender (#578)
- devFeeReceiver = 0x7A998025e6f4e44197beCA8166128b396e636Fd8 (#580)
- distributor = new DividendDistributor(address(router)) (#565)
- isDividendExempt[pair] = true (#574)
- isDividendExempt[address(this)] = true (#575)
- isDividendExempt[DEAD] = true (#576)
- isFeeExempt[msg.sender] = true (#567)
- isTimelockExempt[msg.sender] = true (#570)
- isTimelockExempt[DEAD] = true (#571)
- isTimelockExempt[address(this)] = true (#572)
- isTxLimitExempt[msg.sender] = true (#568)
- marketingFeeReceiver = 0x7aA894a34d6638ED2f9059F63Cd5a76C7556AC61 (#579)
- pairContract = InterfaceLP(pair) (#561)
- rate = rSupply.div(_totalSupply) (#563)
Reentrancy in DividendDistributor.deposit() (#342-359):
External calls:
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(0,path,address(this),block.timestamp) (#349-351)
State variables written after the call(s):
- dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)) (#356-358)
- totalDividends = totalDividends.add(amount) (#355)
Reentrancy in DividendDistributor.distributeDividend(address) (#399-416):
External calls:
- RWRD.transfer(shareholder,amount) (#407)
State variables written after the call(s):
- shareholderClaims[shareholder] = block.timestamp (#408)
Reentrancy in DividendDistributor.setShare(address,uint256) (#320-340):
External calls:
- distributeDividend(shareholder) (#326)
- RWRD.transfer(shareholder,amount) (#407)
State variables written after the call(s):
- addShareholder(shareholder) (#330)
- shareholderIndexes[shareholder] = shareholders.length (#453)
- removeShareholder(shareholder) (#332)
- shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder] (#461-463)
- addShareholder(shareholder) (#330)
- shareholders.push(shareholder) (#454)
- removeShareholder(shareholder) (#332)
- shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1] (#458-460)
- shareholders.pop() (#464)
- totalShares = totalShares.sub(shares[shareholder].amount).add(amount) (#335)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in RedPill._transferFrom(address,address,uint256) (#656-740):
External calls:
- swapBack() (#710)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#880-886)
- distributor.deposit{value: amountBNBReflection}() (#904)
- (tmpSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#905-908)
- (tmpSuccess,None) = address(devFeeReceiver).call{gas: 30000,value: amountBNBDev}() (#909-912)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#918-925)
- distributor.setShare(sender,balanceOf(sender)) (#727)
- distributor.setShare(recipient,balanceOf(recipient)) (#731-733)
- distributor.process(distributorGas) (#736)
External calls sending eth:
- swapBack() (#710)
- distributor.deposit{value: amountBNBReflection}() (#904)
- (tmpSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#905-908)
- (tmpSuccess,None) = address(devFeeReceiver).call{gas: 30000,value: amountBNBDev}() (#909-912)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#918-925)
Event emitted after the call(s):
- Transfer(sender,recipient,amountReceived.div(rate)) (#738)
Reentrancy in RedPill._transferFrom(address,address,uint256) (#656-740):
External calls:
- swapBack() (#710)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#880-886)
- distributor.deposit{value: amountBNBReflection}() (#904)
- (tmpSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#905-908)
- (tmpSuccess,None) = address(devFeeReceiver).call{gas: 30000,value: amountBNBDev}() (#909-912)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#918-925)
External calls sending eth:
- swapBack() (#710)
- distributor.deposit{value: amountBNBReflection}() (#904)
- (tmpSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#905-908)
- (tmpSuccess,None) = address(devFeeReceiver).call{gas: 30000,value: amountBNBDev}() (#909-912)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#918-925)
Event emitted after the call(s):
- Transfer(sender,address(this),feeAmount.div(rate)) (#789)
- amountReceived = takeFee(sender,rAmount,(recipient == pair)) (#719-722)
Reentrancy in RedPill.constructor() (#556-584):
External calls:
- pair = IDEXFactory(router.factory()).createPair(WBNB,address(this)) (#558)
Event emitted after the call(s):
- Transfer(address(0),msg.sender,_totalSupply) (#583)
Reentrancy in RedPill.swapBack() (#859-928):
External calls:
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#880-886)
- distributor.deposit{value: amountBNBReflection}() (#904)
- (tmpSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#905-908)
- (tmpSuccess,None) = address(devFeeReceiver).call{gas: 30000,value: amountBNBDev}() (#909-912)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#918-925)
External calls sending eth:
- distributor.deposit{value: amountBNBReflection}() (#904)
- (tmpSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#905-908)
- (tmpSuccess,None) = address(devFeeReceiver).call{gas: 30000,value: amountBNBDev}() (#909-912)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (#918-925)
Event emitted after the call(s):
- AutoLiquify(amountBNBLiquidity,amountToLiquify.div(rate)) (#926)
Apply the check-effects-interactions pattern.
Additional information: link
DividendDistributor.shouldDistribute(address) (#389-397) uses timestamp for comparisons
Dangerous comparisons:
- shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution (#394-396)
RedPill._transferFrom(address,address,uint256) (#656-740) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(cooldownTimer[recipient] < block.timestamp,buy Cooldown exists) (#690-693)
Avoid relying on block.timestamp.
Additional information: link
DividendDistributor.process(uint256) (#361-387) has costly operations inside a loop:
- currentIndex = 0 (#375)
DividendDistributor.distributeDividend(address) (#399-416) has costly operations inside a loop:
- totalDistributed = totalDistributed.add(amount) (#406)
DividendDistributor.process(uint256) (#361-387) has costly operations inside a loop:
- currentIndex ++ (#384)
Use a local variable to hold the loop computation result.
Additional information: link
SafeMathInt.abs(int256) (#87-90) is never used and should be removed
SafeMathInt.add(int256,int256) (#81-85) is never used and should be removed
SafeMathInt.div(int256,int256) (#69-73) is never used and should be removed
SafeMathInt.mul(int256,int256) (#61-67) is never used and should be removed
SafeMathInt.sub(int256,int256) (#75-79) is never used and should be removed
Remove unused functions.
Additional information: link
RedPill.totalFee (#493-494) is set pre-construction with a non-constant function or state variable:
- marketingFee + reflectionFee + liquidityFee + devFee
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 (#6) allows old versions
solc-0.7.4 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 RedPill.swapBack() (#859-928):
- (tmpSuccess) = address(marketingFeeReceiver).call{gas: 30000,value: amountBNBMarketing}() (#905-908)
- (tmpSuccess,None) = address(devFeeReceiver).call{gas: 30000,value: amountBNBDev}() (#909-912)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IDEXRouter.WETH() (#189) is not in mixedCase
Parameter DividendDistributor.setDistributionCriteria(uint256,uint256)._minPeriod (#313) is not in mixedCase
Parameter DividendDistributor.setDistributionCriteria(uint256,uint256)._minDistribution (#314) is not in mixedCase
Variable DividendDistributor._token (#264) is not in mixedCase
Variable DividendDistributor.RWRD (#272) is not in mixedCase
Variable DividendDistributor.WBNB (#273) is not in mixedCase
Function RedPill.clearStuckBalance_sender(uint256) (#809-815) is not in mixedCase
Function RedPill.set_sell_multiplier(uint256) (#817-819) is not in mixedCase
Parameter RedPill.set_sell_multiplier(uint256).Multiplier (#817) is not in mixedCase
Parameter RedPill.tradingStatus(bool,uint256)._status (#823) is not in mixedCase
Parameter RedPill.tradingStatus(bool,uint256)._deadBlocks (#823) is not in mixedCase
Parameter RedPill.launchStatus(uint256)._launchblock (#831) is not in mixedCase
Function RedPill.enable_hotel_CaliforniaMode(bool) (#836-838) is not in mixedCase
Parameter RedPill.enable_hotel_CaliforniaMode(bool)._status (#836) is not in mixedCase
Function RedPill.set_max_roomrent(uint256) (#840-842) is not in mixedCase
Parameter RedPill.set_max_roomrent(uint256)._rent_withoutdecimal (#840) is not in mixedCase
Function RedPill.manage_houseguests(address[],bool) (#844-851) is not in mixedCase
Parameter RedPill.cooldownEnabled(bool,uint8)._status (#853) is not in mixedCase
Parameter RedPill.cooldownEnabled(bool,uint8)._interval (#853) is not in mixedCase
Parameter RedPill.setFees(uint256,uint256,uint256,uint256,uint256)._liquidityFee (#962) is not in mixedCase
Parameter RedPill.setFees(uint256,uint256,uint256,uint256,uint256)._reflectionFee (#963) is not in mixedCase
Parameter RedPill.setFees(uint256,uint256,uint256,uint256,uint256)._marketingFee (#964) is not in mixedCase
Parameter RedPill.setFees(uint256,uint256,uint256,uint256,uint256)._devFee (#965) is not in mixedCase
Parameter RedPill.setFees(uint256,uint256,uint256,uint256,uint256)._feeDenominator (#966) is not in mixedCase
Parameter RedPill.setFeeReceivers(address,address,address)._autoLiquidityReceiver (#980) is not in mixedCase
Parameter RedPill.setFeeReceivers(address,address,address)._marketingFeeReceiver (#981) is not in mixedCase
Parameter RedPill.setFeeReceivers(address,address,address)._devFeeReceiver (#982) is not in mixedCase
Parameter RedPill.setSwapBackSettings(bool,uint256)._enabled (#989) is not in mixedCase
Parameter RedPill.setSwapBackSettings(bool,uint256)._percentage_base10000 (#989) is not in mixedCase
Parameter RedPill.setTargetLiquidity(uint256,uint256)._target (#997) is not in mixedCase
Parameter RedPill.setTargetLiquidity(uint256,uint256)._denominator (#997) is not in mixedCase
Parameter RedPill.setLP(address)._address (#1009) is not in mixedCase
Parameter RedPill.setMaster(address)._master (#1014) is not in mixedCase
Parameter RedPill.setDistributionCriteria(uint256,uint256)._minPeriod (#1027) is not in mixedCase
Parameter RedPill.setDistributionCriteria(uint256,uint256)._minDistribution (#1028) is not in mixedCase
Function RedPill.setMaxWalletPercent_base1000(uint256) (#1074-1079) is not in mixedCase
Parameter RedPill.setMaxWalletPercent_base1000(uint256).maxWallPercent_base1000 (#1074) is not in mixedCase
Function RedPill.setMaxTxPercent_base1000(uint256) (#1081-1086) is not in mixedCase
Parameter RedPill.setMaxTxPercent_base1000(uint256).maxTXPercentage_base1000 (#1081) is not in mixedCase
Function RedPill.multiTransfer_fixed(address,address[],uint256) (#1127-1154) is not in mixedCase
Variable RedPill.WBNB (#472) is not in mixedCase
Variable RedPill.DEAD (#473) is not in mixedCase
Variable RedPill.ZERO (#474) is not in mixedCase
Constant RedPill._name (#476) is not in UPPER_CASE_WITH_UNDERSCORES
Constant RedPill._symbol (#477) is not in UPPER_CASE_WITH_UNDERSCORES
Constant RedPill._decimals (#478) is not in UPPER_CASE_WITH_UNDERSCORES
Variable RedPill._rBalance (#481) is not in mixedCase
Variable RedPill._allowances (#482) is not in mixedCase
Variable RedPill._totalSupply (#546) is not in mixedCase
Constant RedPill.rSupply (#549-550) is not in UPPER_CASE_WITH_UNDERSCORES
Variable RedPill._maxTxAmount (#553) is not in mixedCase
Variable RedPill._maxWalletToken (#554) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IDEXRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#194) is too similar to IDEXRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#195)
Prevent variables from having similar names.
Additional information: link
RedPill.setDistributorSettings(uint256) (#1033-1036) uses literals with too many digits:
- require(bool)(gas < 900000) (#1034)
RedPill.slitherConstructorVariables() (#468-1159) uses literals with too many digits:
- DEAD = 0x000000000000000000000000000000000000dEaD (#473)
RedPill.slitherConstructorVariables() (#468-1159) uses literals with too many digits:
- ZERO = 0x0000000000000000000000000000000000000000 (#474)
RedPill.slitherConstructorVariables() (#468-1159) uses literals with too many digits:
- maxRoomRent = 8000000000 (#498)
RedPill.slitherConstructorVariables() (#468-1159) uses literals with too many digits:
- distributorGas = 500000 (#521)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
SafeMathInt.MAX_INT256 (#59) is never used in SafeMathInt (#57-91)
RedPill.MAX_SUPPLY (#548) is never used in RedPill (#468-1159)
Remove unused state variables.
Additional information: link
DividendDistributor.WBNB (#273) should be constant
DividendDistributor.dividendsPerShareAccuracyFactor (#286) should be constant
RedPill.DEAD (#473) should be constant
RedPill.WBNB (#472) should be constant
RedPill.ZERO (#474) 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) (#151-153)
unauthorize(address) should be declared external:
- Auth.unauthorize(address) (#155-157)
transferOwnership(address) should be declared external:
- Auth.transferOwnership(address) (#167-171)
tradingStatus(bool,uint256) should be declared external:
- RedPill.tradingStatus(bool,uint256) (#823-829)
launchStatus(uint256) should be declared external:
- RedPill.launchStatus(uint256) (#831-833)
enable_hotel_CaliforniaMode(bool) should be declared external:
- RedPill.enable_hotel_CaliforniaMode(bool) (#836-838)
set_max_roomrent(uint256) should be declared external:
- RedPill.set_max_roomrent(uint256) (#840-842)
manage_houseguests(address[],bool) should be declared external:
- RedPill.manage_houseguests(address[],bool) (#844-851)
cooldownEnabled(bool,uint8) should be declared external:
- RedPill.cooldownEnabled(bool,uint8) (#853-856)
rescueToken(address,uint256) should be declared external:
- RedPill.rescueToken(address,uint256) (#1038-1044)
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