Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
ERC1155._doSafeBatchTransferAcceptanceCheck(address,address,address,uint256[],uint256[],bytes).response (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#445) is a local variable never initialized
ERC1155._doSafeTransferAcceptanceCheck(address,address,address,uint256,uint256,bytes).reason (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#427) is a local variable never initialized
ERC1155._doSafeTransferAcceptanceCheck(address,address,address,uint256,uint256,bytes).response (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#423) is a local variable never initialized
ERC1155._doSafeBatchTransferAcceptanceCheck(address,address,address,uint256[],uint256[],bytes).reason (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#450) is a local variable never initialized
Initialize all the variables. If a variable is meant to be initialized to zero, explicitly set it to zero to improve code readability.
Additional information: link
ERC1155._doSafeTransferAcceptanceCheck(address,address,address,uint256,uint256,bytes) (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#414-433) ignores return value by IERC1155Receiver(to).onERC1155Received(operator,from,id,amount,data) (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#423-431)
ERC1155._doSafeBatchTransferAcceptanceCheck(address,address,address,uint256[],uint256[],bytes) (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#435-456) ignores return value by IERC1155Receiver(to).onERC1155BatchReceived(operator,from,ids,amounts,data) (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#444-454)
Ensure that all the return values of the function calls are used.
Additional information: link
Variable 'ERC1155._doSafeTransferAcceptanceCheck(address,address,address,uint256,uint256,bytes).response (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#423)' in ERC1155._doSafeTransferAcceptanceCheck(address,address,address,uint256,uint256,bytes) (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#414-433) potentially used before declaration: response != IERC1155Receiver.onERC1155Received.selector (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#424)
Variable 'ERC1155._doSafeTransferAcceptanceCheck(address,address,address,uint256,uint256,bytes).reason (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#427)' in ERC1155._doSafeTransferAcceptanceCheck(address,address,address,uint256,uint256,bytes) (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#414-433) potentially used before declaration: revert(string)(reason) (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#428)
Variable 'ERC1155._doSafeBatchTransferAcceptanceCheck(address,address,address,uint256[],uint256[],bytes).response (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#445)' in ERC1155._doSafeBatchTransferAcceptanceCheck(address,address,address,uint256[],uint256[],bytes) (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#435-456) potentially used before declaration: response != IERC1155Receiver.onERC1155BatchReceived.selector (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#447)
Variable 'ERC1155._doSafeBatchTransferAcceptanceCheck(address,address,address,uint256[],uint256[],bytes).reason (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#450)' in ERC1155._doSafeBatchTransferAcceptanceCheck(address,address,address,uint256[],uint256[],bytes) (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#435-456) potentially used before declaration: revert(string)(reason) (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#451)
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.verifyCallResult(bool,bytes,string) (@openzeppelin/contracts/utils/Address.sol#201-221) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/Address.sol#213-216)
Do not use evm assembly.
Additional information: link
Different versions of Solidity is used:
- Version used: ['>0.4.9<0.9.0', '^0.8.0', '^0.8.1', '^0.8.2']
- ^0.8.0 (@openzeppelin/contracts/access/AccessControl.sol#4)
- ^0.8.0 (@openzeppelin/contracts/access/IAccessControl.sol#4)
- ^0.8.0 (@openzeppelin/contracts/security/Pausable.sol#4)
- ^0.8.0 (@openzeppelin/contracts/security/ReentrancyGuard.sol#4)
- ^0.8.0 (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#4)
- ^0.8.0 (@openzeppelin/contracts/token/ERC1155/IERC1155.sol#4)
- ^0.8.0 (@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol#4)
- ^0.8.0 (@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol#4)
- ^0.8.0 (@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol#4)
- ^0.8.0 (@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol#4)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#4)
- ^0.8.1 (@openzeppelin/contracts/utils/Address.sol#4)
- ^0.8.0 (@openzeppelin/contracts/utils/Context.sol#4)
- ^0.8.0 (@openzeppelin/contracts/utils/Strings.sol#4)
- ^0.8.0 (@openzeppelin/contracts/utils/introspection/ERC165.sol#4)
- ^0.8.0 (@openzeppelin/contracts/utils/introspection/IERC165.sol#4)
- ^0.8.0 (@openzeppelin/contracts/utils/math/SafeMath.sol#4)
- ^0.8.2 (contracts/LootBox.sol#2)
- >0.4.9<0.9.0 (contracts/utils/LootBoxRandomness.sol#3)
Use one Solidity version.
Additional information: link
AccessControl._setRoleAdmin(bytes32,bytes32) (@openzeppelin/contracts/access/AccessControl.sol#194-198) is never used and should be removed
Address.functionCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#85-87) is never used and should be removed
Address.functionCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#95-101) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (@openzeppelin/contracts/utils/Address.sol#114-120) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts/utils/Address.sol#128-139) is never used and should be removed
Address.functionDelegateCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#174-176) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#184-193) is never used and should be removed
Address.functionStaticCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#147-149) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#157-166) is never used and should be removed
Address.sendValue(address,uint256) (@openzeppelin/contracts/utils/Address.sol#60-65) is never used and should be removed
Address.verifyCallResult(bool,bytes,string) (@openzeppelin/contracts/utils/Address.sol#201-221) is never used and should be removed
Context._msgData() (@openzeppelin/contracts/utils/Context.sol#21-23) is never used and should be removed
SafeMath.add(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#93-95) is never used and should be removed
SafeMath.div(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#135-137) is never used and should be removed
SafeMath.div(uint256,uint256,string) (@openzeppelin/contracts/utils/math/SafeMath.sol#191-200) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (@openzeppelin/contracts/utils/math/SafeMath.sol#217-226) is never used and should be removed
SafeMath.mul(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#121-123) is never used and should be removed
SafeMath.sub(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#107-109) is never used and should be removed
SafeMath.sub(uint256,uint256,string) (@openzeppelin/contracts/utils/math/SafeMath.sol#168-177) is never used and should be removed
SafeMath.tryAdd(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#22-28) is never used and should be removed
SafeMath.tryDiv(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#64-69) is never used and should be removed
SafeMath.tryMod(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#76-81) is never used and should be removed
SafeMath.tryMul(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#47-57) is never used and should be removed
SafeMath.trySub(uint256,uint256) (@openzeppelin/contracts/utils/math/SafeMath.sol#35-40) is never used and should be removed
Strings.toHexString(uint256) (@openzeppelin/contracts/utils/Strings.sol#40-51) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.0 (@openzeppelin/contracts/access/AccessControl.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/access/IAccessControl.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/security/Pausable.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/security/ReentrancyGuard.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC1155/IERC1155.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#4) allows old versions
Pragma version^0.8.1 (@openzeppelin/contracts/utils/Address.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/Context.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/Strings.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/introspection/ERC165.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/introspection/IERC165.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/math/SafeMath.sol#4) allows old versions
Pragma version^0.8.2 (contracts/LootBox.sol#2) allows old versions
Pragma version>0.4.9<0.9.0 (contracts/utils/LootBoxRandomness.sol#3) is too complex
solc-0.8.9 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#60-65):
- (success) = recipient.call{value: amount}() (@openzeppelin/contracts/utils/Address.sol#63)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts/utils/Address.sol#128-139):
- (success,returndata) = target.call{value: value}(data) (@openzeppelin/contracts/utils/Address.sol#137)
Low level call in Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#157-166):
- (success,returndata) = target.staticcall(data) (@openzeppelin/contracts/utils/Address.sol#164)
Low level call in Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#184-193):
- (success,returndata) = target.delegatecall(data) (@openzeppelin/contracts/utils/Address.sol#191)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Parameter LootBox.uri(uint256)._tokenId (contracts/LootBox.sol#43) is not in mixedCase
Parameter LootBox.unpack(uint256,uint256)._optionId (contracts/LootBox.sol#60) is not in mixedCase
Parameter LootBox.unpack(uint256,uint256)._amount (contracts/LootBox.sol#60) is not in mixedCase
Parameter LootBox.setState(uint256,uint256)._numOptions (contracts/LootBox.sol#115) is not in mixedCase
Parameter LootBox.setState(uint256,uint256)._seed (contracts/LootBox.sol#115) is not in mixedCase
Parameter LootBox.setFactoryForOption(uint256,address)._optionId (contracts/LootBox.sol#122) is not in mixedCase
Parameter LootBox.setFactoryForOption(uint256,address)._factoryAddress (contracts/LootBox.sol#122) is not in mixedCase
Parameter LootBox.setSeed(uint256)._seed (contracts/LootBox.sol#133) is not in mixedCase
Parameter LootBox.addNewOption(address,uint16[])._probabilities (contracts/LootBox.sol#139) is not in mixedCase
Parameter LootBox.setProbabilitiesForOption(uint256,uint16[])._optionId (contracts/LootBox.sol#186) is not in mixedCase
Parameter LootBox.setProbabilitiesForOption(uint256,uint16[])._probabilities (contracts/LootBox.sol#187) is not in mixedCase
Parameter LootBoxRandomness.initState(LootBoxRandomness.LootBoxRandomnessState,uint256,uint256)._state (contracts/utils/LootBoxRandomness.sol#54) is not in mixedCase
Parameter LootBoxRandomness.initState(LootBoxRandomness.LootBoxRandomnessState,uint256,uint256)._numOptions (contracts/utils/LootBoxRandomness.sol#55) is not in mixedCase
Parameter LootBoxRandomness.initState(LootBoxRandomness.LootBoxRandomnessState,uint256,uint256)._seed (contracts/utils/LootBoxRandomness.sol#56) is not in mixedCase
Parameter LootBoxRandomness.setFactoryForOption(LootBoxRandomness.LootBoxRandomnessState,uint256,address)._state (contracts/utils/LootBoxRandomness.sol#66) is not in mixedCase
Parameter LootBoxRandomness.setFactoryForOption(LootBoxRandomness.LootBoxRandomnessState,uint256,address)._optionId (contracts/utils/LootBoxRandomness.sol#67) is not in mixedCase
Parameter LootBoxRandomness.addNewOption(LootBoxRandomness.LootBoxRandomnessState,address,uint16[])._state (contracts/utils/LootBoxRandomness.sol#81) is not in mixedCase
Parameter LootBoxRandomness.addNewOption(LootBoxRandomness.LootBoxRandomnessState,address,uint16[])._factoryAddress (contracts/utils/LootBoxRandomness.sol#82) is not in mixedCase
Parameter LootBoxRandomness.addNewOption(LootBoxRandomness.LootBoxRandomnessState,address,uint16[])._probabilities (contracts/utils/LootBoxRandomness.sol#83) is not in mixedCase
Parameter LootBoxRandomness.setProbabilitiesForOption(LootBoxRandomness.LootBoxRandomnessState,uint256,uint16[])._state (contracts/utils/LootBoxRandomness.sol#94) is not in mixedCase
Parameter LootBoxRandomness.setProbabilitiesForOption(LootBoxRandomness.LootBoxRandomnessState,uint256,uint16[])._optionId (contracts/utils/LootBoxRandomness.sol#95) is not in mixedCase
Parameter LootBoxRandomness.setSeed(LootBoxRandomness.LootBoxRandomnessState,uint256)._state (contracts/utils/LootBoxRandomness.sol#110) is not in mixedCase
Parameter LootBoxRandomness.setSeed(LootBoxRandomness.LootBoxRandomnessState,uint256)._newSeed (contracts/utils/LootBoxRandomness.sol#110) is not in mixedCase
Parameter LootBoxRandomness.numOptions(LootBoxRandomness.LootBoxRandomnessState)._state (contracts/utils/LootBoxRandomness.sol#119) is not in mixedCase
Parameter LootBoxRandomness.classProbabilities(LootBoxRandomness.LootBoxRandomnessState,uint256)._state (contracts/utils/LootBoxRandomness.sol#131) is not in mixedCase
Parameter LootBoxRandomness.classFactoryAddress(LootBoxRandomness.LootBoxRandomnessState,uint256)._state (contracts/utils/LootBoxRandomness.sol#141) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
grantRole(bytes32,address) should be declared external:
- AccessControl.grantRole(bytes32,address) (@openzeppelin/contracts/access/AccessControl.sol#130-132)
revokeRole(bytes32,address) should be declared external:
- AccessControl.revokeRole(bytes32,address) (@openzeppelin/contracts/access/AccessControl.sol#143-145)
renounceRole(bytes32,address) should be declared external:
- AccessControl.renounceRole(bytes32,address) (@openzeppelin/contracts/access/AccessControl.sol#161-165)
balanceOfBatch(address[],uint256[]) should be declared external:
- ERC1155.balanceOfBatch(address[],uint256[]) (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#82-98)
setApprovalForAll(address,bool) should be declared external:
- ERC1155.setApprovalForAll(address,bool) (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#103-105)
safeTransferFrom(address,address,uint256,uint256,bytes) should be declared external:
- ERC1155.safeTransferFrom(address,address,uint256,uint256,bytes) (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#117-129)
safeBatchTransferFrom(address,address,uint256[],uint256[],bytes) should be declared external:
- ERC1155.safeBatchTransferFrom(address,address,uint256[],uint256[],bytes) (@openzeppelin/contracts/token/ERC1155/ERC1155.sol#134-146)
burn(address,uint256,uint256) should be declared external:
- ERC1155Burnable.burn(address,uint256,uint256) (@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol#15-26)
burnBatch(address,uint256[],uint256[]) should be declared external:
- ERC1155Burnable.burnBatch(address,uint256[],uint256[]) (@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol#28-39)
exists(uint256) should be declared external:
- ERC1155Supply.exists(uint256) (@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol#29-31)
name() should be declared external:
- LootBox.name() (contracts/LootBox.sol#31-33)
symbol() should be declared external:
- LootBox.symbol() (contracts/LootBox.sol#35-37)
setURI(string) should be declared external:
- LootBox.setURI(string) (contracts/LootBox.sol#39-41)
mint(address,uint256,uint256,bytes) should be declared external:
- LootBox.mint(address,uint256,uint256,bytes) (contracts/LootBox.sol#78-85)
mintBatch(address,uint256[],uint256[],bytes) should be declared external:
- LootBox.mintBatch(address,uint256[],uint256[],bytes) (contracts/LootBox.sol#87-94)
setState(uint256,uint256) should be declared external:
- LootBox.setState(uint256,uint256) (contracts/LootBox.sol#115-120)
setFactoryForOption(uint256,address) should be declared external:
- LootBox.setFactoryForOption(uint256,address) (contracts/LootBox.sol#122-131)
setSeed(uint256) should be declared external:
- LootBox.setSeed(uint256) (contracts/LootBox.sol#133-135)
addNewOption(address,uint16[]) should be declared external:
- LootBox.addNewOption(address,uint16[]) (contracts/LootBox.sol#137-142)
batchBalanceOf(address) should be declared external:
- LootBox.batchBalanceOf(address) (contracts/LootBox.sol#173-183)
setProbabilitiesForOption(uint256,uint16[]) should be declared external:
- LootBox.setProbabilitiesForOption(uint256,uint16[]) (contracts/LootBox.sol#185-194)
numOptions(LootBoxRandomness.LootBoxRandomnessState) should be declared external:
- LootBoxRandomness.numOptions(LootBoxRandomness.LootBoxRandomnessState) (contracts/utils/LootBoxRandomness.sol#119-125)
classProbabilities(LootBoxRandomness.LootBoxRandomnessState,uint256) should be declared external:
- LootBoxRandomness.classProbabilities(LootBoxRandomness.LootBoxRandomnessState,uint256) (contracts/utils/LootBoxRandomness.sol#130-135)
classFactoryAddress(LootBoxRandomness.LootBoxRandomnessState,uint256) should be declared external:
- LootBoxRandomness.classFactoryAddress(LootBoxRandomness.LootBoxRandomnessState,uint256) (contracts/utils/LootBoxRandomness.sol#140-145)
Use the external attribute for functions never called from the contract.
Additional information: link
Unable to find website, listings and other project-related information
Young tokens have high risks of scam / price dump / death
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Unable to find Telegram and Twitter accounts