Before becoming an NFT game, World Of Masters was the most successful Card-Battle game in Vietnam in 2021 and regularly in the TOP "Editors's Choice" of the AppStore. Not only an attractive Play2Earn NFT project, World Of Masters is also a Free2Play game with attractive gameplay and graphics, highly appreciated by gamers and the AppStore.
AccessControlEnumerable._grantRole(bytes32,address) (#1985-1988) ignores return value by _roleMembers[role].add(account) (#1987)
AccessControlEnumerable._revokeRole(bytes32,address) (#1993-1996) ignores return value by _roleMembers[role].remove(account) (#1995)
Ensure that all the return values of the function calls are used.
Additional information: link
ERC20Permit.constructor(string).name (#1109) shadows:
- ERC20.name() (#208-210) (function)
- IERC20Metadata.name() (#105) (function)
WoM20Payable.constructor(string,string).name (#2025) shadows:
- ERC20.name() (#208-210) (function)
- IERC20Metadata.name() (#105) (function)
WoM20Payable.constructor(string,string).symbol (#2025) shadows:
- ERC20.symbol() (#216-218) (function)
- IERC20Metadata.symbol() (#110) (function)
WofM.constructor(string,string).name (#2718) shadows:
- ERC20.name() (#208-210) (function)
- IERC20Metadata.name() (#105) (function)
WofM.constructor(string,string).symbol (#2718) shadows:
- ERC20.symbol() (#216-218) (function)
- IERC20Metadata.symbol() (#110) (function)
Rename the local variables that shadow another component.
Additional information: link
Variable 'ECDSA.tryRecover(bytes32,bytes).r (#746)' in ECDSA.tryRecover(bytes32,bytes) (#741-770) potentially used before declaration: r = mload(uint256)(signature + 0x20) (#763)
Move all variable declarations prior to any usage of the variable, and ensure that reaching a variable declaration does not depend on some conditional if it is used unconditionally.
Additional information: link
Reentrancy in WoMWithdrawable.withdrawERC1155(IERC1155,address,uint256,uint256,bytes) (#2697-2700):
External calls:
- nft.safeTransferFrom(address(this),recipient,tokenId,amount,data) (#2698)
Event emitted after the call(s):
- ERC1155Withdrawal(nft,recipient,tokenId,amount) (#2699)
Reentrancy in WoMWithdrawable.withdrawERC20(IERC20,address,uint256) (#2681-2684):
External calls:
- token.safeTransfer(recipient,amount) (#2682)
Event emitted after the call(s):
- ERC20Withdrawal(token,recipient,amount) (#2683)
Reentrancy in WoMWithdrawable.withdrawERC721(IERC721,address,uint256) (#2689-2692):
External calls:
- nft.safeTransferFrom(address(this),recipient,tokenId) (#2690)
Event emitted after the call(s):
- ERC721Withdrawal(nft,recipient,tokenId) (#2691)
Reentrancy in WoMWithdrawable.withdrawNativeToken(address,uint256) (#2702-2705):
External calls:
- recipient.sendValue(amount) (#2703)
Event emitted after the call(s):
- NativeTokenWithdrawal(recipient,amount) (#2704)
Apply the check-effects-interactions pattern.
Additional information: link
ERC20Permit.permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (#1114-1133) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp <= deadline,ERC20Permit: expired deadline) (#1123)
WoM20Payable.payment(uint256,uint256,uint256,uint256,bytes) (#2041-2058) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp <= deadline,WoM20Payable: expired deadline) (#2042)
Avoid relying on block.timestamp.
Additional information: link
ECDSA.tryRecover(bytes32,bytes) (#741-770) uses assembly
- INLINE ASM (#751-755)
- INLINE ASM (#762-765)
ECDSA.tryRecover(bytes32,bytes32,bytes32) (#799-811) uses assembly
- INLINE ASM (#806-809)
EnumerableSet.values(EnumerableSet.AddressSet) (#1848-1857) uses assembly
- INLINE ASM (#1852-1854)
EnumerableSet.values(EnumerableSet.UintSet) (#1921-1930) uses assembly
- INLINE ASM (#1925-1927)
Address.isContract(address) (#2094-2104) uses assembly
- INLINE ASM (#2100-2102)
Address.verifyCallResult(bool,bytes,string) (#2263-2283) uses assembly
- INLINE ASM (#2275-2278)
Do not use evm assembly.
Additional information: link
AccessControl._setRoleAdmin(bytes32,bytes32) (#1541-1545) is never used and should be removed
Address.functionCall(address,bytes) (#2147-2149) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#2176-2182) is never used and should be removed
Address.functionDelegateCall(address,bytes) (#2236-2238) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (#2246-2255) is never used and should be removed
Address.functionStaticCall(address,bytes) (#2209-2211) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (#2219-2228) is never used and should be removed
Context._msgData() (#141-143) is never used and should be removed
Counters.decrement(Counters.Counter) (#1060-1066) is never used and should be removed
Counters.reset(Counters.Counter) (#1068-1070) is never used and should be removed
ECDSA.recover(bytes32,bytes32,bytes32) (#818-826) is never used and should be removed
ECDSA.toEthSignedMessageHash(bytes) (#902-904) is never used and should be removed
ECDSA.toEthSignedMessageHash(bytes32) (#888-892) is never used and should be removed
EnumerableSet._values(EnumerableSet.Set) (#1716-1718) is never used and should be removed
EnumerableSet.add(EnumerableSet.Bytes32Set,bytes32) (#1732-1734) is never used and should be removed
EnumerableSet.add(EnumerableSet.UintSet,uint256) (#1871-1873) is never used and should be removed
EnumerableSet.at(EnumerableSet.Bytes32Set,uint256) (#1770-1772) is never used and should be removed
EnumerableSet.at(EnumerableSet.UintSet,uint256) (#1909-1911) is never used and should be removed
EnumerableSet.contains(EnumerableSet.AddressSet,address) (#1815-1817) is never used and should be removed
EnumerableSet.contains(EnumerableSet.Bytes32Set,bytes32) (#1749-1751) is never used and should be removed
EnumerableSet.contains(EnumerableSet.UintSet,uint256) (#1888-1890) is never used and should be removed
EnumerableSet.length(EnumerableSet.Bytes32Set) (#1756-1758) is never used and should be removed
EnumerableSet.length(EnumerableSet.UintSet) (#1895-1897) is never used and should be removed
EnumerableSet.remove(EnumerableSet.Bytes32Set,bytes32) (#1742-1744) is never used and should be removed
EnumerableSet.remove(EnumerableSet.UintSet,uint256) (#1881-1883) is never used and should be removed
EnumerableSet.values(EnumerableSet.AddressSet) (#1848-1857) is never used and should be removed
EnumerableSet.values(EnumerableSet.Bytes32Set) (#1782-1784) is never used and should be removed
EnumerableSet.values(EnumerableSet.UintSet) (#1921-1930) is never used and should be removed
SafeERC20.safeApprove(IERC20,address,uint256) (#2331-2344) is never used and should be removed
SafeERC20.safeDecreaseAllowance(IERC20,address,uint256) (#2355-2366) is never used and should be removed
SafeERC20.safeIncreaseAllowance(IERC20,address,uint256) (#2346-2353) is never used and should be removed
SafeERC20.safeTransferFrom(IERC20,address,address,uint256) (#2315-2322) is never used and should be removed
Strings.toHexString(uint256) (#655-666) is never used and should be removed
Strings.toString(uint256) (#630-650) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.0 (#8) allows old versions
Pragma version^0.8.0 (#94) allows old versions
Pragma version^0.8.0 (#124) allows old versions
Pragma version^0.8.0 (#152) allows old versions
Pragma version^0.8.0 (#510) allows old versions
Pragma version^0.8.0 (#555) allows old versions
Pragma version^0.8.0 (#619) allows old versions
Pragma version^0.8.0 (#690) allows old versions
Pragma version^0.8.0 (#926) allows old versions
Pragma version^0.8.0 (#1032) allows old versions
Pragma version^0.8.0 (#1079) allows old versions
Pragma version^0.8.0 (#1168) allows old versions
Pragma version^0.8.0 (#1260) allows old versions
Pragma version^0.8.0 (#1293) allows old versions
Pragma version^0.8.0 (#1322) allows old versions
Pragma version^0.8.0 (#1353) allows old versions
Pragma version^0.8.0 (#1578) allows old versions
Pragma version^0.8.0 (#1939) allows old versions
Pragma version^0.8.0 (#2002) allows old versions
Pragma version^0.8.0 (#2071) allows old versions
Pragma version^0.8.0 (#2292) allows old versions
Pragma version^0.8.0 (#2393) allows old versions
Pragma version^0.8.0 (#2533) allows old versions
Pragma version^0.8.0 (#2651) allows old versions
Pragma version^0.8.0 (#2711) allows old versions
solc-0.8.13 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) (#2122-2127):
- (success) = recipient.call{value: amount}() (#2125)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (#2190-2201):
- (success,returndata) = target.call{value: value}(data) (#2199)
Low level call in Address.functionStaticCall(address,bytes,string) (#2219-2228):
- (success,returndata) = target.staticcall(data) (#2226)
Low level call in Address.functionDelegateCall(address,bytes,string) (#2246-2255):
- (success,returndata) = target.delegatecall(data) (#2253)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IERC20Permit.DOMAIN_SEPARATOR() (#610) is not in mixedCase
Variable EIP712._CACHED_DOMAIN_SEPARATOR (#951) is not in mixedCase
Variable EIP712._CACHED_CHAIN_ID (#952) is not in mixedCase
Variable EIP712._CACHED_THIS (#953) is not in mixedCase
Variable EIP712._HASHED_NAME (#955) is not in mixedCase
Variable EIP712._HASHED_VERSION (#956) is not in mixedCase
Variable EIP712._TYPE_HASH (#957) is not in mixedCase
Function ERC20Permit.DOMAIN_SEPARATOR() (#1146-1148) is not in mixedCase
Variable ERC20Permit._PERMIT_TYPEHASH (#1101-1102) is not in mixedCase
Variable WoM20Payable._PAYMENT_TYPEHASH (#2016-2017) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable WofM.TOTAL_SUPPLY (#2716) is too similar to ERC20._totalSupply (#186)
Prevent variables from having similar names.
Additional information: link
name() should be declared external:
- ERC20.name() (#208-210)
symbol() should be declared external:
- ERC20.symbol() (#216-218)
decimals() should be declared external:
- ERC20.decimals() (#233-235)
totalSupply() should be declared external:
- ERC20.totalSupply() (#240-242)
balanceOf(address) should be declared external:
- ERC20.balanceOf(address) (#247-249)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (#259-262)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (#278-281)
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (#296-310)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (#324-327)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (#343-351)
burn(uint256) should be declared external:
- ERC20Burnable.burn(uint256) (#524-526)
burnFrom(address,uint256) should be declared external:
- ERC20Burnable.burnFrom(address,uint256) (#539-546)
permit(address,address,uint256,uint256,uint8,bytes32,bytes32) should be declared external:
- ERC20Permit.permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (#1114-1133)
nonces(address) should be declared external:
- ERC20Permit.nonces(address) (#1138-1140)
grantRole(bytes32,address) should be declared external:
- AccessControl.grantRole(bytes32,address) (#1477-1479)
revokeRole(bytes32,address) should be declared external:
- AccessControl.revokeRole(bytes32,address) (#1490-1492)
renounceRole(bytes32,address) should be declared external:
- AccessControl.renounceRole(bytes32,address) (#1508-1512)
getRoleMember(bytes32,uint256) should be declared external:
- AccessControlEnumerable.getRoleMember(bytes32,uint256) (#1970-1972)
getRoleMemberCount(bytes32) should be declared external:
- AccessControlEnumerable.getRoleMemberCount(bytes32) (#1978-1980)
Use the external attribute for functions never called from the contract.
Additional information: link
BscScan page for the token does not contain additional info: website, socials, description, etc.
Additional information: link
Unable to find token on CoinGecko
Additional information: link
Unable to find token on CoinMarketCap
Additional information: link
Unable to find audit link on the website
Token is not listed at Mobula.Finance
Additional information: link
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
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Young tokens have high risks of price dump / death
Young tokens have high risks of price dump / death