An SCIFI MMORPG, with extensive lore and economic system based on real economy. Five races and three factions fighting for the control of the galaxy and its resources.
LGEWhitelisted._applyLGEWhitelist(address,address,uint256) (contracts/LGEWhitelisted.sol#149-176) uses a dangerous strict equality:
- _lgeTimestamp == 0 && sender != _lgePairAddress && recipient == _lgePairAddress && amount > 0 (contracts/LGEWhitelisted.sol#156)
GalacticQuadrant._writeCheckpoint(address,uint32,uint256,uint256) (contracts/GalacticQuadrant.sol#274-296) uses a dangerous strict equality:
- nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber (contracts/GalacticQuadrant.sol#283-284)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
Address.isContract(address) (@openzeppelin/contracts/utils/Address.sol#27-37) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/Address.sol#33-35)
Address.verifyCallResult(bool,bytes,string) (@openzeppelin/contracts/utils/Address.sol#196-216) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/Address.sol#208-211)
GalacticQuadrant.getChainId() (contracts/GalacticQuadrant.sol#298-304) uses assembly
- INLINE ASM (contracts/GalacticQuadrant.sol#300-302)
Do not use evm assembly.
Additional information: link
LGEWhitelisted.createLGEWhitelist(address,uint256[],uint256[]).pairAddress (contracts/LGEWhitelisted.sol#57) lacks a zero-check on :
- _lgePairAddress = pairAddress (contracts/LGEWhitelisted.sol#63)
Check that the address is not zero.
Additional information: link
GalacticQuadrant.delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32) (contracts/GalacticQuadrant.sol#128-167) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp <= expiry,GQ::delegateBySig: signature expired) (contracts/GalacticQuadrant.sol#162-165)
LGEWhitelisted.getLGEWhitelistRound() (contracts/LGEWhitelisted.sol#112-142) uses timestamp for comparisons
Dangerous comparisons:
- _lgeTimestamp > 0 (contracts/LGEWhitelisted.sol#123)
- block.timestamp <= wlCloseTimestampLast (contracts/LGEWhitelisted.sol#130)
LGEWhitelisted._applyLGEWhitelist(address,address,uint256) (contracts/LGEWhitelisted.sol#149-176) uses timestamp for comparisons
Dangerous comparisons:
- _lgeTimestamp == 0 && sender != _lgePairAddress && recipient == _lgePairAddress && amount > 0 (contracts/LGEWhitelisted.sol#156)
- wlRoundNumber > 0 (contracts/LGEWhitelisted.sol#164)
Avoid relying on block.timestamp.
Additional information: link
GalacticQuadrant.constructor(address) (contracts/GalacticQuadrant.sol#65-70) uses literals with too many digits:
- _cap = 10000000000 * 10 ** decimals() (contracts/GalacticQuadrant.sol#68)
GalacticQuadrant.constructor(address) (contracts/GalacticQuadrant.sol#65-70) uses literals with too many digits:
- _mint(msg.sender,1000000000 * 10 ** decimals()) (contracts/GalacticQuadrant.sol#69)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
Different versions of Solidity is used:
- Version used: ['0.8.4', '^0.8.0']
- ^0.8.0 (@openzeppelin/contracts/access/AccessControl.sol#4)
- ^0.8.0 (@openzeppelin/contracts/access/IAccessControl.sol#4)
- ^0.8.0 (@openzeppelin/contracts/access/Ownable.sol#4)
- ^0.8.0 (@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.4 (contracts/BEP20TokenWhitelisted.sol#2)
- 0.8.4 (contracts/GalacticQuadrant.sol#2)
- 0.8.4 (contracts/LGEWhitelisted.sol#2)
- 0.8.4 (contracts/interfaces/IBEP20.sol#2)
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
AccessControl._setupRole(bytes32,address) (@openzeppelin/contracts/access/AccessControl.sol#185-187) is never used and should be removed
Address.functionCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#80-82) is never used and should be removed
Address.functionCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#90-96) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (@openzeppelin/contracts/utils/Address.sol#109-115) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts/utils/Address.sol#123-134) is never used and should be removed
Address.functionDelegateCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#169-171) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#179-188) is never used and should be removed
Address.functionStaticCall(address,bytes) (@openzeppelin/contracts/utils/Address.sol#142-144) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#152-161) is never used and should be removed
Address.isContract(address) (@openzeppelin/contracts/utils/Address.sol#27-37) is never used and should be removed
Address.sendValue(address,uint256) (@openzeppelin/contracts/utils/Address.sol#55-60) is never used and should be removed
Address.verifyCallResult(bool,bytes,string) (@openzeppelin/contracts/utils/Address.sol#196-216) is never used and should be removed
Context._msgData() (@openzeppelin/contracts/utils/Context.sol#21-23) 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) (@openzeppelin/contracts/utils/math/SafeMath.sol#151-153) 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.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
Strings.toString(uint256) (@openzeppelin/contracts/utils/Strings.sol#15-35) 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/access/Ownable.sol#4) allows old versions
Pragma version^0.8.0 (@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
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#55-60):
- (success) = recipient.call{value: amount}() (@openzeppelin/contracts/utils/Address.sol#58)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts/utils/Address.sol#123-134):
- (success,returndata) = target.call{value: value}(data) (@openzeppelin/contracts/utils/Address.sol#132)
Low level call in Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#152-161):
- (success,returndata) = target.staticcall(data) (@openzeppelin/contracts/utils/Address.sol#159)
Low level call in Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#179-188):
- (success,returndata) = target.delegatecall(data) (@openzeppelin/contracts/utils/Address.sol#186)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Variable GalacticQuadrant._delegates (contracts/GalacticQuadrant.sol#17) is not in mixedCase
Variable LGEWhitelisted._lgeWhitelistRounds (contracts/LGEWhitelisted.sol#14) is not in mixedCase
Variable LGEWhitelisted._lgeTimestamp (contracts/LGEWhitelisted.sol#16) is not in mixedCase
Variable LGEWhitelisted._lgePairAddress (contracts/LGEWhitelisted.sol#17) is not in mixedCase
Variable LGEWhitelisted._whitelister (contracts/LGEWhitelisted.sol#19) 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)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (@openzeppelin/contracts/access/Ownable.sol#54-56)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (@openzeppelin/contracts/access/Ownable.sol#62-65)
symbol() should be declared external:
- BEP20TokenWhitelisted.symbol() (contracts/BEP20TokenWhitelisted.sol#39-41)
allowance(address,address) should be declared external:
- BEP20TokenWhitelisted.allowance(address,address) (contracts/BEP20TokenWhitelisted.sol#91-99)
approve(address,uint256) should be declared external:
- BEP20TokenWhitelisted.approve(address,uint256) (contracts/BEP20TokenWhitelisted.sol#108-116)
increaseAllowance(address,uint256) should be declared external:
- BEP20TokenWhitelisted.increaseAllowance(address,uint256) (contracts/BEP20TokenWhitelisted.sol#159-170)
decreaseAllowance(address,uint256) should be declared external:
- BEP20TokenWhitelisted.decreaseAllowance(address,uint256) (contracts/BEP20TokenWhitelisted.sol#186-200)
cap() should be declared external:
- GalacticQuadrant.cap() (contracts/GalacticQuadrant.sol#75-77)
mint(address,uint256) should be declared external:
- GalacticQuadrant.mint(address,uint256) (contracts/GalacticQuadrant.sol#79-83)
burn(uint256) should be declared external:
- GalacticQuadrant.burn(uint256) (contracts/GalacticQuadrant.sol#85-89)
Use the external attribute for functions never called from the contract.
Additional information: link
Young tokens have high risks of price dump / death
Young tokens have high risks of price dump / death