Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
BaseToken.addLiquidity(uint256,uint256) (#841-854) sends eth to arbitrary user
Dangerous calls:
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#846-853)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in BaseToken._transfer(address,address,uint256) (#760-801):
External calls:
- swapAndLiquify(contractTokenBalance) (#788)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#846-853)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#832-838)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#788)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#846-853)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#800)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#711)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#879)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#888)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#899)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#880)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#625)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#890)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#900)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#627)
- _tokenTransfer(from,to,amount,takeFee) (#800)
- _rTotal = _rTotal.sub(rFee) (#666)
- _tokenTransfer(from,to,amount,takeFee) (#800)
- _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (#713)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#624)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#898)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#889)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#626)
Apply the check-effects-interactions pattern.
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.
BaseToken.addLiquidity(uint256,uint256) (#841-854) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#846-853)
Ensure that all the return values of the function calls are used.
Additional information: link
BaseToken.allowance(address,address).owner (#541) shadows:
- Ownable.owner() (#176-178) (function)
BaseToken._approve(address,address,uint256).owner (#752) shadows:
- Ownable.owner() (#176-178) (function)
Rename the local variables that shadow another component.
Additional information: link
BaseToken.setTaxFeePercent(uint256) (#641-643) should emit an event for:
- _taxFee = taxFee (#642)
BaseToken.setLiquidityFeePercent(uint256) (#645-647) should emit an event for:
- _liquidityFee = liquidityFee (#646)
BaseToken.setNumTokensSellToAddToLiquidity(uint256) (#649-651) should emit an event for:
- numTokensSellToAddToLiquidity = swapNumber * 10 ** _decimals (#650)
BaseToken.setMaxTxPercent(uint256) (#653-655) should emit an event for:
- _maxTxAmount = maxTxPercent * 10 ** _decimals (#654)
Emit an event for critical parameter changes.
Additional information: link
BaseToken.constructor(string,string,uint256,uint256,uint256,uint256,uint256,uint256,address,address).tokenOwner (#484) lacks a zero-check on :
- _owner = tokenOwner (#510)
Check that the address is not zero.
Additional information: link
Reentrancy in BaseToken._transfer(address,address,uint256) (#760-801):
External calls:
- swapAndLiquify(contractTokenBalance) (#788)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#846-853)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#832-838)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#788)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#846-853)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#800)
- _liquidityFee = _previousLiquidityFee (#745)
- _liquidityFee = 0 (#740)
- _tokenTransfer(from,to,amount,takeFee) (#800)
- _previousLiquidityFee = _liquidityFee (#737)
- _tokenTransfer(from,to,amount,takeFee) (#800)
- _previousTaxFee = _taxFee (#736)
- _tokenTransfer(from,to,amount,takeFee) (#800)
- _tFeeTotal = _tFeeTotal.add(tFee) (#667)
- _tokenTransfer(from,to,amount,takeFee) (#800)
- _taxFee = _previousTaxFee (#744)
- _taxFee = 0 (#739)
Reentrancy in BaseToken.constructor(string,string,uint256,uint256,uint256,uint256,uint256,uint256,address,address) (#484-512):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#502-503)
State variables written after the call(s):
- _isExcludedFromFee[tokenOwner] = true (#507)
- _isExcludedFromFee[address(this)] = true (#508)
- _owner = tokenOwner (#510)
- uniswapV2Router = _uniswapV2Router (#505)
Reentrancy in BaseToken.swapAndLiquify(uint256) (#803-821):
External calls:
- swapTokensForEth(half) (#812)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#832-838)
- addLiquidity(otherHalf,newBalance) (#818)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#846-853)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#818)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#846-853)
State variables written after the call(s):
- addLiquidity(otherHalf,newBalance) (#818)
- _allowances[owner][spender] = amount (#756)
Reentrancy in BaseToken.transferFrom(address,address,uint256) (#550-554):
External calls:
- _transfer(sender,recipient,amount) (#551)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#846-853)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#832-838)
External calls sending eth:
- _transfer(sender,recipient,amount) (#551)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#846-853)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#552)
- _allowances[owner][spender] = amount (#756)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in BaseToken._transfer(address,address,uint256) (#760-801):
External calls:
- swapAndLiquify(contractTokenBalance) (#788)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#846-853)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#832-838)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#788)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#846-853)
Event emitted after the call(s):
- Transfer(sender,recipient,tTransferAmount) (#883)
- _tokenTransfer(from,to,amount,takeFee) (#800)
- Transfer(sender,recipient,tTransferAmount) (#893)
- _tokenTransfer(from,to,amount,takeFee) (#800)
- Transfer(sender,recipient,tTransferAmount) (#903)
- _tokenTransfer(from,to,amount,takeFee) (#800)
- Transfer(sender,recipient,tTransferAmount) (#630)
- _tokenTransfer(from,to,amount,takeFee) (#800)
Reentrancy in BaseToken.constructor(string,string,uint256,uint256,uint256,uint256,uint256,uint256,address,address) (#484-512):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#502-503)
Event emitted after the call(s):
- Transfer(address(0),tokenOwner,_tTotal) (#511)
Reentrancy in BaseToken.swapAndLiquify(uint256) (#803-821):
External calls:
- swapTokensForEth(half) (#812)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#832-838)
- addLiquidity(otherHalf,newBalance) (#818)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#846-853)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#818)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#846-853)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#757)
- addLiquidity(otherHalf,newBalance) (#818)
- SwapAndLiquify(half,newBalance,otherHalf) (#820)
Reentrancy in BaseToken.transferFrom(address,address,uint256) (#550-554):
External calls:
- _transfer(sender,recipient,amount) (#551)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#846-853)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#832-838)
External calls sending eth:
- _transfer(sender,recipient,amount) (#551)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#846-853)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#757)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#552)
Apply the check-effects-interactions pattern.
Additional information: link
Ownable.unlock() (#212-217) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(now > _lockTime,Contract is locked until 7 days) (#214)
Avoid relying on block.timestamp.
Additional information: link
Address.isContract(address) (#105-112) uses assembly
- INLINE ASM (#110)
Address._functionCallWithValue(address,bytes,uint256,string) (#144-163) uses assembly
- INLINE ASM (#155-158)
Do not use evm assembly.
Additional information: link
BaseToken.includeInReward(address) (#610-621) has costly operations inside a loop:
- _excluded.pop() (#617)
Use a local variable to hold the loop computation result.
Additional information: link
Address._functionCallWithValue(address,bytes,uint256,string) (#144-163) is never used and should be removed
Address.functionCall(address,bytes) (#124-126) is never used and should be removed
Address.functionCall(address,bytes,string) (#129-131) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#134-136) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#139-142) is never used and should be removed
Address.isContract(address) (#105-112) is never used and should be removed
Address.sendValue(address,uint256) (#115-121) is never used and should be removed
Context._msgData() (#95-98) is never used and should be removed
SafeMath.mod(uint256,uint256) (#80-82) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#84-87) is never used and should be removed
Remove unused functions.
Additional information: link
Low level call in Address.sendValue(address,uint256) (#115-121):
- (success) = recipient.call{value: amount}() (#119)
Low level call in Address._functionCallWithValue(address,bytes,uint256,string) (#144-163):
- (success,returndata) = target.call{value: weiValue}(data) (#148)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Variable Ownable._owner (#168) is not in mixedCase
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (#255) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (#256) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (#273) is not in mixedCase
Function IUniswapV2Router01.WETH() (#295) is not in mixedCase
Parameter BaseToken.setSwapAndLiquifyEnabled(bool)._enabled (#657) is not in mixedCase
Parameter BaseToken.calculateTaxFee(uint256)._amount (#721) is not in mixedCase
Parameter BaseToken.calculateLiquidityFee(uint256)._amount (#727) is not in mixedCase
Variable BaseToken._taxFee (#455) is not in mixedCase
Variable BaseToken._liquidityFee (#458) is not in mixedCase
Variable BaseToken._maxTxAmount (#467) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#96)" inContext (#90-99)
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 (#300) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#301)
Variable BaseToken._transferFromExcluded(address,address,uint256).rTransferAmount (#897) is too similar to BaseToken._getTValues(uint256).tTransferAmount (#679)
Variable BaseToken._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#687) is too similar to BaseToken._transferStandard(address,address,uint256).tTransferAmount (#878)
Variable BaseToken._transferToExcluded(address,address,uint256).rTransferAmount (#887) is too similar to BaseToken._getTValues(uint256).tTransferAmount (#679)
Variable BaseToken._getValues(uint256).rTransferAmount (#672) is too similar to BaseToken._transferStandard(address,address,uint256).tTransferAmount (#878)
Variable BaseToken._transferFromExcluded(address,address,uint256).rTransferAmount (#897) is too similar to BaseToken._transferFromExcluded(address,address,uint256).tTransferAmount (#897)
Variable BaseToken._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#687) is too similar to BaseToken._getTValues(uint256).tTransferAmount (#679)
Variable BaseToken._transferFromExcluded(address,address,uint256).rTransferAmount (#897) is too similar to BaseToken._transferBothExcluded(address,address,uint256).tTransferAmount (#623)
Variable BaseToken._transferToExcluded(address,address,uint256).rTransferAmount (#887) is too similar to BaseToken._transferFromExcluded(address,address,uint256).tTransferAmount (#897)
Variable BaseToken.reflectionFromToken(uint256,bool).rTransferAmount (#589) is too similar to BaseToken._transferBothExcluded(address,address,uint256).tTransferAmount (#623)
Variable BaseToken._transferToExcluded(address,address,uint256).rTransferAmount (#887) is too similar to BaseToken._transferBothExcluded(address,address,uint256).tTransferAmount (#623)
Variable BaseToken._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#687) is too similar to BaseToken._transferFromExcluded(address,address,uint256).tTransferAmount (#897)
Variable BaseToken._getValues(uint256).rTransferAmount (#672) is too similar to BaseToken._getTValues(uint256).tTransferAmount (#679)
Variable BaseToken._transferBothExcluded(address,address,uint256).rTransferAmount (#623) is too similar to BaseToken._transferStandard(address,address,uint256).tTransferAmount (#878)
Variable BaseToken._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#687) is too similar to BaseToken._transferBothExcluded(address,address,uint256).tTransferAmount (#623)
Variable BaseToken._transferFromExcluded(address,address,uint256).rTransferAmount (#897) is too similar to BaseToken._transferToExcluded(address,address,uint256).tTransferAmount (#887)
Variable BaseToken._transferToExcluded(address,address,uint256).rTransferAmount (#887) is too similar to BaseToken._transferToExcluded(address,address,uint256).tTransferAmount (#887)
Variable BaseToken._getValues(uint256).rTransferAmount (#672) is too similar to BaseToken._transferBothExcluded(address,address,uint256).tTransferAmount (#623)
Variable BaseToken._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#687) is too similar to BaseToken._transferToExcluded(address,address,uint256).tTransferAmount (#887)
Variable BaseToken._transferStandard(address,address,uint256).rTransferAmount (#878) is too similar to BaseToken._transferStandard(address,address,uint256).tTransferAmount (#878)
Variable BaseToken._transferFromExcluded(address,address,uint256).rTransferAmount (#897) is too similar to BaseToken._transferStandard(address,address,uint256).tTransferAmount (#878)
Variable BaseToken.reflectionFromToken(uint256,bool).rTransferAmount (#589) is too similar to BaseToken._transferStandard(address,address,uint256).tTransferAmount (#878)
Variable BaseToken._getValues(uint256).rTransferAmount (#672) is too similar to BaseToken._transferToExcluded(address,address,uint256).tTransferAmount (#887)
Variable BaseToken._transferBothExcluded(address,address,uint256).rTransferAmount (#623) is too similar to BaseToken._transferBothExcluded(address,address,uint256).tTransferAmount (#623)
Variable BaseToken._transferToExcluded(address,address,uint256).rTransferAmount (#887) is too similar to BaseToken._transferStandard(address,address,uint256).tTransferAmount (#878)
Variable BaseToken._transferStandard(address,address,uint256).rTransferAmount (#878) is too similar to BaseToken._transferFromExcluded(address,address,uint256).tTransferAmount (#897)
Variable BaseToken.reflectionFromToken(uint256,bool).rTransferAmount (#589) is too similar to BaseToken._transferFromExcluded(address,address,uint256).tTransferAmount (#897)
Variable BaseToken._transferStandard(address,address,uint256).rTransferAmount (#878) is too similar to BaseToken._transferToExcluded(address,address,uint256).tTransferAmount (#887)
Variable BaseToken._transferStandard(address,address,uint256).rTransferAmount (#878) is too similar to BaseToken._getTValues(uint256).tTransferAmount (#679)
Variable BaseToken._transferStandard(address,address,uint256).rTransferAmount (#878) is too similar to BaseToken._getValues(uint256).tTransferAmount (#671)
Variable BaseToken._getValues(uint256).rTransferAmount (#672) is too similar to BaseToken._transferFromExcluded(address,address,uint256).tTransferAmount (#897)
Variable BaseToken._transferBothExcluded(address,address,uint256).rTransferAmount (#623) is too similar to BaseToken._transferFromExcluded(address,address,uint256).tTransferAmount (#897)
Variable BaseToken.reflectionFromToken(uint256,bool).rTransferAmount (#589) is too similar to BaseToken._transferToExcluded(address,address,uint256).tTransferAmount (#887)
Variable BaseToken.reflectionFromToken(uint256,bool).rTransferAmount (#589) is too similar to BaseToken._getTValues(uint256).tTransferAmount (#679)
Variable BaseToken.reflectionFromToken(uint256,bool).rTransferAmount (#589) is too similar to BaseToken._getValues(uint256).tTransferAmount (#671)
Variable BaseToken._transferFromExcluded(address,address,uint256).rTransferAmount (#897) is too similar to BaseToken._getValues(uint256).tTransferAmount (#671)
Variable BaseToken._transferBothExcluded(address,address,uint256).rTransferAmount (#623) is too similar to BaseToken._transferToExcluded(address,address,uint256).tTransferAmount (#887)
Variable BaseToken._transferBothExcluded(address,address,uint256).rTransferAmount (#623) is too similar to BaseToken._getTValues(uint256).tTransferAmount (#679)
Variable BaseToken._transferBothExcluded(address,address,uint256).rTransferAmount (#623) is too similar to BaseToken._getValues(uint256).tTransferAmount (#671)
Variable BaseToken._transferStandard(address,address,uint256).rTransferAmount (#878) is too similar to BaseToken._transferBothExcluded(address,address,uint256).tTransferAmount (#623)
Variable BaseToken._getValues(uint256).rTransferAmount (#672) is too similar to BaseToken._getValues(uint256).tTransferAmount (#671)
Variable BaseToken._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (#687) is too similar to BaseToken._getValues(uint256).tTransferAmount (#671)
Variable BaseToken._transferToExcluded(address,address,uint256).rTransferAmount (#887) is too similar to BaseToken._getValues(uint256).tTransferAmount (#671)
Prevent variables from having similar names.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#187-190)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#193-197)
geUnlockTime() should be declared external:
- Ownable.geUnlockTime() (#199-201)
lock(uint256) should be declared external:
- Ownable.lock(uint256) (#204-209)
unlock() should be declared external:
- Ownable.unlock() (#212-217)
name() should be declared external:
- BaseToken.name() (#515-517)
symbol() should be declared external:
- BaseToken.symbol() (#519-521)
decimals() should be declared external:
- BaseToken.decimals() (#523-525)
totalSupply() should be declared external:
- BaseToken.totalSupply() (#527-529)
transfer(address,uint256) should be declared external:
- BaseToken.transfer(address,uint256) (#536-539)
allowance(address,address) should be declared external:
- BaseToken.allowance(address,address) (#541-543)
approve(address,uint256) should be declared external:
- BaseToken.approve(address,uint256) (#545-548)
transferFrom(address,address,uint256) should be declared external:
- BaseToken.transferFrom(address,address,uint256) (#550-554)
increaseAllowance(address,uint256) should be declared external:
- BaseToken.increaseAllowance(address,uint256) (#556-559)
decreaseAllowance(address,uint256) should be declared external:
- BaseToken.decreaseAllowance(address,uint256) (#561-564)
isExcludedFromReward(address) should be declared external:
- BaseToken.isExcludedFromReward(address) (#566-568)
totalFees() should be declared external:
- BaseToken.totalFees() (#570-572)
deliver(uint256) should be declared external:
- BaseToken.deliver(uint256) (#574-581)
reflectionFromToken(uint256,bool) should be declared external:
- BaseToken.reflectionFromToken(uint256,bool) (#583-592)
excludeFromReward(address) should be declared external:
- BaseToken.excludeFromReward(address) (#600-608)
excludeFromFee(address) should be declared external:
- BaseToken.excludeFromFee(address) (#633-635)
includeInFee(address) should be declared external:
- BaseToken.includeInFee(address) (#637-639)
setNumTokensSellToAddToLiquidity(uint256) should be declared external:
- BaseToken.setNumTokensSellToAddToLiquidity(uint256) (#649-651)
setMaxTxPercent(uint256) should be declared external:
- BaseToken.setMaxTxPercent(uint256) (#653-655)
setSwapAndLiquifyEnabled(bool) should be declared external:
- BaseToken.setSwapAndLiquifyEnabled(bool) (#657-660)
claimTokens() should be declared external:
- BaseToken.claimTokens() (#717-719)
isExcludedFromFee(address) should be declared external:
- BaseToken.isExcludedFromFee(address) (#748-750)
Use the external attribute for functions never called from the contract.
Additional information: link
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 Twitter account
Telegram account has relatively few subscribers
Unable to find Blog account (Reddit or Medium)
Unable to find Youtube account
Unable to find Discord account