Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Reentrancy in ERC721Standard._safeMint(address,string,address[],uint256[]) (#1530-1555):
External calls:
- super._safeMint(_to,currentTokenId) (#1549)
- IERC721Receiver(to).onERC721Received(_msgSender(),from,tokenId,_data) (#814-825)
State variables written after the call(s):
- currentTokenId ++ (#1554)
Apply the check-effects-interactions pattern.
Additional information: link
ERC721._checkOnERC721Received(address,address,uint256,bytes) (#810-829) ignores return value by IERC721Receiver(to).onERC721Received(_msgSender(),from,tokenId,_data) (#814-825)
Ensure that all the return values of the function calls are used.
Additional information: link
ERC721Standard.constructor(string,string)._name (#1452) shadows:
- ERC721._name (#494) (state variable)
ERC721Standard.constructor(string,string)._symbol (#1453) shadows:
- ERC721._symbol (#497) (state variable)
ERC721Shared.constructor(string,string)._name (#1570) shadows:
- ERC721._name (#494) (state variable)
ERC721Shared.constructor(string,string)._symbol (#1571) shadows:
- ERC721._symbol (#497) (state variable)
Rename the local variables that shadow another component.
Additional information: link
ERC721._checkOnERC721Received(address,address,uint256,bytes) (#810-829) has external calls inside a loop: IERC721Receiver(to).onERC721Received(_msgSender(),from,tokenId,_data) (#814-825)
Favor pull over push strategy for external calls.
Additional information: link
Variable 'ERC721._checkOnERC721Received(address,address,uint256,bytes).retval (#814)' in ERC721._checkOnERC721Received(address,address,uint256,bytes) (#810-829) potentially used before declaration: retval == IERC721Receiver(to).onERC721Received.selector (#815)
Variable 'ERC721._checkOnERC721Received(address,address,uint256,bytes).reason (#816)' in ERC721._checkOnERC721Received(address,address,uint256,bytes) (#810-829) potentially used before declaration: reason.length == 0 (#817)
Variable 'ERC721._checkOnERC721Received(address,address,uint256,bytes).reason (#816)' in ERC721._checkOnERC721Received(address,address,uint256,bytes) (#810-829) potentially used before declaration: revert(uint256,uint256)(32 + reason,mload(uint256)(reason)) (#822)
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 ERC721Standard._safeMint(address,string,address[],uint256[]) (#1530-1555):
External calls:
- super._safeMint(_to,currentTokenId) (#1549)
- IERC721Receiver(to).onERC721Received(_msgSender(),from,tokenId,_data) (#814-825)
State variables written after the call(s):
- feeAddresses[currentTokenId] = _feeAddresses (#1552)
- fees[currentTokenId] = _fees (#1553)
- uri[currentTokenId] = _uri (#1551)
Apply the check-effects-interactions pattern.
Additional information: link
Address.isContract(address) (#211-220) uses assembly
- INLINE ASM (#218)
Address._verifyCallResult(bool,bytes,string) (#356-373) uses assembly
- INLINE ASM (#365-368)
ERC721._checkOnERC721Received(address,address,uint256,bytes) (#810-829) uses assembly
- INLINE ASM (#821-823)
Do not use evm assembly.
Additional information: link
ERC721Enumerable._removeTokenFromAllTokensEnumeration(uint256) (#1005-1023) has costly operations inside a loop:
- delete _allTokensIndex[tokenId] (#1021)
ERC721Enumerable._removeTokenFromAllTokensEnumeration(uint256) (#1005-1023) has costly operations inside a loop:
- _allTokens.pop() (#1022)
ERC721Enumerable._removeTokenFromOwnerEnumeration(address,uint256) (#980-998) has costly operations inside a loop:
- delete _ownedTokensIndex[tokenId] (#996)
ERC721Standard._safeMint(address,string,address[],uint256[]) (#1530-1555) has costly operations inside a loop:
- currentTokenId ++ (#1554)
Use a local variable to hold the loop computation result.
Additional information: link
AccessControl._setRoleAdmin(bytes32,bytes32) (#1261-1264) is never used and should be removed
Address._verifyCallResult(bool,bytes,string) (#356-373) is never used and should be removed
Address.functionCall(address,bytes) (#264-266) is never used and should be removed
Address.functionCall(address,bytes,string) (#274-276) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#289-291) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#299-306) is never used and should be removed
Address.functionDelegateCall(address,bytes) (#338-340) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (#348-354) is never used and should be removed
Address.functionStaticCall(address,bytes) (#314-316) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (#324-330) is never used and should be removed
Address.sendValue(address,uint256) (#238-244) is never used and should be removed
Context._msgData() (#391-394) is never used and should be removed
ERC721._baseURI() (#575-577) is never used and should be removed
Strings.toHexString(uint256) (#431-442) is never used and should be removed
Strings.toString(uint256) (#406-426) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version0.8.3 (#3) allows old versions
solc-0.8.3 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) (#238-244):
- (success) = recipient.call{value: amount}() (#242)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (#299-306):
- (success,returndata) = target.call{value: value}(data) (#304)
Low level call in Address.functionStaticCall(address,bytes,string) (#324-330):
- (success,returndata) = target.staticcall(data) (#328)
Low level call in Address.functionDelegateCall(address,bytes,string) (#348-354):
- (success,returndata) = target.delegatecall(data) (#352)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Constant Strings.alphabet (#401) is not in UPPER_CASE_WITH_UNDERSCORES
Parameter ERC721.safeTransferFrom(address,address,uint256,bytes)._data (#639) is not in mixedCase
Parameter ERC721Standard.mint(address,string,address[],uint256[])._to (#1462) is not in mixedCase
Parameter ERC721Standard.mint(address,string,address[],uint256[])._uri (#1463) is not in mixedCase
Parameter ERC721Standard.mint(address,string,address[],uint256[])._feeAddresses (#1464) is not in mixedCase
Parameter ERC721Standard.mint(address,string,address[],uint256[])._fees (#1465) is not in mixedCase
Parameter ERC721Standard.batchMint(address[],string[],address[][],uint256[][])._to (#1472) is not in mixedCase
Parameter ERC721Standard.batchMint(address[],string[],address[][],uint256[][])._uri (#1473) is not in mixedCase
Parameter ERC721Standard.batchMint(address[],string[],address[][],uint256[][])._feeAddresses (#1474) is not in mixedCase
Parameter ERC721Standard.batchMint(address[],string[],address[][],uint256[][])._fees (#1475) is not in mixedCase
Parameter ERC721Standard.setFeeAddress(uint256,uint256,address)._tokenId (#1486) is not in mixedCase
Parameter ERC721Standard.setFeeAddress(uint256,uint256,address)._addressPosition (#1487) is not in mixedCase
Parameter ERC721Standard.setFeeAddress(uint256,uint256,address)._feeAddress (#1488) is not in mixedCase
Parameter ERC721Standard.tokenURI(uint256)._tokenId (#1498) is not in mixedCase
Parameter ERC721Standard.getFeeAddresses(uint256)._tokenId (#1504) is not in mixedCase
Parameter ERC721Standard.getFees(uint256)._tokenId (#1510) is not in mixedCase
Parameter ERC721Standard.getFeeInfo(uint256)._tokenId (#1516) is not in mixedCase
Parameter ERC721Standard.supportsInterface(bytes4)._interfaceId (#1522) is not in mixedCase
Parameter ERC721Shared.mint(address,string,address[],uint256[])._to (#1576) is not in mixedCase
Parameter ERC721Shared.mint(address,string,address[],uint256[])._uri (#1577) is not in mixedCase
Parameter ERC721Shared.mint(address,string,address[],uint256[])._feeAddresses (#1578) is not in mixedCase
Parameter ERC721Shared.mint(address,string,address[],uint256[])._fees (#1579) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#392)" inContext (#386-395)
Remove redundant statements if they congest code but offer no value.
Additional information: link
name() should be declared external:
- ERC721.name() (#548-550)
symbol() should be declared external:
- ERC721.symbol() (#555-557)
tokenURI(uint256) should be declared external:
- ERC721.tokenURI(uint256) (#562-569)
- ERC721Standard.tokenURI(uint256) (#1497-1501)
approve(address,uint256) should be declared external:
- ERC721.approve(address,uint256) (#582-591)
setApprovalForAll(address,bool) should be declared external:
- ERC721.setApprovalForAll(address,bool) (#605-610)
transferFrom(address,address,uint256) should be declared external:
- ERC721.transferFrom(address,address,uint256) (#622-627)
safeTransferFrom(address,address,uint256) should be declared external:
- ERC721.safeTransferFrom(address,address,uint256) (#632-634)
tokenOfOwnerByIndex(address,uint256) should be declared external:
- ERC721Enumerable.tokenOfOwnerByIndex(address,uint256) (#902-905)
tokenByIndex(uint256) should be declared external:
- ERC721Enumerable.tokenByIndex(uint256) (#917-920)
burn(uint256) should be declared external:
- ERC721Burnable.burn(uint256) (#1038-1042)
grantRole(bytes32,address) should be declared external:
- AccessControl.grantRole(bytes32,address) (#1199-1201)
revokeRole(bytes32,address) should be declared external:
- AccessControl.revokeRole(bytes32,address) (#1212-1214)
renounceRole(bytes32,address) should be declared external:
- AccessControl.renounceRole(bytes32,address) (#1230-1234)
Use the external attribute for functions never called from the contract.
Additional information: link
Unable to find website, listings and other project-related information
Token has a considerable age, but we're still unable to find its website
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Token has a considerable age, but social accounts / website are missing or have few users
Token has a considerable age, but average PancakeSwap 30d trading volume is low
Young tokens have high risks of price dump / death
Unable to find Telegram and Twitter accounts