Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
BRC721._checkOnERC721Received(address,address,uint256,bytes) (contracts/bsc-nft-factory/contracts/BRC721.sol#367-386) ignores return value by IERC721Receiver(to).onERC721Received(_msgSender(),from,tokenId,_data) (contracts/bsc-nft-factory/contracts/BRC721.sol#371-382)
Ensure that all the return values of the function calls are used.
Additional information: link
BRC721.constructor(address,string,string).admin_ (contracts/bsc-nft-factory/contracts/BRC721.sol#49) lacks a zero-check on :
- _admin = admin_ (contracts/bsc-nft-factory/contracts/BRC721.sol#50)
Check that the address is not zero.
Additional information: link
Variable 'BRC721._checkOnERC721Received(address,address,uint256,bytes).retval (contracts/bsc-nft-factory/contracts/BRC721.sol#371)' in BRC721._checkOnERC721Received(address,address,uint256,bytes) (contracts/bsc-nft-factory/contracts/BRC721.sol#367-386) potentially used before declaration: retval == IERC721Receiver(to).onERC721Received.selector (contracts/bsc-nft-factory/contracts/BRC721.sol#372)
Variable 'BRC721._checkOnERC721Received(address,address,uint256,bytes).reason (contracts/bsc-nft-factory/contracts/BRC721.sol#373)' in BRC721._checkOnERC721Received(address,address,uint256,bytes) (contracts/bsc-nft-factory/contracts/BRC721.sol#367-386) potentially used before declaration: reason.length == 0 (contracts/bsc-nft-factory/contracts/BRC721.sol#374)
Variable 'BRC721._checkOnERC721Received(address,address,uint256,bytes).reason (contracts/bsc-nft-factory/contracts/BRC721.sol#373)' in BRC721._checkOnERC721Received(address,address,uint256,bytes) (contracts/bsc-nft-factory/contracts/BRC721.sol#367-386) potentially used before declaration: revert(uint256,uint256)(32 + reason,mload(uint256)(reason)) (contracts/bsc-nft-factory/contracts/BRC721.sol#379)
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
Address.isContract(address) (@openzeppelin/contracts/utils/Address.sol#26-35) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/Address.sol#33)
Address._verifyCallResult(bool,bytes,string) (@openzeppelin/contracts/utils/Address.sol#171-188) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/Address.sol#180-183)
BRC721._checkOnERC721Received(address,address,uint256,bytes) (contracts/bsc-nft-factory/contracts/BRC721.sol#367-386) uses assembly
- INLINE ASM (contracts/bsc-nft-factory/contracts/BRC721.sol#378-380)
Do not use evm assembly.
Additional information: link
Different versions of Solidity is used:
- Version used: ['0.8.0', '^0.8.0']
- ^0.8.0 (@openzeppelin/contracts/security/Pausable.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC721/IERC721.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/Address.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/Context.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/Strings.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/introspection/ERC165.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/introspection/IERC165.sol#3)
- 0.8.0 (contracts/bsc-nft-factory/contracts/BNFT.sol#2)
- 0.8.0 (contracts/bsc-nft-factory/contracts/BRC721.sol#2)
- 0.8.0 (contracts/bsc-nft-factory/contracts/BRC721Enumerable.sol#2)
Use one Solidity version.
Additional information: link
Address._verifyCallResult(bool,bytes,string) (@openzeppelin/contracts/utils/Address.sol#171-188) is never used and should be removed
Address.functionCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#79-81) is never used and should be removed
Address.functionCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#89-91) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (@openzeppelin/contracts/utils/Address.sol#104-106) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts/utils/Address.sol#114-121) is never used and should be removed
Address.functionDelegateCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#153-155) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#163-169) is never used and should be removed
Address.functionStaticCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#129-131) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#139-145) is never used and should be removed
Address.sendValue(address,uint256) (@openzeppelin/contracts/utils/Address.sol#53-59) is never used and should be removed
BNFT._baseURI() (contracts/bsc-nft-factory/contracts/BNFT.sol#22-24) is never used and should be removed
BRC721._baseURI() (contracts/bsc-nft-factory/contracts/BRC721.sol#127-129) is never used and should be removed
BRC721._burn(uint256) (contracts/bsc-nft-factory/contracts/BRC721.sol#305-318) is never used and should be removed
BRC721._safeMint(address,uint256) (contracts/bsc-nft-factory/contracts/BRC721.sol#258-260) is never used and should be removed
BRC721._safeMint(address,uint256,bytes) (contracts/bsc-nft-factory/contracts/BRC721.sol#266-269) is never used and should be removed
Context._msgData() (@openzeppelin/contracts/utils/Context.sol#20-23) is never used and should be removed
Strings.toHexString(uint256) (@openzeppelin/contracts/utils/Strings.sol#39-50) is never used and should be removed
Strings.toHexString(uint256,uint256) (@openzeppelin/contracts/utils/Strings.sol#55-65) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.0 (@openzeppelin/contracts/security/Pausable.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC721/IERC721.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.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
Pragma version^0.8.0 (@openzeppelin/contracts/utils/Strings.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/introspection/ERC165.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/introspection/IERC165.sol#3) allows old versions
Pragma version0.8.0 (contracts/bsc-nft-factory/contracts/BNFT.sol#2) allows old versions
Pragma version0.8.0 (contracts/bsc-nft-factory/contracts/BRC721.sol#2) allows old versions
Pragma version0.8.0 (contracts/bsc-nft-factory/contracts/BRC721Enumerable.sol#2) 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 Address.sendValue(address,uint256) (@openzeppelin/contracts/utils/Address.sol#53-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#114-121):
- (success,returndata) = target.call{value: value}(data) (@openzeppelin/contracts/utils/Address.sol#119)
Low level call in Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#139-145):
- (success,returndata) = target.staticcall(data) (@openzeppelin/contracts/utils/Address.sol#143)
Low level call in Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#163-169):
- (success,returndata) = target.delegatecall(data) (@openzeppelin/contracts/utils/Address.sol#167)
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 (@openzeppelin/contracts/utils/Strings.sol#9) is not in UPPER_CASE_WITH_UNDERSCORES
Parameter BRC721.safeTransferFrom(address,address,uint256,bytes)._data (contracts/bsc-nft-factory/contracts/BRC721.sol#194) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (@openzeppelin/contracts/utils/Context.sol#21)" inContext (@openzeppelin/contracts/utils/Context.sol#15-24)
Remove redundant statements if they congest code but offer no value.
Additional information: link
tokenURI(uint256) should be declared external:
- BNFT.tokenURI(uint256) (contracts/bsc-nft-factory/contracts/BNFT.sol#30-37)
- BRC721.tokenURI(uint256) (contracts/bsc-nft-factory/contracts/BRC721.sol#107-114)
name() should be declared external:
- BRC721.name() (contracts/bsc-nft-factory/contracts/BRC721.sol#93-95)
admin() should be declared external:
- BRC721.admin() (contracts/bsc-nft-factory/contracts/BRC721.sol#119-121)
approve(address,uint256) should be declared external:
- BRC721.approve(address,uint256) (contracts/bsc-nft-factory/contracts/BRC721.sol#134-143)
setApprovalForAll(address,bool) should be declared external:
- BRC721.setApprovalForAll(address,bool) (contracts/bsc-nft-factory/contracts/BRC721.sol#157-162)
transferFrom(address,address,uint256) should be declared external:
- BRC721.transferFrom(address,address,uint256) (contracts/bsc-nft-factory/contracts/BRC721.sol#175-181)
safeTransferFrom(address,address,uint256) should be declared external:
- BRC721.safeTransferFrom(address,address,uint256) (contracts/bsc-nft-factory/contracts/BRC721.sol#186-188)
tokenOfOwnerByIndex(address,uint256) should be declared external:
- BRC721Enumerable.tokenOfOwnerByIndex(address,uint256) (contracts/bsc-nft-factory/contracts/BRC721Enumerable.sol#32-35)
tokenByIndex(uint256) should be declared external:
- BRC721Enumerable.tokenByIndex(uint256) (contracts/bsc-nft-factory/contracts/BRC721Enumerable.sol#47-50)
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 no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Young tokens have high risks of price dump / death
Unable to find Telegram and Twitter accounts