ELEPHANT.MONEY implements a voluntary, sustainable, and permissionless global economic engine on top of a collection of blue chip assets, a core rewards token (ELEPHANT), and a stable coin (TRUNK). The ELEPHANT.MONEY protocol is a 100% complete and finished product and provides yield and price appreciation in any market cycle.
Elephant.addLiquidity(uint256,uint256) (#1360-1373) sends eth to arbitrary user
Dangerous calls:
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in Elephant._transfer(address,address,uint256) (#1279-1317):
External calls:
- swapAndLiquify(contractTokenBalance) (#1304)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#1304)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#1316)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#1235)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1407)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1398)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1399)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1418)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1169)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1419)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1409)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1171)
- _tokenTransfer(from,to,amount,takeFee) (#1316)
- _rTotal = _rTotal.sub(rFee) (#1190)
- _tokenTransfer(from,to,amount,takeFee) (#1316)
- _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (#1237)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1417)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1168)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#1408)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#1170)
Reentrancy in Elephant.launch() (#1005-1047):
External calls:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
External calls sending eth:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
State variables written after the call(s):
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- _liquidityFee = _previousLiquidityFee (#1264)
- _liquidityFee = 0 (#1259)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- _previousLiquidityFee = _liquidityFee (#1256)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- _previousTaxFee = _taxFee (#1255)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#1235)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1407)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1398)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1399)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1418)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1169)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1419)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1409)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1171)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- _rTotal = _rTotal.sub(rFee) (#1190)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- _tFeeTotal = _tFeeTotal.add(tFee) (#1191)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (#1237)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1417)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1168)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#1408)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#1170)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- _taxFee = _previousTaxFee (#1263)
- _taxFee = 0 (#1258)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- inSwapAndLiquify = true (#957)
- inSwapAndLiquify = false (#959)
Reentrancy in Elephant.launch() (#1005-1047):
External calls:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
External calls sending eth:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
State variables written after the call(s):
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- _liquidityFee = _previousLiquidityFee (#1264)
- _liquidityFee = 0 (#1259)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- _previousLiquidityFee = _liquidityFee (#1256)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- _previousTaxFee = _taxFee (#1255)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#1235)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1407)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1398)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1399)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1418)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1169)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1419)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1409)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1171)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- _rTotal = _rTotal.sub(rFee) (#1190)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- _tFeeTotal = _tFeeTotal.add(tFee) (#1191)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (#1237)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1417)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1168)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#1408)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#1170)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- _taxFee = _previousTaxFee (#1263)
- _taxFee = 0 (#1258)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- inSwapAndLiquify = true (#957)
- inSwapAndLiquify = false (#959)
Reentrancy in Elephant.launch() (#1005-1047):
External calls:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- liquidityDrive.end() (#1034)
- addLiquidity(_tokenLiquidity,_ethBalance) (#1040)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
External calls sending eth:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- addLiquidity(_tokenLiquidity,_ethBalance) (#1040)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
State variables written after the call(s):
- launched = true (#1043)
- swapAndLiquifyEnabled = true (#1044)
Apply the check-effects-interactions pattern.
Additional information: link
ElephantGraveyard.rebalance() (#727-748) ignores return value by token.transfer(address(token),airdrop) (#740)
ElephantLiquidityDrive.claimTokens() (#846-867) ignores return value by token.transfer(_sender,tokens) (#859)
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 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)
ElephantLiquidityDrive.notLaunched() (#797-800) uses a dangerous strict equality:
- require(bool,string)(endedOn == 0,Token already succcessfully launched) (#798)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
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.
Pragma version^0.6.8 (#21) 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
Redundant expression "this (#257)" inContext (#251-260)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Elephant.slitherConstructorVariables() (#899-1426) uses literals with too many digits:
- _tTotal = 1000000000 * 10 ** 6 * 10 ** 9 (#918)
Elephant.slitherConstructorVariables() (#899-1426) uses literals with too many digits:
- numTokensSellToAddToLiquidity = 500000 * 10 ** 6 * 10 ** 9 (#946)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
ElephantLiquidityDrive.availableOf(address) (#887-890) performs a multiplication on the result of a division:
-totalTokens = token.totalSupply().mul(estimatedPercentageOfSupply).div(100) (#888)
-totalTokens.mul(_ethDonated[from]).div(totalEthDonated) (#889)
Elephant.launch() (#1005-1047) performs a multiplication on the result of a division:
-_share = _totalTokens.div(100) (#1017)
-_graveyardShare = _share.mul(49) (#1018)
Elephant.launch() (#1005-1047) performs a multiplication on the result of a division:
-_share = _totalTokens.div(100) (#1017)
-_tokenLiquidity = _share.mul(25) (#1019)
Consider ordering multiplication before division.
Additional information: link
Elephant.addLiquidity(uint256,uint256) (#1360-1373) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
Ensure that all the return values of the function calls are used.
Additional information: link
Elephant.constructor(string,string,address,uint256).name (#962) shadows:
- Elephant.name() (#1058-1060) (function)
Elephant.constructor(string,string,address,uint256).symbol (#962) shadows:
- Elephant.symbol() (#1062-1064) (function)
Elephant.allowance(address,address).owner (#1084) shadows:
- Ownable.owner() (#432-434) (function)
Elephant._approve(address,address,uint256).owner (#1271) shadows:
- Ownable.owner() (#432-434) (function)
Rename the local variables that shadow another component.
Additional information: link
Reentrancy in Elephant._transfer(address,address,uint256) (#1279-1317):
External calls:
- swapAndLiquify(contractTokenBalance) (#1304)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#1304)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#1316)
- _liquidityFee = _previousLiquidityFee (#1264)
- _liquidityFee = 0 (#1259)
- _tokenTransfer(from,to,amount,takeFee) (#1316)
- _previousLiquidityFee = _liquidityFee (#1256)
- _tokenTransfer(from,to,amount,takeFee) (#1316)
- _previousTaxFee = _taxFee (#1255)
- _tokenTransfer(from,to,amount,takeFee) (#1316)
- _tFeeTotal = _tFeeTotal.add(tFee) (#1191)
- _tokenTransfer(from,to,amount,takeFee) (#1316)
- _taxFee = _previousTaxFee (#1263)
- _taxFee = 0 (#1258)
Reentrancy in ElephantLiquidityDrive.claimTokens() (#846-867):
External calls:
- token.transfer(_sender,tokens) (#859)
State variables written after the call(s):
- totalClaimedTokens = totalClaimedTokens.add(tokens) (#863)
- totalTxs = totalTxs.add(1) (#865)
Reentrancy in Elephant.constructor(string,string,address,uint256) (#962-1000):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#977-978)
State variables written after the call(s):
- _campaignPeriod = campaignPeriod (#985)
- _isExcludedFromFee[owner()] = true (#991)
- _isExcludedFromFee[address(this)] = true (#992)
- _isExcludedFromFee[address(liquidityDrive)] = true (#993)
- graveyard = new ElephantGraveyard() (#988)
- liquidityDrive = new ElephantLiquidityDrive(25) (#984)
- startedOn = block.timestamp (#999)
- uniswapV2Router = _uniswapV2Router (#981)
Reentrancy in Elephant.launch() (#1005-1047):
External calls:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
External calls sending eth:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
State variables written after the call(s):
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- _allowances[owner][spender] = amount (#1275)
Reentrancy in Elephant.launch() (#1005-1047):
External calls:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
External calls sending eth:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
State variables written after the call(s):
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- _allowances[owner][spender] = amount (#1275)
Reentrancy in Elephant.launch() (#1005-1047):
External calls:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- liquidityDrive.end() (#1034)
- addLiquidity(_tokenLiquidity,_ethBalance) (#1040)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
External calls sending eth:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- addLiquidity(_tokenLiquidity,_ethBalance) (#1040)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
State variables written after the call(s):
- addLiquidity(_tokenLiquidity,_ethBalance) (#1040)
- _allowances[owner][spender] = amount (#1275)
Reentrancy in ElephantGraveyard.rebalance() (#727-748):
External calls:
- token.transfer(address(token),airdrop) (#740)
State variables written after the call(s):
- lastRebalance = block.timestamp (#742)
Reentrancy in Elephant.swapAndLiquify(uint256) (#1319-1340):
External calls:
- swapTokensForEth(half) (#1331)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- addLiquidity(otherHalf,newBalance) (#1337)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1337)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
State variables written after the call(s):
- addLiquidity(otherHalf,newBalance) (#1337)
- _allowances[owner][spender] = amount (#1275)
Reentrancy in Elephant.transferFrom(address,address,uint256) (#1093-1097):
External calls:
- _transfer(sender,recipient,amount) (#1094)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
External calls sending eth:
- _transfer(sender,recipient,amount) (#1094)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#1095)
- _allowances[owner][spender] = amount (#1275)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in Elephant._transfer(address,address,uint256) (#1279-1317):
External calls:
- swapAndLiquify(contractTokenBalance) (#1304)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#1304)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
Event emitted after the call(s):
- Transfer(sender,recipient,tTransferAmount) (#1402)
- _tokenTransfer(from,to,amount,takeFee) (#1316)
- Transfer(sender,recipient,tTransferAmount) (#1412)
- _tokenTransfer(from,to,amount,takeFee) (#1316)
- Transfer(sender,recipient,tTransferAmount) (#1422)
- _tokenTransfer(from,to,amount,takeFee) (#1316)
- Transfer(sender,recipient,tTransferAmount) (#1174)
- _tokenTransfer(from,to,amount,takeFee) (#1316)
Reentrancy in ElephantLiquidityDrive.claimTokens() (#846-867):
External calls:
- token.transfer(_sender,tokens) (#859)
Event emitted after the call(s):
- TokenClaim(_sender,tokens) (#861)
Reentrancy in Elephant.constructor(string,string,address,uint256) (#962-1000):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#977-978)
Event emitted after the call(s):
- Transfer(address(0),address(this),_tTotal) (#996)
Reentrancy in Elephant.launch() (#1005-1047):
External calls:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
External calls sending eth:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#1276)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- SwapAndLiquify(half,newBalance,otherHalf) (#1339)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- Transfer(sender,recipient,tTransferAmount) (#1402)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- Transfer(sender,recipient,tTransferAmount) (#1422)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- Transfer(sender,recipient,tTransferAmount) (#1412)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- Transfer(sender,recipient,tTransferAmount) (#1174)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
Reentrancy in Elephant.launch() (#1005-1047):
External calls:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
External calls sending eth:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#1276)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- SwapAndLiquify(half,newBalance,otherHalf) (#1339)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- Transfer(sender,recipient,tTransferAmount) (#1402)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- Transfer(sender,recipient,tTransferAmount) (#1422)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- Transfer(sender,recipient,tTransferAmount) (#1412)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- Transfer(sender,recipient,tTransferAmount) (#1174)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
Reentrancy in Elephant.launch() (#1005-1047):
External calls:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- liquidityDrive.end() (#1034)
- addLiquidity(_tokenLiquidity,_ethBalance) (#1040)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
External calls sending eth:
- _transfer(address(this),owner(),_share) (#1026)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- _transfer(address(this),address(graveyard),_graveyardShare) (#1028)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- _transfer(address(this),address(liquidityDrive),_driveTokens) (#1031)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- addLiquidity(_tokenLiquidity,_ethBalance) (#1040)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#1276)
- addLiquidity(_tokenLiquidity,_ethBalance) (#1040)
Reentrancy in ElephantGraveyard.rebalance() (#727-748):
External calls:
- token.transfer(address(token),airdrop) (#740)
Event emitted after the call(s):
- Rebalance(airdrop) (#744)
Reentrancy in Elephant.swapAndLiquify(uint256) (#1319-1340):
External calls:
- swapTokensForEth(half) (#1331)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
- addLiquidity(otherHalf,newBalance) (#1337)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1337)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#1276)
- addLiquidity(otherHalf,newBalance) (#1337)
- SwapAndLiquify(half,newBalance,otherHalf) (#1339)
Reentrancy in Elephant.transferFrom(address,address,uint256) (#1093-1097):
External calls:
- _transfer(sender,recipient,amount) (#1094)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1351-1357)
External calls sending eth:
- _transfer(sender,recipient,amount) (#1094)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,address(this),block.timestamp) (#1365-1372)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#1276)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#1095)
Apply the check-effects-interactions pattern.
Additional information: link
Ownable.unlock() (#479-484) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(now > _lockTime,Contract is locked until 7 days) (#481)
ElephantLiquidityDrive.claimTokens() (#846-867) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(endedOn > 0,Token not launched yet) (#847)
Elephant.launch() (#1005-1047) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(lapsed > _campaignPeriod,After campaign period has ended anyone can launch the token. Try later) (#1011)
Elephant.ready() (#1050-1055) uses timestamp for comparisons
Dangerous comparisons:
- lapsed > _campaignPeriod (#1054)
Avoid relying on block.timestamp.
Additional information: link
Address.isContract(address) (#284-293) uses assembly
- INLINE ASM (#291)
Address._functionCallWithValue(address,bytes,uint256,string) (#377-398) uses assembly
- INLINE ASM (#390-393)
Do not use evm assembly.
Additional information: link
Address._functionCallWithValue(address,bytes,uint256,string) (#377-398) is never used and should be removed
Address.functionCall(address,bytes) (#337-339) is never used and should be removed
Address.functionCall(address,bytes,string) (#347-349) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#362-364) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#372-375) is never used and should be removed
Address.isContract(address) (#284-293) is never used and should be removed
Address.sendValue(address,uint256) (#311-317) is never used and should be removed
Context._msgData() (#256-259) is never used and should be removed
SafeMath.mod(uint256,uint256) (#229-231) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#245-248) is never used and should be removed
Remove unused functions.
Additional information: link
Elephant._rTotal (#919) is set pre-construction with a non-constant function or state variable:
- (MAX - (MAX % _tTotal))
Elephant._previousTaxFee (#928) is set pre-construction with a non-constant function or state variable:
- _taxFee
Elephant._previousLiquidityFee (#931) is set pre-construction with a non-constant function or state variable:
- _liquidityFee
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
Low level call in Address.sendValue(address,uint256) (#311-317):
- (success) = recipient.call{value: amount}() (#315)
Low level call in Address._functionCallWithValue(address,bytes,uint256,string) (#377-398):
- (success,returndata) = target.call{value: weiValue}(data) (#381)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (#523) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#524) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#541) is not in mixedCase
Function IUniswapV2Router01.WETH() (#563) is not in mixedCase
Parameter Elephant.calculateTaxFee(uint256)._amount (#1240) is not in mixedCase
Parameter Elephant.calculateLiquidityFee(uint256)._amount (#1246) is not in mixedCase
Variable Elephant._taxFee (#927) is not in mixedCase
Variable Elephant._liquidityFee (#930) is not in mixedCase
Variable Elephant._campaignPeriod (#934) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#568) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#569)
Variable Elephant._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#1211) is too similar to Elephant._transferBothExcluded(address,address,uint256).tTransferAmount (#1167)
Variable Elephant._transferFromExcluded(address,address,uint256).rTransferAmount (#1416) is too similar to Elephant._transferFromExcluded(address,address,uint256).tTransferAmount (#1416)
Variable Elephant._transferFromExcluded(address,address,uint256).rTransferAmount (#1416) is too similar to Elephant._transferBothExcluded(address,address,uint256).tTransferAmount (#1167)
Variable Elephant._transferStandard(address,address,uint256).rTransferAmount (#1397) is too similar to Elephant._transferStandard(address,address,uint256).tTransferAmount (#1397)
Variable Elephant._getValues(uint256).rTransferAmount (#1196) is too similar to Elephant._transferStandard(address,address,uint256).tTransferAmount (#1397)
Variable Elephant._transferBothExcluded(address,address,uint256).rTransferAmount (#1167) is too similar to Elephant._transferBothExcluded(address,address,uint256).tTransferAmount (#1167)
Variable Elephant._transferToExcluded(address,address,uint256).rTransferAmount (#1406) is too similar to Elephant._getTValues(uint256).tTransferAmount (#1203)
Variable Elephant._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#1211) is too similar to Elephant._transferToExcluded(address,address,uint256).tTransferAmount (#1406)
Variable Elephant._transferStandard(address,address,uint256).rTransferAmount (#1397) is too similar to Elephant._getTValues(uint256).tTransferAmount (#1203)
Variable Elephant._getValues(uint256).rTransferAmount (#1196) is too similar to Elephant._getTValues(uint256).tTransferAmount (#1203)
Variable Elephant._transferFromExcluded(address,address,uint256).rTransferAmount (#1416) is too similar to Elephant._transferToExcluded(address,address,uint256).tTransferAmount (#1406)
Variable Elephant._transferBothExcluded(address,address,uint256).rTransferAmount (#1167) is too similar to Elephant._transferToExcluded(address,address,uint256).tTransferAmount (#1406)
Variable Elephant._transferFromExcluded(address,address,uint256).rTransferAmount (#1416) is too similar to Elephant._transferStandard(address,address,uint256).tTransferAmount (#1397)
Variable Elephant._transferStandard(address,address,uint256).rTransferAmount (#1397) is too similar to Elephant._transferBothExcluded(address,address,uint256).tTransferAmount (#1167)
Variable Elephant._getValues(uint256).rTransferAmount (#1196) is too similar to Elephant._transferBothExcluded(address,address,uint256).tTransferAmount (#1167)
Variable Elephant._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#1211) is too similar to Elephant._transferStandard(address,address,uint256).tTransferAmount (#1397)
Variable Elephant._transferFromExcluded(address,address,uint256).rTransferAmount (#1416) is too similar to Elephant._getTValues(uint256).tTransferAmount (#1203)
Variable Elephant._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#1211) is too similar to Elephant._getTValues(uint256).tTransferAmount (#1203)
Variable Elephant._transferStandard(address,address,uint256).rTransferAmount (#1397) is too similar to Elephant._transferToExcluded(address,address,uint256).tTransferAmount (#1406)
Variable Elephant._transferToExcluded(address,address,uint256).rTransferAmount (#1406) is too similar to Elephant._transferToExcluded(address,address,uint256).tTransferAmount (#1406)
Variable Elephant._transferBothExcluded(address,address,uint256).rTransferAmount (#1167) is too similar to Elephant._getTValues(uint256).tTransferAmount (#1203)
Variable Elephant._getValues(uint256).rTransferAmount (#1196) is too similar to Elephant._transferToExcluded(address,address,uint256).tTransferAmount (#1406)
Variable Elephant.reflectionFromToken(uint256,bool).rTransferAmount (#1132) is too similar to Elephant._transferBothExcluded(address,address,uint256).tTransferAmount (#1167)
Variable Elephant.reflectionFromToken(uint256,bool).rTransferAmount (#1132) is too similar to Elephant._transferStandard(address,address,uint256).tTransferAmount (#1397)
Variable Elephant._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#1211) is too similar to Elephant._transferFromExcluded(address,address,uint256).tTransferAmount (#1416)
Variable Elephant._getValues(uint256).rTransferAmount (#1196) is too similar to Elephant._transferFromExcluded(address,address,uint256).tTransferAmount (#1416)
Variable Elephant.reflectionFromToken(uint256,bool).rTransferAmount (#1132) is too similar to Elephant._getValues(uint256).tTransferAmount (#1195)
Variable Elephant._transferStandard(address,address,uint256).rTransferAmount (#1397) is too similar to Elephant._getValues(uint256).tTransferAmount (#1195)
Variable Elephant._transferBothExcluded(address,address,uint256).rTransferAmount (#1167) is too similar to Elephant._transferFromExcluded(address,address,uint256).tTransferAmount (#1416)
Variable Elephant.reflectionFromToken(uint256,bool).rTransferAmount (#1132) is too similar to Elephant._transferToExcluded(address,address,uint256).tTransferAmount (#1406)
Variable Elephant._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#1211) is too similar to Elephant._getValues(uint256).tTransferAmount (#1195)
Variable Elephant._transferToExcluded(address,address,uint256).rTransferAmount (#1406) is too similar to Elephant._transferFromExcluded(address,address,uint256).tTransferAmount (#1416)
Variable Elephant._transferBothExcluded(address,address,uint256).rTransferAmount (#1167) is too similar to Elephant._transferStandard(address,address,uint256).tTransferAmount (#1397)
Variable Elephant._getValues(uint256).rTransferAmount (#1196) is too similar to Elephant._getValues(uint256).tTransferAmount (#1195)
Variable Elephant._transferToExcluded(address,address,uint256).rTransferAmount (#1406) is too similar to Elephant._transferBothExcluded(address,address,uint256).tTransferAmount (#1167)
Variable Elephant._transferFromExcluded(address,address,uint256).rTransferAmount (#1416) is too similar to Elephant._getValues(uint256).tTransferAmount (#1195)
Variable Elephant.reflectionFromToken(uint256,bool).rTransferAmount (#1132) is too similar to Elephant._getTValues(uint256).tTransferAmount (#1203)
Variable Elephant._transferBothExcluded(address,address,uint256).rTransferAmount (#1167) is too similar to Elephant._getValues(uint256).tTransferAmount (#1195)
Variable Elephant._transferToExcluded(address,address,uint256).rTransferAmount (#1406) is too similar to Elephant._transferStandard(address,address,uint256).tTransferAmount (#1397)
Variable Elephant.reflectionFromToken(uint256,bool).rTransferAmount (#1132) is too similar to Elephant._transferFromExcluded(address,address,uint256).tTransferAmount (#1416)
Variable Elephant._transferStandard(address,address,uint256).rTransferAmount (#1397) is too similar to Elephant._transferFromExcluded(address,address,uint256).tTransferAmount (#1416)
Variable Elephant._transferToExcluded(address,address,uint256).rTransferAmount (#1406) is too similar to Elephant._getValues(uint256).tTransferAmount (#1195)
Prevent variables from having similar names.
Additional information: link
Elephant._decimals (#924) should be constant
Elephant._tTotal (#918) should be constant
Elephant.numTokensSellToAddToLiquidity (#946) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#451-454)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#460-464)
getUnlockTime() should be declared external:
- Ownable.getUnlockTime() (#466-468)
lock(uint256) should be declared external:
- Ownable.lock(uint256) (#471-476)
unlock() should be declared external:
- Ownable.unlock() (#479-484)
donate() should be declared external:
- ElephantLiquidityDrive.donate() (#824-844)
donationsOf(address) should be declared external:
- ElephantLiquidityDrive.donationsOf(address) (#883-885)
claimedOf(address) should be declared external:
- ElephantLiquidityDrive.claimedOf(address) (#892-894)
launch() should be declared external:
- Elephant.launch() (#1005-1047)
ready() should be declared external:
- Elephant.ready() (#1050-1055)
name() should be declared external:
- Elephant.name() (#1058-1060)
symbol() should be declared external:
- Elephant.symbol() (#1062-1064)
decimals() should be declared external:
- Elephant.decimals() (#1066-1068)
totalSupply() should be declared external:
- Elephant.totalSupply() (#1070-1072)
transfer(address,uint256) should be declared external:
- Elephant.transfer(address,uint256) (#1079-1082)
allowance(address,address) should be declared external:
- Elephant.allowance(address,address) (#1084-1086)
approve(address,uint256) should be declared external:
- Elephant.approve(address,uint256) (#1088-1091)
transferFrom(address,address,uint256) should be declared external:
- Elephant.transferFrom(address,address,uint256) (#1093-1097)
increaseAllowance(address,uint256) should be declared external:
- Elephant.increaseAllowance(address,uint256) (#1099-1102)
decreaseAllowance(address,uint256) should be declared external:
- Elephant.decreaseAllowance(address,uint256) (#1104-1107)
isExcludedFromReward(address) should be declared external:
- Elephant.isExcludedFromReward(address) (#1109-1111)
totalFees() should be declared external:
- Elephant.totalFees() (#1113-1115)
reflect(uint256) should be declared external:
- Elephant.reflect(uint256) (#1117-1124)
reflectionFromToken(uint256,bool) should be declared external:
- Elephant.reflectionFromToken(uint256,bool) (#1126-1135)
excludeFromReward(address) should be declared external:
- Elephant.excludeFromReward(address) (#1143-1151)
excludeFromFee(address) should be declared external:
- Elephant.excludeFromFee(address) (#1177-1179)
includeInFee(address) should be declared external:
- Elephant.includeInFee(address) (#1181-1183)
isExcludedFromFee(address) should be declared external:
- Elephant.isExcludedFromFee(address) (#1267-1269)
Use the external attribute for functions never called from the contract.
Additional information: link
Elephant.includeInReward(address) (#1153-1164) has costly operations inside a loop:
- _excluded.pop() (#1160)
Use a local variable to hold the loop computation result.
Additional information: link
Swap operations require suspiciously high gas. Contract logic is complex and may disguise some form of scam.
Token is deployed only at one blockchain
Contract has 10% buy tax and 10% sell tax.
Taxes are low but contract ownership is not renounced. Token has a high risk of becoming a honeypot.
Unable to find token on CoinHunt
Additional information: link
Unable to find code repository for the project
Token has relatively low CoinGecko rank