Reflecto works on an autonomous frictionless yield farming and liquidity generation protocol.
Holding $REFLECTO rewards investors earn passive income in EVERGROW, CRYPTER, and BUSD.
Reflecto is built with utilities in mind; it has an integrated meta transaction feature that will allow performing gasless transactions, which means users will not need to spend BNB to execute transactions on the blockchain.
Reflecto.buyTokens(uint256,address) (contracts/Reflecto.sol#482-490) sends eth to arbitrary user
Dangerous calls:
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (contracts/Reflecto.sol#487-489)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in Reflecto._transferFrom(address,address,uint256) (contracts/Reflecto.sol#262-306):
External calls:
- swapBack() (contracts/Reflecto.sol#274)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (contracts/Reflecto.sol#405-411)
- distributor.deposit{value: amountBNBReflection}() (contracts/Reflecto.sol#432)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (contracts/Reflecto.sol#437-444)
- triggerAutoBuyback() (contracts/Reflecto.sol#277)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (contracts/Reflecto.sol#487-489)
External calls sending eth:
- swapBack() (contracts/Reflecto.sol#274)
- distributor.deposit{value: amountBNBReflection}() (contracts/Reflecto.sol#432)
- address(marketingFeeReceiver).transfer(amountBNBMarketing) (contracts/Reflecto.sol#433)
- address(gasWalletFeeReceiver).transfer(amountBNBGasWallet) (contracts/Reflecto.sol#434)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (contracts/Reflecto.sol#437-444)
- triggerAutoBuyback() (contracts/Reflecto.sol#277)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (contracts/Reflecto.sol#487-489)
State variables written after the call(s):
- _balances[sender] = _balances[sender].sub(amount,Insufficient Balance) (contracts/Reflecto.sol#282-285)
- _balances[recipient] = _balances[recipient].add(amountReceived) (contracts/Reflecto.sol#291)
- amountReceived = takeFee(sender,recipient,amount) (contracts/Reflecto.sol#287-289)
- _balances[address(this)] = _balances[address(this)].add(feeAmount) (contracts/Reflecto.sol#374)
- triggerAutoBuyback() (contracts/Reflecto.sol#277)
- inSwap = true (contracts/Reflecto.sol#85)
- inSwap = false (contracts/Reflecto.sol#87)
Apply the check-effects-interactions pattern.
Additional information: link
DividendDistributor.distributeDividend(address) (contracts/DividendDistributor.sol#154-172) ignores return value by BEP_TOKEN.transfer(shareholder,amount) (contracts/DividendDistributor.sol#163)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Unable to verify that contract auditor is trusted: Certik, Quantstamp, Hacken, Solidity, Paladinsec, Openzeppelin, Verichains
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.
Reentrancy in DividendDistributor.setShare(address,uint256) (contracts/DividendDistributor.sol#75-96):
External calls:
- distributeDividend(shareholder) (contracts/DividendDistributor.sol#81)
- BEP_TOKEN.transfer(shareholder,amount) (contracts/DividendDistributor.sol#163)
State variables written after the call(s):
- shares[shareholder].amount = amount (contracts/DividendDistributor.sol#91)
- shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount) (contracts/DividendDistributor.sol#93-95)
Apply the check-effects-interactions pattern.
Additional information: link
Reflecto.swapBack() (contracts/Reflecto.sol#388-447) ignores return value by router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (contracts/Reflecto.sol#437-444)
Ensure that all the return values of the function calls are used.
Additional information: link
Reflecto._setAllowance(address,address,uint256).owner (contracts/Reflecto.sol#647) shadows:
- Auth.owner (contracts/libs/Auth.sol#5) (state variable)
Rename the local variables that shadow another component.
Additional information: link
Reflecto.setTargetLiquidity(uint256,uint256) (contracts/Reflecto.sol#596-602) should emit an event for:
- targetLiquidity = _target (contracts/Reflecto.sol#600)
- targetLiquidityDenominator = _denominator (contracts/Reflecto.sol#601)
Emit an event for critical parameter changes.
Additional information: link
Reflecto.setFeeReceivers(address,address,address)._gasWalletReceiver (contracts/Reflecto.sol#581) lacks a zero-check on :
- gasWalletFeeReceiver = _gasWalletReceiver (contracts/Reflecto.sol#585)
Check that the address is not zero.
Additional information: link
DistributorFactory.deposit() (contracts/DistributorFactory.sol#142-151) has external calls inside a loop: distributorsMapping[distributorsArrayOfKeys[i]].distributorAddress.deposit{value: valuePerToken}() (contracts/DistributorFactory.sol#147-149)
Favor pull over push strategy for external calls.
Additional information: link
Reentrancy in Reflecto.triggerZeusBuyback(uint256,bool) (contracts/Reflecto.sol#458-467):
External calls:
- buyTokens(amount,DEAD) (contracts/Reflecto.sol#462)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (contracts/Reflecto.sol#487-489)
State variables written after the call(s):
- buybackMultiplierTriggeredAt = block.timestamp (contracts/Reflecto.sol#464)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in Reflecto.triggerZeusBuyback(uint256,bool) (contracts/Reflecto.sol#458-467):
External calls:
- buyTokens(amount,DEAD) (contracts/Reflecto.sol#462)
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0,path,to,block.timestamp) (contracts/Reflecto.sol#487-489)
Event emitted after the call(s):
- BuybackMultiplierActive(buybackMultiplierLength) (contracts/Reflecto.sol#465)
Apply the check-effects-interactions pattern.
Additional information: link
Reflecto.permit(address,address,uint256,uint256,bool,uint8,bytes32,bytes32) (contracts/Reflecto.sol#658-697) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(expiry == 0 || block.timestamp <= expiry,Reflecto/permit-expired) (contracts/Reflecto.sol#690-693)
Avoid relying on block.timestamp.
Additional information: link
Reflecto.onlyBuybacker() (contracts/Reflecto.sol#209-212) compares to a boolean constant:
-require(bool,string)(buyBacker[msg.sender] == true,) (contracts/Reflecto.sol#210)
Remove the equality to the boolean constant.
Additional information: link
DividendDistributor.process(uint256) (contracts/DividendDistributor.sol#116-142) has costly operations inside a loop:
- currentIndex ++ (contracts/DividendDistributor.sol#139)
Use a local variable to hold the loop computation result.
Additional information: link
SafeMath.trySub(uint256,uint256) (contracts/libs/SafeMath.sol#20-29) is never used and should be removed
Remove unused functions.
Additional information: link
Reflecto.swapThreshold (contracts/Reflecto.sol#82) 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
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
Function IDEXRouter.WETH() (contracts/libs/IDEX.sol#7) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Reentrancy in Reflecto.swapBack() (contracts/Reflecto.sol#388-447):
External calls:
- address(marketingFeeReceiver).transfer(amountBNBMarketing) (contracts/Reflecto.sol#433)
- address(gasWalletFeeReceiver).transfer(amountBNBGasWallet) (contracts/Reflecto.sol#434)
External calls sending eth:
- distributor.deposit{value: amountBNBReflection}() (contracts/Reflecto.sol#432)
- address(marketingFeeReceiver).transfer(amountBNBMarketing) (contracts/Reflecto.sol#433)
- address(gasWalletFeeReceiver).transfer(amountBNBGasWallet) (contracts/Reflecto.sol#434)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,autoLiquidityReceiver,block.timestamp) (contracts/Reflecto.sol#437-444)
Event emitted after the call(s):
- AutoLiquify(amountBNBLiquidity,amountToLiquify) (contracts/Reflecto.sol#445)
Apply the check-effects-interactions pattern.
Additional information: link
Variable IDEXRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (contracts/libs/IDEX.sol#12) is too similar to IDEXRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (contracts/libs/IDEX.sol#13)
Prevent variables from having similar names.
Additional information: link
Reflecto.slitherConstructorVariables() (contracts/Reflecto.sol#11-701) uses literals with too many digits:
- distributorGas = 500000 (contracts/Reflecto.sol#73)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
Reflecto.DEAD_NON_CHECKSUM (contracts/Reflecto.sol#20) is never used in Reflecto (contracts/Reflecto.sol#11-701)
Remove unused state variables.
Additional information: link
Reflecto._totalSupply (contracts/Reflecto.sol#26) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
transferOwnership(address) should be declared external:
- Auth.transferOwnership(address) (contracts/libs/Auth.sol#60-64)
Use the external attribute for functions never called from the contract.
Additional information: link
Young tokens have high risks of price dump / death
Young tokens have high risks of scam / price dump / death
Young tokens have high risks of scam / price dump / death
Young tokens have high risks of price dump / death
Token has relatively low CoinGecko rank
Token has relatively low CoinMarketCap rank
Twitter account link seems to be invalid
Unable to find Youtube account