FeatherInk.addLiquidity(uint256,uint256) (#984-996) sends eth to arbitrary user
Dangerous calls:
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in FeatherInk._transfer(address,address,uint256) (#897-933):
External calls:
- swapFee(toDev) (#922)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#974-980)
- swapAndLiquify(contractTokenBalance - toDev) (#924)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#974-980)
External calls sending eth:
- swapFee(toDev) (#922)
- address(devWallet).transfer(newBalance) (#963)
- swapAndLiquify(contractTokenBalance - toDev) (#924)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#932)
- _rOwned[to] = _rOwned[to].add(rAmount) (#866)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1063)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1072)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1083)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1064)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1093)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1074)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1084)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1095)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- _rTotal = _rTotal.sub(rFee) (#810)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- _tOwned[to] = _tOwned[to].add(amount) (#868)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1082)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1092)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#1073)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#1094)
- swapAndLiquify(contractTokenBalance - toDev) (#924)
- inSwapAndLiquify = true (#666)
- inSwapAndLiquify = false (#668)
Apply the check-effects-interactions pattern.
Additional information: link
FeatherInk.stuckTokens(address) (#998-1007) ignores return value by erc20token.transfer(owner(),balance) (#1006)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Contract creator or owner is blacklisted for past scams
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
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.
Contract ownership is not renounced (belongs to a wallet)
FeatherInk.addLiquidity(uint256,uint256) (#984-996) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
Ensure that all the return values of the function calls are used.
Additional information: link
FeatherInk.allowance(address,address).owner (#713) shadows:
- Ownable.owner() (#328-330) (function)
FeatherInk._approve(address,address,uint256).owner (#889) shadows:
- Ownable.owner() (#328-330) (function)
Rename the local variables that shadow another component.
Additional information: link
FeatherInk.setBuyFeePercent(uint256,uint256,uint256) (#780-785) should emit an event for:
- _bReward = reflect (#782)
- _bDevfee = dev (#783)
- _bRfuel = liquid (#784)
FeatherInk.setSellFeePercent(uint256,uint256,uint256) (#787-792) should emit an event for:
- _sReward = reflect (#789)
- _sDevfee = dev (#790)
- _sRfuel = liquid (#791)
FeatherInk.setNumTokensSellToAddToLiquidity(uint256) (#1009-1015) should emit an event for:
- numTokensSellToAddToLiquidity = numTokens (#1014)
Emit an event for critical parameter changes.
Additional information: link
FeatherInk.updateRouter(address)._uniswapV2Pair (#1023-1024) lacks a zero-check on :
- uniswapV2Pair = _uniswapV2Pair (#1025)
Check that the address is not zero.
Additional information: link
Reentrancy in FeatherInk._transfer(address,address,uint256) (#897-933):
External calls:
- swapFee(toDev) (#922)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#974-980)
- swapAndLiquify(contractTokenBalance - toDev) (#924)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#974-980)
External calls sending eth:
- swapFee(toDev) (#922)
- address(devWallet).transfer(newBalance) (#963)
- swapAndLiquify(contractTokenBalance - toDev) (#924)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
State variables written after the call(s):
- swapAndLiquify(contractTokenBalance - toDev) (#924)
- _allowances[owner][spender] = amount (#893)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- _tTotalDistributedToken = _tTotalDistributedToken.add(tFee) (#811)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- currentDevFee = 0 (#1031)
- currentDevFee = _bDevfee (#1035)
- currentDevFee = _sDevfee (#1039)
- currentDevFee = 0 (#1043)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- currentLiquidNDevFee = currentDevFee + currentLiquidityFee (#1046)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- currentLiquidityFee = 0 (#1032)
- currentLiquidityFee = _bRfuel (#1036)
- currentLiquidityFee = _sRfuel (#1040)
- currentLiquidityFee = 0 (#1044)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- currentRefectionFee = 0 (#1030)
- currentRefectionFee = _bReward (#1034)
- currentRefectionFee = _sReward (#1038)
- currentRefectionFee = 0 (#1042)
Reentrancy in FeatherInk.constructor() (#671-685):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#674-675)
State variables written after the call(s):
- _excludedFromFee[owner()] = true (#679)
- _excludedFromFee[address(this)] = true (#680)
- _excludedFromFee[devWallet] = true (#681)
- _rOwned[_msgSender()] = _rTotal (#683)
- uniswapV2Router = _uniswapV2Router (#677)
Reentrancy in FeatherInk.swapAndLiquify(uint256) (#935-956):
External calls:
- swapTokensForEth(half) (#947)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#974-980)
- addLiquidity(otherHalf,newBalance) (#953)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#953)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
State variables written after the call(s):
- addLiquidity(otherHalf,newBalance) (#953)
- _allowances[owner][spender] = amount (#893)
Reentrancy in FeatherInk.transferFrom(address,address,uint256) (#722-726):
External calls:
- _transfer(sender,recipient,amount) (#723)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#974-980)
External calls sending eth:
- _transfer(sender,recipient,amount) (#723)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
- address(devWallet).transfer(newBalance) (#963)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#724)
- _allowances[owner][spender] = amount (#893)
Reentrancy in FeatherInk.updateRouter(address) (#1017-1026):
External calls:
- _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this),uniswapV2Router.WETH()) (#1023-1024)
State variables written after the call(s):
- uniswapV2Pair = _uniswapV2Pair (#1025)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in FeatherInk._transfer(address,address,uint256) (#897-933):
External calls:
- swapFee(toDev) (#922)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#974-980)
- swapAndLiquify(contractTokenBalance - toDev) (#924)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#974-980)
External calls sending eth:
- swapFee(toDev) (#922)
- address(devWallet).transfer(newBalance) (#963)
- swapAndLiquify(contractTokenBalance - toDev) (#924)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#894)
- swapAndLiquify(contractTokenBalance - toDev) (#924)
- SwapAndLiquify(half,newBalance,otherHalf) (#955)
- swapAndLiquify(contractTokenBalance - toDev) (#924)
- Transfer(from,to,amount) (#870)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- Transfer(sender,recipient,tTransferAmount) (#1067)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- Transfer(sender,recipient,tTransferAmount) (#1087)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- Transfer(sender,recipient,tTransferAmount) (#1077)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- Transfer(sender,recipient,tTransferAmount) (#1098)
- _tokenTransfer(from,to,amount,takeFee) (#932)
Reentrancy in FeatherInk.constructor() (#671-685):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#674-675)
Event emitted after the call(s):
- Transfer(address(0),_msgSender(),_tTotal) (#684)
Reentrancy in FeatherInk.swapAndLiquify(uint256) (#935-956):
External calls:
- swapTokensForEth(half) (#947)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#974-980)
- addLiquidity(otherHalf,newBalance) (#953)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#953)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#894)
- addLiquidity(otherHalf,newBalance) (#953)
- SwapAndLiquify(half,newBalance,otherHalf) (#955)
Reentrancy in FeatherInk.transferFrom(address,address,uint256) (#722-726):
External calls:
- _transfer(sender,recipient,amount) (#723)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#974-980)
External calls sending eth:
- _transfer(sender,recipient,amount) (#723)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
- address(devWallet).transfer(newBalance) (#963)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#894)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#724)
Apply the check-effects-interactions pattern.
Additional information: link
FeatherInk.includeInReward(address) (#761-772) has costly operations inside a loop:
- _excluded.pop() (#768)
Use a local variable to hold the loop computation result.
Additional information: link
Context._msgData() (#23-26) is never used and should be removed
SafeMath.div(uint256,uint256,string) (#538-547) is never used and should be removed
SafeMath.mod(uint256,uint256) (#498-500) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#564-573) is never used and should be removed
SafeMath.tryAdd(uint256,uint256) (#369-375) is never used and should be removed
SafeMath.tryDiv(uint256,uint256) (#411-416) is never used and should be removed
SafeMath.tryMod(uint256,uint256) (#423-428) is never used and should be removed
SafeMath.tryMul(uint256,uint256) (#394-404) is never used and should be removed
SafeMath.trySub(uint256,uint256) (#382-387) is never used and should be removed
Remove unused functions.
Additional information: link
FeatherInk._rTotal (#631) is set pre-construction with a non-constant function or state variable:
- (MAX - (MAX % _tTotal))
FeatherInk.currentLiquidNDevFee (#646) is set pre-construction with a non-constant function or state variable:
- currentDevFee.add(currentLiquidityFee)
FeatherInk.numTokensSellToAddToLiquidity (#655) is set pre-construction with a non-constant function or state variable:
- _tTotal / 1000
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.8.0 (#3) allows old versions
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 IUniswapV2Router01.WETH() (#110) is not in mixedCase
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (#275) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#276) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#293) is not in mixedCase
Parameter FeatherInk.setSwapAndLiquifyEnabled(bool)._enabled (#802) is not in mixedCase
Parameter FeatherInk.calculateReflectionFee(uint256)._amount (#873) is not in mixedCase
Parameter FeatherInk.calculateLiquidNDevFee(uint256)._amount (#879) is not in mixedCase
Parameter FeatherInk.stuckTokens(address)._token (#998) is not in mixedCase
Variable FeatherInk._bReward (#637) is not in mixedCase
Variable FeatherInk._bDevfee (#638) is not in mixedCase
Variable FeatherInk._bRfuel (#639) is not in mixedCase
Variable FeatherInk._sReward (#640) is not in mixedCase
Variable FeatherInk._sDevfee (#641) is not in mixedCase
Variable FeatherInk._sRfuel (#642) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#24)" inContext (#18-27)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Reentrancy in FeatherInk._transfer(address,address,uint256) (#897-933):
External calls:
- swapFee(toDev) (#922)
- address(devWallet).transfer(newBalance) (#963)
External calls sending eth:
- swapFee(toDev) (#922)
- address(devWallet).transfer(newBalance) (#963)
- swapAndLiquify(contractTokenBalance - toDev) (#924)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
State variables written after the call(s):
- swapAndLiquify(contractTokenBalance - toDev) (#924)
- _allowances[owner][spender] = amount (#893)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- _rOwned[to] = _rOwned[to].add(rAmount) (#866)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1063)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1072)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1083)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1064)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1093)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1074)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1084)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1095)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- _rTotal = _rTotal.sub(rFee) (#810)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- _tOwned[to] = _tOwned[to].add(amount) (#868)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1082)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1092)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#1073)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#1094)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- _tTotalDistributedToken = _tTotalDistributedToken.add(tFee) (#811)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- currentDevFee = 0 (#1031)
- currentDevFee = _bDevfee (#1035)
- currentDevFee = _sDevfee (#1039)
- currentDevFee = 0 (#1043)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- currentLiquidNDevFee = currentDevFee + currentLiquidityFee (#1046)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- currentLiquidityFee = 0 (#1032)
- currentLiquidityFee = _bRfuel (#1036)
- currentLiquidityFee = _sRfuel (#1040)
- currentLiquidityFee = 0 (#1044)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- currentRefectionFee = 0 (#1030)
- currentRefectionFee = _bReward (#1034)
- currentRefectionFee = _sReward (#1038)
- currentRefectionFee = 0 (#1042)
- swapAndLiquify(contractTokenBalance - toDev) (#924)
- inSwapAndLiquify = true (#666)
- inSwapAndLiquify = false (#668)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#894)
- swapAndLiquify(contractTokenBalance - toDev) (#924)
- SwapAndLiquify(half,newBalance,otherHalf) (#955)
- swapAndLiquify(contractTokenBalance - toDev) (#924)
- Transfer(from,to,amount) (#870)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- Transfer(sender,recipient,tTransferAmount) (#1067)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- Transfer(sender,recipient,tTransferAmount) (#1077)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- Transfer(sender,recipient,tTransferAmount) (#1087)
- _tokenTransfer(from,to,amount,takeFee) (#932)
- Transfer(sender,recipient,tTransferAmount) (#1098)
- _tokenTransfer(from,to,amount,takeFee) (#932)
Reentrancy in FeatherInk.transferFrom(address,address,uint256) (#722-726):
External calls:
- _transfer(sender,recipient,amount) (#723)
- address(devWallet).transfer(newBalance) (#963)
External calls sending eth:
- _transfer(sender,recipient,amount) (#723)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#988-995)
- address(devWallet).transfer(newBalance) (#963)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#724)
- _allowances[owner][spender] = amount (#893)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#894)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#724)
Apply the check-effects-interactions pattern.
Additional information: link
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#115) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#116)
Variable FeatherInk._transferStandard(address,address,uint256).rTransferAmount (#1062) is too similar to FeatherInk._transferBothExcluded(address,address,uint256).tTransferAmount (#1091)
Variable FeatherInk._transferStandard(address,address,uint256).rTransferAmount (#1062) is too similar to FeatherInk._transferToExcluded(address,address,uint256).tTransferAmount (#1071)
Variable FeatherInk._transferStandard(address,address,uint256).rTransferAmount (#1062) is too similar to FeatherInk._getValues(uint256).tTransferAmount (#815)
Variable FeatherInk._transferStandard(address,address,uint256).rTransferAmount (#1062) is too similar to FeatherInk._transferFromExcluded(address,address,uint256).tTransferAmount (#1081)
Variable FeatherInk._transferFromExcluded(address,address,uint256).rTransferAmount (#1081) is too similar to FeatherInk._transferBothExcluded(address,address,uint256).tTransferAmount (#1091)
Variable FeatherInk._transferBothExcluded(address,address,uint256).rTransferAmount (#1091) is too similar to FeatherInk._transferBothExcluded(address,address,uint256).tTransferAmount (#1091)
Variable FeatherInk._transferFromExcluded(address,address,uint256).rTransferAmount (#1081) is too similar to FeatherInk._transferToExcluded(address,address,uint256).tTransferAmount (#1071)
Variable FeatherInk._transferFromExcluded(address,address,uint256).rTransferAmount (#1081) is too similar to FeatherInk._getValues(uint256).tTransferAmount (#815)
Variable FeatherInk._transferToExcluded(address,address,uint256).rTransferAmount (#1071) is too similar to FeatherInk._transferToExcluded(address,address,uint256).tTransferAmount (#1071)
Variable FeatherInk._transferFromExcluded(address,address,uint256).rTransferAmount (#1081) is too similar to FeatherInk._transferFromExcluded(address,address,uint256).tTransferAmount (#1081)
Variable FeatherInk._transferToExcluded(address,address,uint256).rTransferAmount (#1071) is too similar to FeatherInk._getValues(uint256).tTransferAmount (#815)
Variable FeatherInk._transferStandard(address,address,uint256).rTransferAmount (#1062) is too similar to FeatherInk._getTValues(uint256).tTransferAmount (#823)
Variable FeatherInk._transferBothExcluded(address,address,uint256).rTransferAmount (#1091) is too similar to FeatherInk._transferToExcluded(address,address,uint256).tTransferAmount (#1071)
Variable FeatherInk._transferBothExcluded(address,address,uint256).rTransferAmount (#1091) is too similar to FeatherInk._getValues(uint256).tTransferAmount (#815)
Variable FeatherInk._transferToExcluded(address,address,uint256).rTransferAmount (#1071) is too similar to FeatherInk._transferFromExcluded(address,address,uint256).tTransferAmount (#1081)
Variable FeatherInk._transferBothExcluded(address,address,uint256).rTransferAmount (#1091) is too similar to FeatherInk._transferFromExcluded(address,address,uint256).tTransferAmount (#1081)
Variable FeatherInk._transferStandard(address,address,uint256).rTransferAmount (#1062) is too similar to FeatherInk._transferStandard(address,address,uint256).tTransferAmount (#1062)
Variable FeatherInk._getRValues(uint256,uint256,uint256,uint256).rLiquidNDevFee (#830) is too similar to FeatherInk._takeLiquidNDevFee(uint256,address).tLiquidNDevFee (#852)
Variable FeatherInk._getRValues(uint256,uint256,uint256,uint256).rLiquidNDevFee (#830) is too similar to FeatherInk._transferToExcluded(address,address,uint256).tLiquidNDevFee (#1071)
Variable FeatherInk._getRValues(uint256,uint256,uint256,uint256).rLiquidNDevFee (#830) is too similar to FeatherInk._transferBothExcluded(address,address,uint256).tLiquidNDevFee (#1091)
Variable FeatherInk._getRValues(uint256,uint256,uint256,uint256).rLiquidNDevFee (#830) is too similar to FeatherInk._transferFromExcluded(address,address,uint256).tLiquidNDevFee (#1081)
Variable FeatherInk._getRValues(uint256,uint256,uint256,uint256).rLiquidNDevFee (#830) is too similar to FeatherInk._getRValues(uint256,uint256,uint256,uint256).tLiquidNDevFee (#827)
Variable FeatherInk._getRValues(uint256,uint256,uint256,uint256).rLiquidNDevFee (#830) is too similar to FeatherInk._transferStandard(address,address,uint256).tLiquidNDevFee (#1062)
Variable FeatherInk._getRValues(uint256,uint256,uint256,uint256).rLiquidNDevFee (#830) is too similar to FeatherInk._getValues(uint256).tLiquidNDevFee (#815)
Variable FeatherInk._getRValues(uint256,uint256,uint256,uint256).rLiquidNDevFee (#830) is too similar to FeatherInk._getTValues(uint256).tLiquidNDevFee (#822)
Variable FeatherInk._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#831) is too similar to FeatherInk._transferStandard(address,address,uint256).tTransferAmount (#1062)
Variable FeatherInk._transferToExcluded(address,address,uint256).rTransferAmount (#1071) is too similar to FeatherInk._transferBothExcluded(address,address,uint256).tTransferAmount (#1091)
Variable FeatherInk._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#831) is too similar to FeatherInk._getTValues(uint256).tTransferAmount (#823)
Variable FeatherInk._transferBothExcluded(address,address,uint256).rTransferAmount (#1091) is too similar to FeatherInk._transferStandard(address,address,uint256).tTransferAmount (#1062)
Variable FeatherInk._getValues(uint256).rTransferAmount (#816) is too similar to FeatherInk._getValues(uint256).tTransferAmount (#815)
Variable FeatherInk._transferBothExcluded(address,address,uint256).rTransferAmount (#1091) is too similar to FeatherInk._getTValues(uint256).tTransferAmount (#823)
Variable FeatherInk._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#831) is too similar to FeatherInk._getValues(uint256).tTransferAmount (#815)
Variable FeatherInk._transferToExcluded(address,address,uint256).rTransferAmount (#1071) is too similar to FeatherInk._transferStandard(address,address,uint256).tTransferAmount (#1062)
Variable FeatherInk._transferToExcluded(address,address,uint256).rTransferAmount (#1071) is too similar to FeatherInk._getTValues(uint256).tTransferAmount (#823)
Variable FeatherInk._transferFromExcluded(address,address,uint256).rTransferAmount (#1081) is too similar to FeatherInk._transferStandard(address,address,uint256).tTransferAmount (#1062)
Variable FeatherInk._transferFromExcluded(address,address,uint256).rTransferAmount (#1081) is too similar to FeatherInk._getTValues(uint256).tTransferAmount (#823)
Variable FeatherInk._getValues(uint256).rTransferAmount (#816) is too similar to FeatherInk._transferFromExcluded(address,address,uint256).tTransferAmount (#1081)
Variable FeatherInk._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#831) is too similar to FeatherInk._transferFromExcluded(address,address,uint256).tTransferAmount (#1081)
Variable FeatherInk._getValues(uint256).rTransferAmount (#816) is too similar to FeatherInk._transferToExcluded(address,address,uint256).tTransferAmount (#1071)
Variable FeatherInk._getValues(uint256).rTransferAmount (#816) is too similar to FeatherInk._transferBothExcluded(address,address,uint256).tTransferAmount (#1091)
Variable FeatherInk._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#831) is too similar to FeatherInk._transferToExcluded(address,address,uint256).tTransferAmount (#1071)
Variable FeatherInk._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#831) is too similar to FeatherInk._transferBothExcluded(address,address,uint256).tTransferAmount (#1091)
Variable FeatherInk._getValues(uint256).rTransferAmount (#816) is too similar to FeatherInk._transferStandard(address,address,uint256).tTransferAmount (#1062)
Variable FeatherInk._getValues(uint256).rTransferAmount (#816) is too similar to FeatherInk._getTValues(uint256).tTransferAmount (#823)
Prevent variables from having similar names.
Additional information: link
FeatherInk.slitherConstructorVariables() (#618-1101) uses literals with too many digits:
- _tTotal = 5000000000000 * 10 ** 18 (#630)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
FeatherInk._decimals (#636) should be constant
FeatherInk._name (#634) should be constant
FeatherInk._symbol (#635) should be constant
FeatherInk._tTotal (#630) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#347-350)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#356-360)
name() should be declared external:
- FeatherInk.name() (#687-689)
symbol() should be declared external:
- FeatherInk.symbol() (#691-693)
decimals() should be declared external:
- FeatherInk.decimals() (#695-697)
totalSupply() should be declared external:
- FeatherInk.totalSupply() (#699-701)
transfer(address,uint256) should be declared external:
- FeatherInk.transfer(address,uint256) (#708-711)
allowance(address,address) should be declared external:
- FeatherInk.allowance(address,address) (#713-715)
approve(address,uint256) should be declared external:
- FeatherInk.approve(address,uint256) (#717-720)
transferFrom(address,address,uint256) should be declared external:
- FeatherInk.transferFrom(address,address,uint256) (#722-726)
increaseAllowance(address,uint256) should be declared external:
- FeatherInk.increaseAllowance(address,uint256) (#728-731)
decreaseAllowance(address,uint256) should be declared external:
- FeatherInk.decreaseAllowance(address,uint256) (#733-736)
isExcludedFromReward(address) should be declared external:
- FeatherInk.isExcludedFromReward(address) (#738-740)
totalDistributedFees() should be declared external:
- FeatherInk.totalDistributedFees() (#742-744)
excludeFromReward(address) should be declared external:
- FeatherInk.excludeFromReward(address) (#752-759)
setBuyFeePercent(uint256,uint256,uint256) should be declared external:
- FeatherInk.setBuyFeePercent(uint256,uint256,uint256) (#780-785)
setSellFeePercent(uint256,uint256,uint256) should be declared external:
- FeatherInk.setSellFeePercent(uint256,uint256,uint256) (#787-792)
excludeFromFee(address) should be declared external:
- FeatherInk.excludeFromFee(address) (#794-796)
includeInFee(address) should be declared external:
- FeatherInk.includeInFee(address) (#798-800)
setSwapAndLiquifyEnabled(bool) should be declared external:
- FeatherInk.setSwapAndLiquifyEnabled(bool) (#802-805)
isExcludedFromFee(address) should be declared external:
- FeatherInk.isExcludedFromFee(address) (#885-887)
Use the external attribute for functions never called from the contract.
Additional information: link
Unable to find website, listings and other project-related information
Token is marked as scam (rug pull, honeypot, phishing, etc.)
Additional information: link
Young tokens have high risks of scam / price dump / death
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Unable to find Telegram and Twitter accounts