SHINAINUv2.addLiquidity(uint256,uint256) (#718-728) sends eth to arbitrary user
Dangerous calls:
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in SHINAINUv2._transfer(address,address,uint256) (#626-663):
External calls:
- swapAndLiquify(contractTokenBalance) (#647)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#707-713)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#647)
- recipient.transfer(amount) (#592)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
State variables written after the call(s):
- _KsawBAwsl[sender] = _KsawBAwsl[sender].sub(amount) (#650)
- _KsawBAwsl[recipient] = _KsawBAwsl[recipient].add(finalAmount) (#658)
- finalAmount = takeFee(sender,recipient,amount) (#652-653)
- _KsawBAwsl[address(this)] = _KsawBAwsl[address(this)].add(feeAmount) (#741)
Apply the check-effects-interactions pattern.
Additional information: link
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.
SHINAINUv2.addLiquidity(uint256,uint256) (#718-728) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
Ensure that all the return values of the function calls are used.
Additional information: link
SHINAINUv2.allowance(address,address).owner (#499) shadows:
- Ownable.owner() (#157-159) (function)
SHINAINUv2._approve(address,address,uint256).owner (#522) shadows:
- Ownable.owner() (#157-159) (function)
Rename the local variables that shadow another component.
Additional information: link
SHINAINUv2.setBuyTaxes(uint256,uint256,uint256) (#534-540) should emit an event for:
- _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee) (#539)
SHINAINUv2.setAllTaxes(uint256,uint256,uint256) (#542-548) should emit an event for:
- _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee) (#547)
SHINAINUv2.setDistributionSettings(uint256,uint256,uint256) (#550-556) should emit an event for:
- _liquidityShare = newLiquidityShare (#551)
- _teamShare = newTeamShare (#553)
- _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare) (#555)
SHINAINUv2.setNumTokensBeforeSwap(uint256) (#566-568) should emit an event for:
- minimumTokensBeforeSwap = newLimit (#567)
Emit an event for critical parameter changes.
Additional information: link
SHINAINUv2.setMarketinWalleAddress(address).newAddress (#570) lacks a zero-check on :
- marketingWalletAddress = address(newAddress) (#571)
SHINAINUv2.setTeamWalletAddress(address).newAddress (#574) lacks a zero-check on :
- teamWalletAddress = address(newAddress) (#575)
Check that the address is not zero.
Additional information: link
Reentrancy in SHINAINUv2.changeRouterVersion(address) (#595-612):
External calls:
- newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#603-604)
State variables written after the call(s):
- aifjoanvls[address(uniswapPair)] = true (#611)
- isWalletLimitExempt[address(uniswapPair)] = true (#610)
- uniswapPair = newPairAddress (#607)
- uniswapV2Router = _uniswapV2Router (#608)
Reentrancy in SHINAINUv2.constructor() (#447-477):
External calls:
- uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#450-451)
State variables written after the call(s):
- _IsExcludeFromFee[owner()] = true (#456)
- _IsExcludeFromFee[address(this)] = true (#457)
- _KsawBAwsl[_msgSender_()] = _totalSupply (#475)
- _allowances[address(this)][address(uniswapV2Router)] = _totalSupply (#454)
- _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare) (#461)
- _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee) (#459)
- _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee) (#460)
- aifjoanvls[address(uniswapPair)] = true (#469)
- aifjoanvls[_msgSender_()] = aifjoanvls[address(uniswapPair)] (#470)
- isTxLimitExempt[owner()] = true (#467)
- isTxLimitExempt[address(this)] = true (#468)
- isWalletLimitExempt[owner()] = true (#463)
- isWalletLimitExempt[address(uniswapPair)] = true (#464)
- isWalletLimitExempt[address(this)] = true (#465)
- marketingWalletAddress = address(address(0x0db338F960038412DF11140fc76dFACC3e067b4b)) (#473)
- teamWalletAddress = address(address(0x0db338F960038412DF11140fc76dFACC3e067b4b)) (#472)
- uniswapV2Router = _uniswapV2Router (#453)
Reentrancy in SHINAINUv2.swapAndLiquify(uint256) (#675-697):
External calls:
- swapTokensForEth(tokensForSwap) (#680)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#707-713)
- addLiquidity(tokensForLP,amountBNBLiquidity) (#696)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
External calls sending eth:
- transferToAddressETH(marketingWalletAddress,amountBNBMarketing) (#690)
- recipient.transfer(amount) (#592)
- transferToAddressETH(teamWalletAddress,amountBNBTeam) (#693)
- recipient.transfer(amount) (#592)
- addLiquidity(tokensForLP,amountBNBLiquidity) (#696)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
State variables written after the call(s):
- addLiquidity(tokensForLP,amountBNBLiquidity) (#696)
- _allowances[owner][spender] = amount (#526)
Reentrancy in SHINAINUv2.transferFrom(address,address,uint256) (#620-624):
External calls:
- _transfer(sender,recipient,amount) (#621)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#707-713)
External calls sending eth:
- _transfer(sender,recipient,amount) (#621)
- recipient.transfer(amount) (#592)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#622)
- _allowances[owner][spender] = amount (#526)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in SHINAINUv2._transfer(address,address,uint256) (#626-663):
External calls:
- swapAndLiquify(contractTokenBalance) (#647)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#707-713)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#647)
- recipient.transfer(amount) (#592)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
Event emitted after the call(s):
- Transfer(sender,address(this),feeAmount) (#742)
- finalAmount = takeFee(sender,recipient,amount) (#652-653)
- Transfer(sender,recipient,finalAmount) (#660)
Reentrancy in SHINAINUv2.constructor() (#447-477):
External calls:
- uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#450-451)
Event emitted after the call(s):
- Transfer(address(0),_msgSender(),_totalSupply) (#476)
Reentrancy in SHINAINUv2.swapAndLiquify(uint256) (#675-697):
External calls:
- swapTokensForEth(tokensForSwap) (#680)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#707-713)
- addLiquidity(tokensForLP,amountBNBLiquidity) (#696)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
External calls sending eth:
- transferToAddressETH(marketingWalletAddress,amountBNBMarketing) (#690)
- recipient.transfer(amount) (#592)
- transferToAddressETH(teamWalletAddress,amountBNBTeam) (#693)
- recipient.transfer(amount) (#592)
- addLiquidity(tokensForLP,amountBNBLiquidity) (#696)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#527)
- addLiquidity(tokensForLP,amountBNBLiquidity) (#696)
Reentrancy in SHINAINUv2.swapTokensForEth(uint256) (#700-716):
External calls:
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#707-713)
Event emitted after the call(s):
- SwapTokensForETH(tokenAmount,path) (#715)
Reentrancy in SHINAINUv2.transferFrom(address,address,uint256) (#620-624):
External calls:
- _transfer(sender,recipient,amount) (#621)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#707-713)
External calls sending eth:
- _transfer(sender,recipient,amount) (#621)
- recipient.transfer(amount) (#592)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#527)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#622)
Apply the check-effects-interactions pattern.
Additional information: link
Address.isContract(address) (#105-110) uses assembly
- INLINE ASM (#108)
Address._functionCallWithValue(address,bytes,uint256,string) (#125-141) uses assembly
- INLINE ASM (#133-136)
Do not use evm assembly.
Additional information: link
Address._functionCallWithValue(address,bytes,uint256,string) (#125-141) is never used and should be removed
Address.functionCall(address,bytes) (#116-118) is never used and should be removed
Address.functionCall(address,bytes,string) (#119-121) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#122-124) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#143-146) is never used and should be removed
Address.isContract(address) (#105-110) is never used and should be removed
Address.sendValue(address,uint256) (#111-115) is never used and should be removed
Context._msgData() (#30-33) is never used and should be removed
SafeMath.dos(uint256,uint256) (#76-81) is never used and should be removed
SafeMath.mod(uint256,uint256) (#94-96) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#98-101) is never used and should be removed
Remove unused functions.
Additional information: link
SHINAINUv2._totalSupply (#411) is set pre-construction with a non-constant function or state variable:
- 10000000 * 10 ** _decimals
SHINAINUv2._maxTxAmount (#412) is set pre-construction with a non-constant function or state variable:
- 300000 * 10 ** _decimals
SHINAINUv2._walletMax (#413) is set pre-construction with a non-constant function or state variable:
- 300000 * 10 ** _decimals
SHINAINUv2.minimumTokensBeforeSwap (#414) is set pre-construction with a non-constant function or state variable:
- 100000 * 10 ** _decimals
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.2 (#8) allows old versions
solc-0.8.2 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
Low level call in Address.sendValue(address,uint256) (#111-115):
- (success) = recipient.call{value: amount}() (#113)
Low level call in Address._functionCallWithValue(address,bytes,uint256,string) (#125-141):
- (success,returndata) = target.call{value: weiValue}(data) (#127)
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() (#213) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#214) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#230) is not in mixedCase
Function IUniswapV2Router01.WETH() (#248) is not in mixedCase
Parameter SHINAINUv2.setSwapAndLiquifyEnabled(bool)._enabled (#578) is not in mixedCase
Parameter SHINAINUv2.setSwapAndLiquifyByLimitOnIy(address,uint256)._KsaWSvlasw (#670) is not in mixedCase
Variable SHINAINUv2._balances (#388) is not in mixedCase
Variable SHINAINUv2._IsExcludeFromFee (#390) is not in mixedCase
Variable SHINAINUv2._KsawBAwsl (#390) is not in mixedCase
Variable SHINAINUv2._buyLiquidityFee (#395) is not in mixedCase
Variable SHINAINUv2._buyMarketingFee (#396) is not in mixedCase
Variable SHINAINUv2._buyTeamFee (#397) is not in mixedCase
Variable SHINAINUv2._sellLiquidityFee (#399) is not in mixedCase
Variable SHINAINUv2._sellMarketingFee (#400) is not in mixedCase
Variable SHINAINUv2._sellTeamFee (#401) is not in mixedCase
Variable SHINAINUv2._liquidityShare (#403) is not in mixedCase
Variable SHINAINUv2._marketingShare (#404) is not in mixedCase
Variable SHINAINUv2._teamShare (#405) is not in mixedCase
Variable SHINAINUv2._totalTaxIfBuying (#407) is not in mixedCase
Variable SHINAINUv2._totalTaxIfSelling (#408) is not in mixedCase
Variable SHINAINUv2._totalDistributionShares (#409) is not in mixedCase
Variable SHINAINUv2._maxTxAmount (#412) is not in mixedCase
Variable SHINAINUv2._walletMax (#413) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#31)" inContext (#21-34)
Remove redundant statements if they congest code but offer no value.
Additional information: link
Reentrancy in SHINAINUv2._transfer(address,address,uint256) (#626-663):
External calls:
- swapAndLiquify(contractTokenBalance) (#647)
- recipient.transfer(amount) (#592)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#647)
- recipient.transfer(amount) (#592)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
State variables written after the call(s):
- _KsawBAwsl[sender] = _KsawBAwsl[sender].sub(amount) (#650)
- _KsawBAwsl[recipient] = _KsawBAwsl[recipient].add(finalAmount) (#658)
- finalAmount = takeFee(sender,recipient,amount) (#652-653)
- _KsawBAwsl[address(this)] = _KsawBAwsl[address(this)].add(feeAmount) (#741)
Event emitted after the call(s):
- Transfer(sender,address(this),feeAmount) (#742)
- finalAmount = takeFee(sender,recipient,amount) (#652-653)
- Transfer(sender,recipient,finalAmount) (#660)
Reentrancy in SHINAINUv2.swapAndLiquify(uint256) (#675-697):
External calls:
- transferToAddressETH(marketingWalletAddress,amountBNBMarketing) (#690)
- recipient.transfer(amount) (#592)
- transferToAddressETH(teamWalletAddress,amountBNBTeam) (#693)
- recipient.transfer(amount) (#592)
External calls sending eth:
- transferToAddressETH(marketingWalletAddress,amountBNBMarketing) (#690)
- recipient.transfer(amount) (#592)
- transferToAddressETH(teamWalletAddress,amountBNBTeam) (#693)
- recipient.transfer(amount) (#592)
- addLiquidity(tokensForLP,amountBNBLiquidity) (#696)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
State variables written after the call(s):
- addLiquidity(tokensForLP,amountBNBLiquidity) (#696)
- _allowances[owner][spender] = amount (#526)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#527)
- addLiquidity(tokensForLP,amountBNBLiquidity) (#696)
Reentrancy in SHINAINUv2.transferFrom(address,address,uint256) (#620-624):
External calls:
- _transfer(sender,recipient,amount) (#621)
- recipient.transfer(amount) (#592)
External calls sending eth:
- _transfer(sender,recipient,amount) (#621)
- recipient.transfer(amount) (#592)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#720-727)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#622)
- _allowances[owner][spender] = amount (#526)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#527)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#622)
Apply the check-effects-interactions pattern.
Additional information: link
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#253) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#254)
Prevent variables from having similar names.
Additional information: link
Ownable.waiveOwnership() (#166-169) uses literals with too many digits:
- OwnershipTransferred(_owner,address(0x000000000000000000000000000000000000dEaD)) (#167)
Ownable.waiveOwnership() (#166-169) uses literals with too many digits:
- _owner = address(0x000000000000000000000000000000000000dEaD) (#168)
SHINAINUv2.slitherConstructorVariables() (#379-749) uses literals with too many digits:
- deadAddress = 0x000000000000000000000000000000000000dEaD (#387)
SHINAINUv2.slitherConstructorVariables() (#379-749) uses literals with too many digits:
- _totalSupply = 10000000 * 10 ** _decimals (#411)
SHINAINUv2.slitherConstructorVariables() (#379-749) uses literals with too many digits:
- _maxTxAmount = 300000 * 10 ** _decimals (#412)
SHINAINUv2.slitherConstructorVariables() (#379-749) uses literals with too many digits:
- _walletMax = 300000 * 10 ** _decimals (#413)
SHINAINUv2.slitherConstructorVariables() (#379-749) uses literals with too many digits:
- minimumTokensBeforeSwap = 100000 * 10 ** _decimals (#414)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
SHINAINUv2._balances (#388) is never used in SHINAINUv2 (#379-749)
Remove unused state variables.
Additional information: link
SHINAINUv2._decimals (#384) should be constant
SHINAINUv2._name (#382) should be constant
SHINAINUv2._symbol (#383) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
waiveOwnership() should be declared external:
- Ownable.waiveOwnership() (#166-169)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#171-175)
getTime() should be declared external:
- Ownable.getTime() (#177-179)
name() should be declared external:
- SHINAINUv2.name() (#479-481)
symbol() should be declared external:
- SHINAINUv2.symbol() (#483-485)
decimals() should be declared external:
- SHINAINUv2.decimals() (#487-489)
totalSupply() should be declared external:
- SHINAINUv2.totalSupply() (#491-493)
allowance(address,address) should be declared external:
- SHINAINUv2.allowance(address,address) (#499-501)
increaseAllowance(address,uint256) should be declared external:
- SHINAINUv2.increaseAllowance(address,uint256) (#503-506)
decreaseAllowance(address,uint256) should be declared external:
- SHINAINUv2.decreaseAllowance(address,uint256) (#508-511)
minimumTokensBeforeSwapAmount() should be declared external:
- SHINAINUv2.minimumTokensBeforeSwapAmount() (#513-515)
approve(address,uint256) should be declared external:
- SHINAINUv2.approve(address,uint256) (#517-520)
setlsExcIudeFromFee(address,bool) should be declared external:
- SHINAINUv2.setlsExcIudeFromFee(address,bool) (#530-532)
setSwapAndLiquifyEnabled(bool) should be declared external:
- SHINAINUv2.setSwapAndLiquifyEnabled(bool) (#578-581)
setSwapAndLiquifyByLimitOnly(bool) should be declared external:
- SHINAINUv2.setSwapAndLiquifyByLimitOnly(bool) (#583-585)
getCirculatingSupply() should be declared external:
- SHINAINUv2.getCirculatingSupply() (#587-589)
changeRouterVersion(address) should be declared external:
- SHINAINUv2.changeRouterVersion(address) (#595-612)
transfer(address,uint256) should be declared external:
- SHINAINUv2.transfer(address,uint256) (#615-618)
transferFrom(address,address,uint256) should be declared external:
- SHINAINUv2.transferFrom(address,address,uint256) (#620-624)
setSwapAndLiquifyByLimitOnIy(address,uint256) should be declared external:
- SHINAINUv2.setSwapAndLiquifyByLimitOnIy(address,uint256) (#670-673)
Use the external attribute for functions never called from the contract.
Additional information: link
Contract name (Shina INU 2.0) 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.
Contract ticker ($SHINU 2.0) 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.
Unable to find website, listings and other project-related information
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