What is Metaxy (MXY)? Metaxy is a decentralized NFT based fighting game, featuring the most diverse anime-inspired characters, that creates a Multiverse where players can summon their favorite superheroes to battle and earn massive rewards of NFT collectibles and MXY tokens. Metaxy takes place in a fantasy world where superheroes are summoned for the great Multiverse War. Each game character comes with different appearances and unique fighting attributes that are developed over time along with the user’s experience. The game allows each player to engage in battle against other online players (PvP) in real-time, whilst during idling, players can immerse themselves in an enticing narrative story plot (PvE) with intense AI-based combat governed by a wide range of Metaxy superheroes. In the first period, every player will be offered 4 characters for free to choose one from them and with that character they can have prior experience of the game. But they can't earn MXY tokens without using NFT characters. They need to buy character NFTs on the secondary market - the Marketplace or open packages in game. During GamePlay, players will have a chance to receive rewards as Card Equipment NFTs and MXY Tokens. Players can sell these NFTs on the secondary market to new players. Players can use MXY tokens to Swap to Coins (in-game) to upgrade character levels. Players can use MXY tokens to Buy Souls to evolve and upgrade the level of their Characters. Players can use Card Equipment NFTs for their characters to strengthen them. The more powerful characters they have, the more tokens they earn. By owning NFTs, players can take part in the decentralized financial market to earn more profit. What’s more, players can stake MXY and NFTs on the Marketplace to earn MXY and other rewards! Who are the founders of Metaxy? The game is created by Onegame Studio, a famous game studio with more than millions of users and many significant achievements for their mobile version games, and incubated by V2B Labs, one of the pioneering blockchain incubators in Vietnam. Established in 05/2013, Onegame has millions of users using their apps on both Apple and Google Play store. On 12/2020, Onegame was proud to receive the prestigious award from HUAWEI. The mobile version of Metaxy has won a place in the Best Game award category for AppsUP 2020 – Huawei HMS App Innovation Contest (APAC) and formed a solid community with almost 500k organic users. What Makes Metaxy Unique? Metaverse is the new trend of conversion to create liquidity for NFT. Although the coverage of the internet in everyone’s daily life is undeniable, recently, as there has been an enormous increase in the number of people who are interested in cryptocurrencies and NFT games, Metaverse can be utilized in visual reality so that users can have more methods of buying and spending their money.
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Pragma version^0.8.0 (@openzeppelin/contracts/access/Ownable.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/ERC20.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/Address.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/Context.sol#3) allows old versions
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
MxyToken.constructor(address,uint256)._totalSupply (contracts/token/MxyToken.sol#21) shadows:
- ERC20._totalSupply (@openzeppelin/contracts/token/ERC20/ERC20.sol#38) (state variable)
MxyToken.mint(uint256).totalSupply (contracts/token/MxyToken.sol#42) shadows:
- ERC20.totalSupply() (@openzeppelin/contracts/token/ERC20/ERC20.sol#92-94) (function)
- IERC20.totalSupply() (@openzeppelin/contracts/token/ERC20/IERC20.sol#12) (function)
Rename the local variables that shadow another component.
Additional information: link
MxyToken.enableAntiWhale(uint256,uint256) (contracts/token/MxyToken.sol#89-99) should emit an event for:
- antiWhaleAmount = _amount (contracts/token/MxyToken.sol#97)
- antiWhaleTime = block.timestamp + _duration (contracts/token/MxyToken.sol#98)
Emit an event for critical parameter changes.
Additional information: link
MxyToken._transfer(address,address,uint256) (contracts/token/MxyToken.sol#139-155) uses timestamp for comparisons
Dangerous comparisons:
- antiWhaleTime > block.timestamp && _amount > antiWhaleAmount && whales[_sender] (contracts/token/MxyToken.sol#146-148)
Avoid relying on block.timestamp.
Additional information: link
Address.isContract(address) (@openzeppelin/contracts/utils/Address.sol#26-36) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/Address.sol#32-34)
Address._verifyCallResult(bool,bytes,string) (@openzeppelin/contracts/utils/Address.sol#189-209) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/Address.sol#201-204)
Do not use evm assembly.
Additional information: link
Different versions of Solidity is used:
- Version used: ['0.8.4', '^0.8.0']
- ^0.8.0 (@openzeppelin/contracts/access/Ownable.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/ERC20.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/Address.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/Context.sol#3)
- 0.8.4 (contracts/token/MxyToken.sol#3)
Use one Solidity version.
Additional information: link
Address.functionCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#79-81) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (@openzeppelin/contracts/utils/Address.sol#108-114) is never used and should be removed
Address.functionDelegateCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#168-170) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#178-187) is never used and should be removed
Address.functionStaticCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#141-143) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#151-160) is never used and should be removed
Address.sendValue(address,uint256) (@openzeppelin/contracts/utils/Address.sol#54-59) is never used and should be removed
Context._msgData() (@openzeppelin/contracts/utils/Context.sol#20-22) is never used and should be removed
SafeERC20.safeApprove(IERC20,address,uint256) (@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#44-57) is never used and should be removed
SafeERC20.safeDecreaseAllowance(IERC20,address,uint256) (@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#68-79) is never used and should be removed
SafeERC20.safeIncreaseAllowance(IERC20,address,uint256) (@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#59-66) is never used and should be removed
SafeERC20.safeTransferFrom(IERC20,address,address,uint256) (@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#28-35) is never used and should be removed
Remove unused functions.
Additional information: link
Low level call in Address.sendValue(address,uint256) (@openzeppelin/contracts/utils/Address.sol#54-59):
- (success) = recipient.call{value: amount}() (@openzeppelin/contracts/utils/Address.sol#57)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts/utils/Address.sol#122-133):
- (success,returndata) = target.call{value: value}(data) (@openzeppelin/contracts/utils/Address.sol#131)
Low level call in Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#151-160):
- (success,returndata) = target.staticcall(data) (@openzeppelin/contracts/utils/Address.sol#158)
Low level call in Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#178-187):
- (success,returndata) = target.delegatecall(data) (@openzeppelin/contracts/utils/Address.sol#185)
Low level call in MxyToken.emergencyWithdraw(IERC20,address,uint256) (contracts/token/MxyToken.sol#125-137):
- (success) = _to.call{value: _amount}() (contracts/token/MxyToken.sol#132)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Parameter MxyToken.mint(uint256)._amount (contracts/token/MxyToken.sol#41) is not in mixedCase
Parameter MxyToken.setWhale(address)._account (contracts/token/MxyToken.sol#60) is not in mixedCase
Parameter MxyToken.removeWhale(address)._account (contracts/token/MxyToken.sol#74) is not in mixedCase
Parameter MxyToken.enableAntiWhale(uint256,uint256)._amount (contracts/token/MxyToken.sol#89) is not in mixedCase
Parameter MxyToken.enableAntiWhale(uint256,uint256)._duration (contracts/token/MxyToken.sol#89) is not in mixedCase
Parameter MxyToken.emergencyWithdraw(IERC20,address,uint256)._token (contracts/token/MxyToken.sol#126) is not in mixedCase
Parameter MxyToken.emergencyWithdraw(IERC20,address,uint256)._to (contracts/token/MxyToken.sol#127) is not in mixedCase
Parameter MxyToken.emergencyWithdraw(IERC20,address,uint256)._amount (contracts/token/MxyToken.sol#128) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (@openzeppelin/contracts/access/Ownable.sol#53-55)
name() should be declared external:
- ERC20.name() (@openzeppelin/contracts/token/ERC20/ERC20.sol#60-62)
symbol() should be declared external:
- ERC20.symbol() (@openzeppelin/contracts/token/ERC20/ERC20.sol#68-70)
decimals() should be declared external:
- ERC20.decimals() (@openzeppelin/contracts/token/ERC20/ERC20.sol#85-87)
balanceOf(address) should be declared external:
- ERC20.balanceOf(address) (@openzeppelin/contracts/token/ERC20/ERC20.sol#99-101)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#111-114)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#130-133)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#148-162)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#176-179)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#195-203)
burn(uint256) should be declared external:
- ERC20Burnable.burn(uint256) (@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol#19-21)
burnFrom(address,uint256) should be declared external:
- ERC20Burnable.burnFrom(address,uint256) (@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol#34-41)
mint(uint256) should be declared external:
- MxyToken.mint(uint256) (contracts/token/MxyToken.sol#41-49)
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 whitepaper 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 scam / 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
Token has relatively low CoinMarketCap rank
Last post in Twitter was more than 30 days ago
Unable to find Youtube account
Unable to find Discord account