Meta Spatial - An Innovative #Metaverse Gaming Platform
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
DexListing._updateAndGetListingFee(address,address,uint256) (#719-747) uses a dangerous strict equality:
- _listingStartAt == 0 (#727)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
Reentrancy in DexListing._updateAndGetListingFee(address,address,uint256) (#719-747):
External calls:
- LDex._isPair(recipient_) && amount_ > 0 (#729)
State variables written after the call(s):
- _startListing() (#730)
- _listingStartAt = block.timestamp (#693)
Apply the check-effects-interactions pattern.
Additional information: link
FairlaunchToken._transfer(address,address,uint256).transferFee (#833) shadows:
- TransferFee.transferFee() (#626-632) (function)
Rename the local variables that shadow another component.
Additional information: link
Reentrancy in FairlaunchToken._transfer(address,address,uint256) (#814-843):
External calls:
- fee = _updateAndGetListingFee(sender_,recipient_,amount_) (#824)
- LDex._isPair(recipient_) && amount_ > 0 (#729)
- (success,data) = pair_.call((abi.encodeWithSelector(FACTORY_SELECTOR))) (#648-649)
- ! LDex._isPair(sender_) && ! LDex._isPair(recipient_) (#739)
State variables written after the call(s):
- super._transfer(sender_,_getTransferFeeTo(),fee) (#829)
- _balances[sender] = senderBalance - amount (#306)
- _balances[recipient] += amount (#308)
- super._transfer(sender_,recipient_,transferA) (#831)
- _balances[sender] = senderBalance - amount (#306)
- _balances[recipient] += amount (#308)
Reentrancy in FairlaunchToken._transfer(address,address,uint256) (#814-843):
External calls:
- transferFee = _getTransferFee(sender_,recipient_,amount_) (#833)
- LDex._isPair(recipient_) (#607)
- (success,data) = pair_.call((abi.encodeWithSelector(FACTORY_SELECTOR))) (#648-649)
- LDex._isPair(sender_) (#610)
State variables written after the call(s):
- super._transfer(sender_,_getTransferFeeTo(),transferFee) (#837)
- _balances[sender] = senderBalance - amount (#306)
- _balances[recipient] += amount (#308)
- super._transfer(sender_,recipient_,transferA_scope_0) (#840)
- _balances[sender] = senderBalance - amount (#306)
- _balances[recipient] += amount (#308)
Reentrancy in DexListing._updateAndGetListingFee(address,address,uint256) (#719-747):
External calls:
- LDex._isPair(recipient_) && amount_ > 0 (#729)
State variables written after the call(s):
- _startListing() (#730)
- _listingFeePercent = 100 (#694)
- _startListing() (#730)
- _originOwner = originOwner_ (#521)
Reentrancy in DexListing.constructor(uint256) (#677-687):
External calls:
- wbnbPair = LDex._createPair(router,LDex._wbnb) (#685)
- busdPair = LDex._createPair(router,LDex._busd) (#686)
State variables written after the call(s):
- busdPair = LDex._createPair(router,LDex._busd) (#686)
Reentrancy in FairlaunchToken.constructor(string,string,uint256,uint256) (#801-812):
External calls:
- DexListing(listingDuration_) (#808)
- IUniswapV2Factory(IUniswapV2Router02(router_).factory()).createPair(address(this),pairedToken_) (#660-661)
- wbnbPair = LDex._createPair(router,LDex._wbnb) (#685)
- busdPair = LDex._createPair(router,LDex._busd) (#686)
State variables written after the call(s):
- _mint(msg.sender,initSupply_) (#810)
- _balances[account] += amount (#330)
- _mint(msg.sender,initSupply_) (#810)
- _totalSupply += amount (#329)
- _setTransferFee(msg.sender,0,0,0) (#811)
- _transferFee.to = to_ (#592)
- _transferFee.buy = buyFee_ (#593)
- _transferFee.sell = sellFee_ (#594)
- _transferFee.normal = normalFee_ (#595)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in FairlaunchToken._transfer(address,address,uint256) (#814-843):
External calls:
- fee = _updateAndGetListingFee(sender_,recipient_,amount_) (#824)
- LDex._isPair(recipient_) && amount_ > 0 (#729)
- (success,data) = pair_.call((abi.encodeWithSelector(FACTORY_SELECTOR))) (#648-649)
- ! LDex._isPair(sender_) && ! LDex._isPair(recipient_) (#739)
Event emitted after the call(s):
- Transfer(sender,recipient,amount) (#310)
- super._transfer(sender_,_getTransferFeeTo(),fee) (#829)
- Transfer(sender,recipient,amount) (#310)
- super._transfer(sender_,recipient_,transferA) (#831)
Reentrancy in FairlaunchToken._transfer(address,address,uint256) (#814-843):
External calls:
- transferFee = _getTransferFee(sender_,recipient_,amount_) (#833)
- LDex._isPair(recipient_) (#607)
- (success,data) = pair_.call((abi.encodeWithSelector(FACTORY_SELECTOR))) (#648-649)
- LDex._isPair(sender_) (#610)
Event emitted after the call(s):
- Transfer(sender,recipient,amount) (#310)
- super._transfer(sender_,_getTransferFeeTo(),transferFee) (#837)
- Transfer(sender,recipient,amount) (#310)
- super._transfer(sender_,recipient_,transferA_scope_0) (#840)
Reentrancy in DexListing._updateAndGetListingFee(address,address,uint256) (#719-747):
External calls:
- LDex._isPair(recipient_) && amount_ > 0 (#729)
Event emitted after the call(s):
- ChangeOriginOwner(originOwner_) (#522)
- _startListing() (#730)
Reentrancy in FairlaunchToken.constructor(string,string,uint256,uint256) (#801-812):
External calls:
- DexListing(listingDuration_) (#808)
- IUniswapV2Factory(IUniswapV2Router02(router_).factory()).createPair(address(this),pairedToken_) (#660-661)
- wbnbPair = LDex._createPair(router,LDex._wbnb) (#685)
- busdPair = LDex._createPair(router,LDex._busd) (#686)
Event emitted after the call(s):
- SetTransferFee(_transferFee) (#596)
- _setTransferFee(msg.sender,0,0,0) (#811)
- Transfer(address(0),account,amount) (#331)
- _mint(msg.sender,initSupply_) (#810)
Apply the check-effects-interactions pattern.
Additional information: link
DexListing._updateListingFee() (#706-717) uses timestamp for comparisons
Dangerous comparisons:
- pastTime > _listingDuration (#710)
DexListing._updateAndGetListingFee(address,address,uint256) (#719-747) uses timestamp for comparisons
Dangerous comparisons:
- _listingStartAt == 0 (#727)
- _listingStartAt + _listingDuration <= block.timestamp (#735)
Avoid relying on block.timestamp.
Additional information: link
Context._msgData() (#102-104) is never used and should be removed
ERC20._burn(address,uint256) (#347-362) is never used and should be removed
Remove unused functions.
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
Low level call in LDex._isPair(address) (#641-651):
- (success,data) = pair_.call((abi.encodeWithSelector(FACTORY_SELECTOR))) (#648-649)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Constant LDex._wbnb (#638) is not in UPPER_CASE_WITH_UNDERSCORES
Constant LDex._busd (#639) is not in UPPER_CASE_WITH_UNDERSCORES
Variable DexListing._listingFinished (#675) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable OriginOwner._originOwner (#509) is too similar to OriginOwner._changeOriginOwner(address).originOwner_ (#517)
Variable OriginOwner._originOwner (#509) is too similar to OriginOwner.changeOriginOwner(address).originOwner_ (#532)
Variable DexListing._listingDuration (#672) is too similar to DexListing.constructor(uint256).listingDuration_ (#678)
Variable GasPriceController._maxGasPrice (#779) is too similar to GasPriceController._setMaxGasPrice(uint256).maxGasPrice_ (#782)
Variable DexListing._listingDuration (#672) is too similar to FairlaunchToken.constructor(string,string,uint256,uint256).listingDuration_ (#804)
Variable GasPriceController._maxGasPrice (#779) is too similar to FairlaunchToken.setMaxGasPrice(uint256).maxGasPrice_ (#850)
Prevent variables from having similar names.
Additional information: link
LDex._wbnb (#638) is never used in LDex (#635-663)
LDex._busd (#639) is never used in LDex (#635-663)
TransferFee.FACTORY_SELECTOR (#565) is never used in FairlaunchToken (#800-870)
Remove unused state variables.
Additional information: link
name() should be declared external:
- ERC20.name() (#134-136)
symbol() should be declared external:
- ERC20.symbol() (#142-144)
decimals() should be declared external:
- ERC20.decimals() (#159-161)
totalSupply() should be declared external:
- ERC20.totalSupply() (#166-168)
balanceOf(address) should be declared external:
- ERC20.balanceOf(address) (#173-175)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (#185-188)
allowance(address,address) should be declared external:
- ERC20.allowance(address,address) (#193-195)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (#204-207)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (#222-236)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (#250-253)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (#269-277)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#464-466)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#472-475)
isOriginOwner() should be declared external:
- OriginOwner.isOriginOwner() (#555-561)
transferFee() should be declared external:
- TransferFee.transferFee() (#626-632)
listingDuration() should be declared external:
- DexListing.listingDuration() (#749-755)
listingFinished() should be declared external:
- DexListing.listingFinished() (#757-763)
Use the external attribute for functions never called from the contract.
Additional information: link
Unable to find token contract audit
Unable to find audit link on the website
Unable to find token on CoinHunt
Additional information: link
Unable to find code repository for the project
Young tokens have high risks of price dump / death
Young tokens have high risks of scam / price dump / death
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
Token has relatively low CoinGecko rank
Last post in Twitter was more than 30 days ago
Unable to find Youtube account
Unable to find Discord account