$BEACH is an innovative DeFi token for people who believe doing well should not cost us the planet. Join us in our mission to Do Good With Every Transaction.
BEACH.distributeETH(uint256) (#628-631) sends eth to arbitrary user
Dangerous calls:
- _development.transfer(amount.div(10)) (#629)
- _boost.transfer(amount.div(2)) (#630)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in BEACH._transfer(address,address,uint256) (#461-522):
External calls:
- swapETHfortargetToken(address(this).balance) (#491)
- pancakeV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(ethAmount,path,address(boostFund),block.timestamp) (#625)
- swapTokensForEth(contractTokenBalance) (#507)
- pancakeV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#616)
External calls sending eth:
- swapETHfortargetToken(address(this).balance) (#491)
- pancakeV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(ethAmount,path,address(boostFund),block.timestamp) (#625)
- distributeETH(ethToDistribute) (#511)
- _development.transfer(amount.div(10)) (#629)
- _boost.transfer(amount.div(2)) (#630)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#520)
- _rOwned[address(this)] = _rOwned[address(this)].add(rTeam) (#558)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#548)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#549)
- _tokenTransfer(from,to,amount,takeFee) (#520)
- _rTotal = _rTotal.sub(rFee) (#573)
- _rTotal = _rTotal.sub(rBurn) (#567)
- _tokenTransfer(from,to,amount,takeFee) (#520)
- _tTotal = _tTotal.sub(tBurn) (#566)
Apply the check-effects-interactions pattern.
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.
BEACH._BEACHEthBurn(uint256) (#561-570) performs a multiplication on the result of a division:
-tBurn = amount.mul(_BEACHBurn).div(100) (#564)
-rBurn = tBurn.mul(currentRate) (#565)
Consider ordering multiplication before division.
Additional information: link
BEACH.addLiquidity() (#396-409) ignores return value by IBEP20(pancakeswapPair).approve(address(pancakeV2Router),type()(uint256).max) (#408)
Ensure that all the return values of the function calls are used.
Additional information: link
BEACH._approve(address,address,uint256).owner (#454) shadows:
- Ownable.owner() (#72-74) (function)
Rename the local variables that shadow another component.
Additional information: link
BEACH.setTargetAddress(address).target_adr (#340) lacks a zero-check on :
- targetToken = target_adr (#341)
Check that the address is not zero.
Additional information: link
Reentrancy in BEACH.transferFrom(address,address,uint256) (#373-377):
External calls:
- _transfer(sender,recipient,amount) (#374)
- pancakeV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(ethAmount,path,address(boostFund),block.timestamp) (#625)
- pancakeV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#616)
External calls sending eth:
- _transfer(sender,recipient,amount) (#374)
- _development.transfer(amount.div(10)) (#629)
- _boost.transfer(amount.div(2)) (#630)
- pancakeV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(ethAmount,path,address(boostFund),block.timestamp) (#625)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,BEP20: transfer amount exceeds allowance)) (#375)
- _allowances[owner][spender] = amount (#457)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in BEACH.transferFrom(address,address,uint256) (#373-377):
External calls:
- _transfer(sender,recipient,amount) (#374)
- pancakeV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(ethAmount,path,address(boostFund),block.timestamp) (#625)
- pancakeV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#616)
External calls sending eth:
- _transfer(sender,recipient,amount) (#374)
- _development.transfer(amount.div(10)) (#629)
- _boost.transfer(amount.div(2)) (#630)
- pancakeV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(ethAmount,path,address(boostFund),block.timestamp) (#625)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#458)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,BEP20: transfer amount exceeds allowance)) (#375)
Apply the check-effects-interactions pattern.
Additional information: link
BEACH._transfer(address,address,uint256) (#461-522) uses timestamp for comparisons
Dangerous comparisons:
- buyLimitEnd > block.timestamp (#480)
- require(bool,string)(cooldown[to].buy < block.timestamp,Your buy cooldown has not expired.) (#482)
- require(bool,string)(cooldown[from].sell < block.timestamp,Your sell cooldown has not expired.) (#499)
Avoid relying on block.timestamp.
Additional information: link
BEACH._maxTxAmount (#266) is set pre-construction with a non-constant function or state variable:
- _tTotal
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.0<0.8.0 (#2) is too complex
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
Variable BEACH._BEACHBurn (#269) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "restoreAllFee (#521)" inBEACH (#245-635)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Reentrancy in BEACH.transferFrom(address,address,uint256) (#373-377):
External calls:
- _transfer(sender,recipient,amount) (#374)
- _development.transfer(amount.div(10)) (#629)
- _boost.transfer(amount.div(2)) (#630)
External calls sending eth:
- _transfer(sender,recipient,amount) (#374)
- _development.transfer(amount.div(10)) (#629)
- _boost.transfer(amount.div(2)) (#630)
- pancakeV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(ethAmount,path,address(boostFund),block.timestamp) (#625)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,BEP20: transfer amount exceeds allowance)) (#375)
- _allowances[owner][spender] = amount (#457)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#458)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,BEP20: transfer amount exceeds allowance)) (#375)
Apply the check-effects-interactions pattern.
Additional information: link
Variable BEACH._getValues(uint256,uint256).rTransferAmount (#580) is too similar to BEACH._getTValues(uint256,uint256,uint256,uint256).tTransferAmount (#587)
Prevent variables from having similar names.
Additional information: link
BEACH.slitherConstructorVariables() (#245-635) uses literals with too many digits:
- _tTotal = 100000000000000000 * 10 ** 9 (#255)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
BEACH._tOwned (#283) is never used in BEACH (#245-635)
Remove unused state variables.
Additional information: link
BEACH.boostFund (#279) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
amountInPool() should be declared external:
- BEACH.amountInPool() (#444-446)
Use the external attribute for functions never called from the contract.
Additional information: link
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
Young tokens have high risks of price dump / death
Token has relatively low CoinMarketCap rank
Twitter account link seems to be invalid
Unable to find Discord account