Salvation is a DeFi platform and launchpad built from the ground up to build trustworthy projects
by providing strategic support and a multi-tiered infrastructure
that incentivizes transparency.
Salvation.addLiquidity(uint256,uint256) (#1363-1376) sends eth to arbitrary user
Dangerous calls:
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityAddress,block.timestamp) (#1368-1375)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in Salvation._transfer(address,address,uint256) (#1271-1320):
External calls:
- swapAndLiquify(contractTokenBalance) (#1307)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityAddress,block.timestamp) (#1368-1375)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1354-1360)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#1307)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityAddress,block.timestamp) (#1368-1375)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#1319)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#1219)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1428)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1409)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1410)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1127)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1449)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1450)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1430)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1129)
- _tokenTransfer(from,to,amount,takeFee) (#1319)
- _rTotal = _rTotal.sub(rFee).sub(rBurn) (#1151)
- _tokenTransfer(from,to,amount,takeFee) (#1319)
- _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (#1221)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1448)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1126)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#1429)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#1128)
- _tokenTransfer(from,to,amount,takeFee) (#1319)
- _tTotal = _tTotal.sub(tBurn) (#1154)
Apply the check-effects-interactions pattern.
Additional information: link
Unable to verify that contract auditor is trusted: Certik, Quantstamp, Hacken, Solidity, Paladinsec, Openzeppelin, Verichains
Salvation.proposeBurnTax(uint256) (#1461-1469) contains a tautology or contradiction:
- require(bool,string)(_tax >= 0 && _tax <= 1500,Must be a number between 0 and 1500) (#1463)
Salvation.proposeHoldersTax(uint256) (#1471-1482) contains a tautology or contradiction:
- require(bool,string)(_tax >= 0 && _tax <= 1500,Must be a number between 0 and 1500) (#1473)
Salvation.proposeLiquidityTax(uint256) (#1484-1495) contains a tautology or contradiction:
- require(bool,string)(_tax >= 0 && _tax <= 1500,Must be a number between 0 and 1500) (#1486)
Salvation._setBurnFee(uint256) (#1622-1631) contains a tautology or contradiction:
- require(bool,string)(burnFee >= 0 && burnFee <= 1500,Must be a number between 0 and 1500) (#1623)
Salvation.setTaxFee(uint256) (#1633-1642) contains a tautology or contradiction:
- require(bool,string)(taxFee >= 0 && taxFee <= 1500,Must be a number between 0 and 1500) (#1634)
Salvation.setLiquidityFee(uint256) (#1644-1653) contains a tautology or contradiction:
- require(bool,string)(liquidityFee >= 0 && liquidityFee <= 1500,Must be a number between 0 and 1500) (#1645)
Fix the incorrect comparison by changing the value type or the comparison.
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.
Contract name (Salvation.Finance) contains non-alphanumeric characters.
Not a direct threat, but may indicate unreliable intentions of developer. Non-alphanumeric chars (,.;!#*&") are extremely rare among low risk tokens.
Salvation.addLiquidity(uint256,uint256) (#1363-1376) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityAddress,block.timestamp) (#1368-1375)
Ensure that all the return values of the function calls are used.
Additional information: link
Salvation.allowance(address,address).owner (#1015) shadows:
- Ownable.owner() (#458-460) (function)
Salvation._approve(address,address,uint256).owner (#1259) shadows:
- Ownable.owner() (#458-460) (function)
Rename the local variables that shadow another component.
Additional information: link
Salvation.setPair(address)._pairAddress (#1581) lacks a zero-check on :
- uniswapV2Pair = _pairAddress (#1582)
Salvation.setStrategist(address)._strategistOnly (#1591) lacks a zero-check on :
- strategistOnly = _strategistOnly (#1592)
Salvation.transferBNB(address,uint256).recipient (#1660) lacks a zero-check on :
- (success) = recipient.call{value: amount}() (#1664)
Check that the address is not zero.
Additional information: link
Reentrancy in Salvation._transfer(address,address,uint256) (#1271-1320):
External calls:
- swapAndLiquify(contractTokenBalance) (#1307)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityAddress,block.timestamp) (#1368-1375)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1354-1360)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#1307)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityAddress,block.timestamp) (#1368-1375)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#1319)
- _burnFee = _previousBurnFee (#1250)
- _burnFee = 0 (#1244)
- _tokenTransfer(from,to,amount,takeFee) (#1319)
- _liquidityFee = _previousLiquidityFee (#1251)
- _liquidityFee = 0 (#1245)
- _tokenTransfer(from,to,amount,takeFee) (#1319)
- _previousBurnFee = _burnFee (#1240)
- _tokenTransfer(from,to,amount,takeFee) (#1319)
- _previousLiquidityFee = _liquidityFee (#1241)
- _tokenTransfer(from,to,amount,takeFee) (#1319)
- _previousTaxFee = _taxFee (#1239)
- _tokenTransfer(from,to,amount,takeFee) (#1319)
- _tBurnTotal = _tBurnTotal.add(tBurn) (#1152)
- _tokenTransfer(from,to,amount,takeFee) (#1319)
- _tFeeTotal = _tFeeTotal.add(tFee) (#1153)
- _tokenTransfer(from,to,amount,takeFee) (#1319)
- _taxFee = _previousTaxFee (#1249)
- _taxFee = 0 (#1243)
Reentrancy in Salvation.swapAndLiquify(uint256) (#1322-1343):
External calls:
- swapTokensForEth(half) (#1334)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1354-1360)
- addLiquidity(otherHalf,newBalance) (#1340)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityAddress,block.timestamp) (#1368-1375)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1340)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityAddress,block.timestamp) (#1368-1375)
State variables written after the call(s):
- addLiquidity(otherHalf,newBalance) (#1340)
- _allowances[owner][spender] = amount (#1267)
Reentrancy in Salvation.transferFrom(address,address,uint256) (#1026-1037):
External calls:
- _transfer(sender,recipient,amount) (#1027)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityAddress,block.timestamp) (#1368-1375)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1354-1360)
External calls sending eth:
- _transfer(sender,recipient,amount) (#1027)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityAddress,block.timestamp) (#1368-1375)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#1028-1035)
- _allowances[owner][spender] = amount (#1267)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in Salvation._transfer(address,address,uint256) (#1271-1320):
External calls:
- swapAndLiquify(contractTokenBalance) (#1307)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityAddress,block.timestamp) (#1368-1375)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1354-1360)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#1307)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityAddress,block.timestamp) (#1368-1375)
Event emitted after the call(s):
- Transfer(sender,recipient,tTransferAmount) (#1413)
- _tokenTransfer(from,to,amount,takeFee) (#1319)
- Transfer(sender,recipient,tTransferAmount) (#1453)
- _tokenTransfer(from,to,amount,takeFee) (#1319)
- Transfer(sender,recipient,tTransferAmount) (#1433)
- _tokenTransfer(from,to,amount,takeFee) (#1319)
- Transfer(sender,recipient,tTransferAmount) (#1132)
- _tokenTransfer(from,to,amount,takeFee) (#1319)
Reentrancy in Salvation.swapAndLiquify(uint256) (#1322-1343):
External calls:
- swapTokensForEth(half) (#1334)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1354-1360)
- addLiquidity(otherHalf,newBalance) (#1340)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityAddress,block.timestamp) (#1368-1375)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#1340)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityAddress,block.timestamp) (#1368-1375)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#1268)
- addLiquidity(otherHalf,newBalance) (#1340)
- SwapAndLiquify(half,newBalance,otherHalf) (#1342)
Reentrancy in Salvation.transferFrom(address,address,uint256) (#1026-1037):
External calls:
- _transfer(sender,recipient,amount) (#1027)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityAddress,block.timestamp) (#1368-1375)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#1354-1360)
External calls sending eth:
- _transfer(sender,recipient,amount) (#1027)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,liquidityAddress,block.timestamp) (#1368-1375)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#1268)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#1028-1035)
Apply the check-effects-interactions pattern.
Additional information: link
Ownable.lock(uint256) (#500-510) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(time <= (block.timestamp + 31536000),Only lockable for up to 1 year) (#501-504)
Ownable.unlock() (#513-521) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(now > _lockTime,Contract is locked) (#518)
Salvation.upgradeBurnStrat() (#1497-1511) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(stratBurnTax.proposedTime.add(_approvalDelay) < block.timestamp,Delay has not passed) (#1499-1502)
Salvation.upgradeHoldersStrat() (#1513-1527) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(stratHoldersTax.proposedTime.add(_approvalDelay) < block.timestamp,Delay has not passed) (#1515-1518)
Salvation.upgradeLiquidityStrat() (#1529-1543) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(stratLiquidityTax.proposedTime.add(_approvalDelay) < block.timestamp,Delay has not passed) (#1531-1534)
Avoid relying on block.timestamp.
Additional information: link
Address.isContract(address) (#279-291) uses assembly
- INLINE ASM (#287-289)
Address._functionCallWithValue(address,bytes,uint256,string) (#406-433) uses assembly
- INLINE ASM (#425-428)
Do not use evm assembly.
Additional information: link
Salvation.includeInReward(address) (#1101-1112) has costly operations inside a loop:
- _excluded.pop() (#1108)
Use a local variable to hold the loop computation result.
Additional information: link
Address._functionCallWithValue(address,bytes,uint256,string) (#406-433) is never used and should be removed
Address.functionCall(address,bytes) (#341-346) is never used and should be removed
Address.functionCall(address,bytes,string) (#354-360) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#373-385) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#393-404) is never used and should be removed
Address.isContract(address) (#279-291) is never used and should be removed
Address.sendValue(address,uint256) (#309-321) is never used and should be removed
Context._msgData() (#255-258) is never used and should be removed
SafeMath.mod(uint256,uint256) (#224-226) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#240-247) is never used and should be removed
Salvation._getBurnFee() (#1456-1458) is never used and should be removed
Remove unused functions.
Additional information: link
Salvation._rTotal (#901) is set pre-construction with a non-constant function or state variable:
- (MAX - (MAX % _tTotal))
Salvation._totalFees (#914) is set pre-construction with a non-constant function or state variable:
- _taxFee.add(_burnFee).add(_liquidityFee)
Salvation._previousTaxFee (#916) is set pre-construction with a non-constant function or state variable:
- _taxFee
Salvation._previousBurnFee (#917) is set pre-construction with a non-constant function or state variable:
- _burnFee
Salvation._previousLiquidityFee (#918) 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) (#309-321):
- (success) = recipient.call{value: amount}() (#316)
Low level call in Address._functionCallWithValue(address,bytes,uint256,string) (#406-433):
- (success,returndata) = target.call{value: weiValue}(data) (#415-416)
Low level call in Salvation.transferBNB(address,uint256) (#1660-1666):
- (success) = recipient.call{value: amount}() (#1664)
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() (#587) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#589) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#620) is not in mixedCase
Function IUniswapV2Router01.WETH() (#666) is not in mixedCase
Parameter Salvation.calculateTaxFee(uint256)._amount (#1224) is not in mixedCase
Parameter Salvation.calculateBurnFee(uint256)._amount (#1228) is not in mixedCase
Parameter Salvation.calculateLiquidityFee(uint256)._amount (#1232) is not in mixedCase
Parameter Salvation.proposeBurnTax(uint256)._tax (#1461) is not in mixedCase
Parameter Salvation.proposeHoldersTax(uint256)._tax (#1471) is not in mixedCase
Parameter Salvation.proposeLiquidityTax(uint256)._tax (#1484) is not in mixedCase
Parameter Salvation.setNumTokensSellToAddToLiquidity(uint256)._numTokensSellToAddToLiquidity (#1547) is not in mixedCase
Parameter Salvation.setSwapAndLiquifyEnabled(bool)._enabled (#1569) is not in mixedCase
Parameter Salvation.setRouter(address)._routerAddress (#1574) is not in mixedCase
Parameter Salvation.setPair(address)._pairAddress (#1581) is not in mixedCase
Parameter Salvation.setStrategist(address)._strategistOnly (#1591) is not in mixedCase
Parameter Salvation.setLiquidityAddress(address)._liquidityAddress (#1596) is not in mixedCase
Function Salvation._setApprovalDelay(uint256) (#1616-1620) is not in mixedCase
Function Salvation._setBurnFee(uint256) (#1622-1631) is not in mixedCase
Parameter Salvation.transferAnyBEP20Tokens(address,address,uint256)._tokenAddr (#1656) is not in mixedCase
Parameter Salvation.transferAnyBEP20Tokens(address,address,uint256)._to (#1656) is not in mixedCase
Parameter Salvation.transferAnyBEP20Tokens(address,address,uint256)._amount (#1656) is not in mixedCase
Variable Salvation._feeDecimal (#909) is not in mixedCase
Variable Salvation._taxFee (#910) is not in mixedCase
Variable Salvation._burnFee (#911) is not in mixedCase
Variable Salvation._liquidityFee (#912) is not in mixedCase
Variable Salvation._totalFees (#914) is not in mixedCase
Variable Salvation._stopFee (#927) is not in mixedCase
Variable Salvation._maxTxAmount (#929) is not in mixedCase
Variable Salvation._approvalDelay (#941) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#256)" inContext (#250-259)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#671) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#672)
Variable Salvation.reflectionFromToken(uint256,bool).rTransferAmount (#1078) is too similar to Salvation._transferFromExcluded(address,address,uint256).tTransferAmount (#1442)
Variable Salvation._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#1192) is too similar to Salvation._transferToExcluded(address,address,uint256).tTransferAmount (#1422)
Variable Salvation._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#1192) is too similar to Salvation._getTValues(uint256).tTransferAmount (#1181)
Variable Salvation._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#1192) is too similar to Salvation._transferBothExcluded(address,address,uint256).tTransferAmount (#1120)
Variable Salvation._transferBothExcluded(address,address,uint256).rTransferAmount (#1118) is too similar to Salvation._transferFromExcluded(address,address,uint256).tTransferAmount (#1442)
Variable Salvation._transferStandard(address,address,uint256).rTransferAmount (#1401) is too similar to Salvation._transferStandard(address,address,uint256).tTransferAmount (#1403)
Variable Salvation._transferStandard(address,address,uint256).rTransferAmount (#1401) is too similar to Salvation._transferFromExcluded(address,address,uint256).tTransferAmount (#1442)
Variable Salvation._transferFromExcluded(address,address,uint256).rTransferAmount (#1440) is too similar to Salvation._getTValues(uint256).tTransferAmount (#1181)
Variable Salvation._transferStandard(address,address,uint256).rTransferAmount (#1401) is too similar to Salvation._getValues(uint256).tTransferAmount (#1159)
Variable Salvation._transferFromExcluded(address,address,uint256).rTransferAmount (#1440) is too similar to Salvation._transferBothExcluded(address,address,uint256).tTransferAmount (#1120)
Variable Salvation._getValues(uint256).rTransferAmount (#1164) is too similar to Salvation._getTValues(uint256).tTransferAmount (#1181)
Variable Salvation._transferToExcluded(address,address,uint256).rTransferAmount (#1420) is too similar to Salvation._transferToExcluded(address,address,uint256).tTransferAmount (#1422)
Variable Salvation._getValues(uint256).rTransferAmount (#1164) is too similar to Salvation._transferBothExcluded(address,address,uint256).tTransferAmount (#1120)
Variable Salvation._transferToExcluded(address,address,uint256).rTransferAmount (#1420) is too similar to Salvation._getTValues(uint256).tTransferAmount (#1181)
Variable Salvation._transferToExcluded(address,address,uint256).rTransferAmount (#1420) is too similar to Salvation._transferBothExcluded(address,address,uint256).tTransferAmount (#1120)
Variable Salvation.reflectionFromToken(uint256,bool).rTransferAmount (#1078) is too similar to Salvation._getTValues(uint256).tTransferAmount (#1181)
Variable Salvation.reflectionFromToken(uint256,bool).rTransferAmount (#1078) is too similar to Salvation._transferBothExcluded(address,address,uint256).tTransferAmount (#1120)
Variable Salvation._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#1192) is too similar to Salvation._transferFromExcluded(address,address,uint256).tTransferAmount (#1442)
Variable Salvation._transferBothExcluded(address,address,uint256).rTransferAmount (#1118) is too similar to Salvation._getTValues(uint256).tTransferAmount (#1181)
Variable Salvation._transferBothExcluded(address,address,uint256).rTransferAmount (#1118) is too similar to Salvation._transferBothExcluded(address,address,uint256).tTransferAmount (#1120)
Variable Salvation._transferStandard(address,address,uint256).rTransferAmount (#1401) is too similar to Salvation._transferToExcluded(address,address,uint256).tTransferAmount (#1422)
Variable Salvation._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#1192) is too similar to Salvation._transferStandard(address,address,uint256).tTransferAmount (#1403)
Variable Salvation._transferStandard(address,address,uint256).rTransferAmount (#1401) is too similar to Salvation._getTValues(uint256).tTransferAmount (#1181)
Variable Salvation._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#1192) is too similar to Salvation._getValues(uint256).tTransferAmount (#1159)
Variable Salvation._transferStandard(address,address,uint256).rTransferAmount (#1401) is too similar to Salvation._transferBothExcluded(address,address,uint256).tTransferAmount (#1120)
Variable Salvation._transferFromExcluded(address,address,uint256).rTransferAmount (#1440) is too similar to Salvation._transferFromExcluded(address,address,uint256).tTransferAmount (#1442)
Variable Salvation._transferToExcluded(address,address,uint256).rTransferAmount (#1420) is too similar to Salvation._transferFromExcluded(address,address,uint256).tTransferAmount (#1442)
Variable Salvation._getValues(uint256).rTransferAmount (#1164) is too similar to Salvation._transferFromExcluded(address,address,uint256).tTransferAmount (#1442)
Variable Salvation._transferToExcluded(address,address,uint256).rTransferAmount (#1420) is too similar to Salvation._transferStandard(address,address,uint256).tTransferAmount (#1403)
Variable Salvation._transferBothExcluded(address,address,uint256).rTransferAmount (#1118) is too similar to Salvation._transferStandard(address,address,uint256).tTransferAmount (#1403)
Variable Salvation._transferFromExcluded(address,address,uint256).rTransferAmount (#1440) is too similar to Salvation._getValues(uint256).tTransferAmount (#1159)
Variable Salvation._transferFromExcluded(address,address,uint256).rTransferAmount (#1440) is too similar to Salvation._transferToExcluded(address,address,uint256).tTransferAmount (#1422)
Variable Salvation._getValues(uint256).rTransferAmount (#1164) is too similar to Salvation._transferStandard(address,address,uint256).tTransferAmount (#1403)
Variable Salvation.reflectionFromToken(uint256,bool).rTransferAmount (#1078) is too similar to Salvation._getValues(uint256).tTransferAmount (#1159)
Variable Salvation.reflectionFromToken(uint256,bool).rTransferAmount (#1078) is too similar to Salvation._transferToExcluded(address,address,uint256).tTransferAmount (#1422)
Variable Salvation._transferFromExcluded(address,address,uint256).rTransferAmount (#1440) is too similar to Salvation._transferStandard(address,address,uint256).tTransferAmount (#1403)
Variable Salvation._transferToExcluded(address,address,uint256).rTransferAmount (#1420) is too similar to Salvation._getValues(uint256).tTransferAmount (#1159)
Variable Salvation._transferBothExcluded(address,address,uint256).rTransferAmount (#1118) is too similar to Salvation._getValues(uint256).tTransferAmount (#1159)
Variable Salvation._transferBothExcluded(address,address,uint256).rTransferAmount (#1118) is too similar to Salvation._transferToExcluded(address,address,uint256).tTransferAmount (#1422)
Variable Salvation.reflectionFromToken(uint256,bool).rTransferAmount (#1078) is too similar to Salvation._transferStandard(address,address,uint256).tTransferAmount (#1403)
Variable Salvation._getValues(uint256).rTransferAmount (#1164) is too similar to Salvation._getValues(uint256).tTransferAmount (#1159)
Variable Salvation._getValues(uint256).rTransferAmount (#1164) is too similar to Salvation._transferToExcluded(address,address,uint256).tTransferAmount (#1422)
Prevent variables from having similar names.
Additional information: link
Salvation.upgradeBurnStrat() (#1497-1511) uses literals with too many digits:
- stratBurnTax.proposedTime = 5000000000 (#1510)
Salvation.upgradeHoldersStrat() (#1513-1527) uses literals with too many digits:
- stratHoldersTax.proposedTime = 5000000000 (#1526)
Salvation.upgradeLiquidityStrat() (#1529-1543) uses literals with too many digits:
- stratLiquidityTax.proposedTime = 5000000000 (#1542)
Salvation.slitherConstructorVariables() (#869-1669) uses literals with too many digits:
- _tTotal = 72750500000 * 10 ** 18 (#900)
Salvation.slitherConstructorVariables() (#869-1669) uses literals with too many digits:
- _maxTxAmount = 72750500000 * 10 ** 18 (#929)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
Salvation._decimals (#907) should be constant
Salvation._feeDecimal (#909) should be constant
Salvation._name (#905) should be constant
Salvation._symbol (#906) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#477-480)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#486-493)
getUnlockTime() should be declared external:
- Ownable.getUnlockTime() (#495-497)
lock(uint256) should be declared external:
- Ownable.lock(uint256) (#500-510)
unlock() should be declared external:
- Ownable.unlock() (#513-521)
name() should be declared external:
- Salvation.name() (#989-991)
symbol() should be declared external:
- Salvation.symbol() (#993-995)
decimals() should be declared external:
- Salvation.decimals() (#997-999)
totalSupply() should be declared external:
- Salvation.totalSupply() (#1001-1003)
transfer(address,uint256) should be declared external:
- Salvation.transfer(address,uint256) (#1010-1013)
allowance(address,address) should be declared external:
- Salvation.allowance(address,address) (#1015-1018)
approve(address,uint256) should be declared external:
- Salvation.approve(address,uint256) (#1020-1024)
transferFrom(address,address,uint256) should be declared external:
- Salvation.transferFrom(address,address,uint256) (#1026-1037)
increaseAllowance(address,uint256) should be declared external:
- Salvation.increaseAllowance(address,uint256) (#1039-1046)
decreaseAllowance(address,uint256) should be declared external:
- Salvation.decreaseAllowance(address,uint256) (#1048-1058)
isExcludedFromReward(address) should be declared external:
- Salvation.isExcludedFromReward(address) (#1060-1062)
totalFees() should be declared external:
- Salvation.totalFees() (#1064-1066)
totalBurn() should be declared external:
- Salvation.totalBurn() (#1068-1070)
reflectionFromToken(uint256,bool) should be declared external:
- Salvation.reflectionFromToken(uint256,bool) (#1072-1081)
excludeFromReward(address) should be declared external:
- Salvation.excludeFromReward(address) (#1092-1099)
excludeFromFee(address) should be declared external:
- Salvation.excludeFromFee(address) (#1135-1138)
includeInFee(address) should be declared external:
- Salvation.includeInFee(address) (#1140-1143)
isExcludedFromFee(address) should be declared external:
- Salvation.isExcludedFromFee(address) (#1254-1256)
Use the external attribute for functions never called from the contract.
Additional information: link
BscScan page for the token does not contain additional info: website, socials, description, etc.
Additional information: link
Token was delisted from CoinGecko
Additional information: link
Unable to find token on CoinMarketCap
Additional information: link
Unable to find Telegram link on the website
Unable to find code repository for the project
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Token has a considerable age, but social accounts / website are missing or have few users
Token has a considerable age, but average PancakeSwap 30d trading volume is low
Young tokens have high risks of price dump / death
Young tokens have high risks of price dump / death
Young tokens have high risks of price dump / death
Telegram account has relatively few subscribers
Twitter account has relatively few followers
Unable to find Youtube account