SPACE ID is building a universal name service network with a one-stop identity platform to discover, register, trade, manage web3 domains. It also includes a Web3 Name SDK & API for developers across blockchains and provides a multi-chain name service for everyone to easily build and create a web3 identity.
Math.mulDiv(uint256,uint256,uint256) (@openzeppelin/contracts/utils/math/Math.sol#55-135) performs a multiplication on the result of a division:
-prod0 = prod0 / twos (@openzeppelin/contracts/utils/math/Math.sol#105)
-result = prod0 * inverse (@openzeppelin/contracts/utils/math/Math.sol#132)
Math.mulDiv(uint256,uint256,uint256) (@openzeppelin/contracts/utils/math/Math.sol#55-135) performs a multiplication on the result of a division:
-denominator = denominator / twos (@openzeppelin/contracts/utils/math/Math.sol#102)
-inverse *= 2 - denominator * inverse (@openzeppelin/contracts/utils/math/Math.sol#126)
Math.mulDiv(uint256,uint256,uint256) (@openzeppelin/contracts/utils/math/Math.sol#55-135) performs a multiplication on the result of a division:
-denominator = denominator / twos (@openzeppelin/contracts/utils/math/Math.sol#102)
-inverse *= 2 - denominator * inverse (@openzeppelin/contracts/utils/math/Math.sol#124)
Math.mulDiv(uint256,uint256,uint256) (@openzeppelin/contracts/utils/math/Math.sol#55-135) performs a multiplication on the result of a division:
-denominator = denominator / twos (@openzeppelin/contracts/utils/math/Math.sol#102)
-inverse *= 2 - denominator * inverse (@openzeppelin/contracts/utils/math/Math.sol#122)
Math.mulDiv(uint256,uint256,uint256) (@openzeppelin/contracts/utils/math/Math.sol#55-135) performs a multiplication on the result of a division:
-denominator = denominator / twos (@openzeppelin/contracts/utils/math/Math.sol#102)
-inverse *= 2 - denominator * inverse (@openzeppelin/contracts/utils/math/Math.sol#123)
Math.mulDiv(uint256,uint256,uint256) (@openzeppelin/contracts/utils/math/Math.sol#55-135) performs a multiplication on the result of a division:
-denominator = denominator / twos (@openzeppelin/contracts/utils/math/Math.sol#102)
-inverse *= 2 - denominator * inverse (@openzeppelin/contracts/utils/math/Math.sol#125)
Math.mulDiv(uint256,uint256,uint256) (@openzeppelin/contracts/utils/math/Math.sol#55-135) performs a multiplication on the result of a division:
-denominator = denominator / twos (@openzeppelin/contracts/utils/math/Math.sol#102)
-inverse *= 2 - denominator * inverse (@openzeppelin/contracts/utils/math/Math.sol#121)
Math.mulDiv(uint256,uint256,uint256) (@openzeppelin/contracts/utils/math/Math.sol#55-135) performs a multiplication on the result of a division:
-denominator = denominator / twos (@openzeppelin/contracts/utils/math/Math.sol#102)
-inverse = (3 * denominator) ^ 2 (@openzeppelin/contracts/utils/math/Math.sol#117)
Consider ordering multiplication before division.
Additional information: link
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#158-167)
burnFrom(address,uint256) should be declared external:
- ERC20Burnable.burnFrom(address,uint256) (@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol#35-38)
permit(address,address,uint256,uint256,uint8,bytes32,bytes32) should be declared external:
- ERC20Permit.permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#49-68)
decimals() should be declared external:
- ERC20.decimals() (@openzeppelin/contracts/token/ERC20/ERC20.sol#87-89)
getRoleMemberCount(bytes32) should be declared external:
- AccessControlEnumerable.getRoleMemberCount(bytes32) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#45-47)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#201-210)
symbol() should be declared external:
- ERC20.symbol() (@openzeppelin/contracts/token/ERC20/ERC20.sol#70-72)
balanceOf(address) should be declared external:
- ERC20.balanceOf(address) (@openzeppelin/contracts/token/ERC20/ERC20.sol#101-103)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#113-117)
unpause() should be declared external:
- SpaceIDToken.unpause() (contracts/SpaceIDToken.sol#28-30)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#181-185)
getRoleMember(bytes32,uint256) should be declared external:
- AccessControlEnumerable.getRoleMember(bytes32,uint256) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#37-39)
mint(address,uint256) should be declared external:
- SpaceIDToken.mint(address,uint256) (contracts/SpaceIDToken.sol#32-34)
nonces(address) should be declared external:
- ERC20Permit.nonces(address) (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#73-75)
name() should be declared external:
- ERC20.name() (@openzeppelin/contracts/token/ERC20/ERC20.sol#62-64)
grantRole(bytes32,address) should be declared external:
- AccessControl.grantRole(bytes32,address) (@openzeppelin/contracts/access/AccessControl.sol#144-146)
revokeRole(bytes32,address) should be declared external:
- AccessControl.revokeRole(bytes32,address) (@openzeppelin/contracts/access/AccessControl.sol#159-161)
totalSupply() should be declared external:
- ERC20.totalSupply() (@openzeppelin/contracts/token/ERC20/ERC20.sol#94-96)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (@openzeppelin/contracts/token/ERC20/ERC20.sol#136-140)
renounceRole(bytes32,address) should be declared external:
- AccessControl.renounceRole(bytes32,address) (@openzeppelin/contracts/access/AccessControl.sol#179-183)
pause() should be declared external:
- SpaceIDToken.pause() (contracts/SpaceIDToken.sol#24-26)
burn(uint256) should be declared external:
- ERC20Burnable.burn(uint256) (@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol#20-22)
Use the external attribute for functions never called from the contract.
Additional information: link
AccessControlEnumerable._revokeRole(bytes32,address) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#60-63) ignores return value by _roleMembers[role].remove(account) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#62)
AccessControlEnumerable._grantRole(bytes32,address) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#52-55) ignores return value by _roleMembers[role].add(account) (@openzeppelin/contracts/access/AccessControlEnumerable.sol#54)
Ensure that all the return values of the function calls are used.
Additional information: link
ERC20Permit.constructor(string).name (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#44) shadows:
- ERC20.name() (@openzeppelin/contracts/token/ERC20/ERC20.sol#62-64) (function)
- IERC20Metadata.name() (@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol#17) (function)
Rename the local variables that shadow another component.
Additional information: link
ERC20Permit.permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#49-68) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp <= deadline,ERC20Permit: expired deadline) (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#58)
Avoid relying on block.timestamp.
Additional information: link
Strings.toString(uint256) (@openzeppelin/contracts/utils/Strings.sol#18-38) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/Strings.sol#24-26)
- INLINE ASM (@openzeppelin/contracts/utils/Strings.sol#30-32)
EnumerableSet.values(EnumerableSet.AddressSet) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#293-303) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#298-300)
ECDSA.tryRecover(bytes32,bytes) (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#55-72) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#63-67)
EnumerableSet.values(EnumerableSet.UintSet) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#367-377) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#372-374)
Math.mulDiv(uint256,uint256,uint256) (@openzeppelin/contracts/utils/math/Math.sol#55-135) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/math/Math.sol#66-70)
- INLINE ASM (@openzeppelin/contracts/utils/math/Math.sol#86-93)
- INLINE ASM (@openzeppelin/contracts/utils/math/Math.sol#100-109)
EnumerableSet.values(EnumerableSet.Bytes32Set) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#219-229) uses assembly
- INLINE ASM (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#224-226)
Do not use evm assembly.
Additional information: link
Different versions of Solidity are used:
- Version used: ['^0.8.0', '^0.8.9']
- ^0.8.0 (@openzeppelin/contracts/access/AccessControl.sol#4)
- ^0.8.0 (@openzeppelin/contracts/access/AccessControlEnumerable.sol#4)
- ^0.8.0 (@openzeppelin/contracts/access/IAccessControl.sol#4)
- ^0.8.0 (@openzeppelin/contracts/access/IAccessControlEnumerable.sol#4)
- ^0.8.0 (@openzeppelin/contracts/security/Pausable.sol#4)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/ERC20.sol#4)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#4)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol#4)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol#4)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#4)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol#4)
- ^0.8.0 (@openzeppelin/contracts/utils/Context.sol#4)
- ^0.8.0 (@openzeppelin/contracts/utils/Counters.sol#4)
- ^0.8.0 (@openzeppelin/contracts/utils/Strings.sol#4)
- ^0.8.0 (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#4)
- ^0.8.0 (@openzeppelin/contracts/utils/cryptography/EIP712.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/Math.sol#4)
- ^0.8.0 (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#5)
- ^0.8.9 (contracts/SpaceIDToken.sol#2)
Use one Solidity version.
Additional information: link
EnumerableSet.values(EnumerableSet.Bytes32Set) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#219-229) is never used and should be removed
AccessControl._setRoleAdmin(bytes32,bytes32) (@openzeppelin/contracts/access/AccessControl.sol#214-218) is never used and should be removed
EnumerableSet.length(EnumerableSet.Bytes32Set) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#193-195) is never used and should be removed
EnumerableSet.at(EnumerableSet.Bytes32Set,uint256) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#207-209) is never used and should be removed
Math.ceilDiv(uint256,uint256) (@openzeppelin/contracts/utils/math/Math.sol#45-48) is never used and should be removed
EnumerableSet.remove(EnumerableSet.UintSet,uint256) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#327-329) is never used and should be removed
Math.log10(uint256,Math.Rounding) (@openzeppelin/contracts/utils/math/Math.sol#296-301) is never used and should be removed
ECDSA.recover(bytes32,bytes) (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#88-92) is never used and should be removed
EnumerableSet.contains(EnumerableSet.Bytes32Set,bytes32) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#186-188) is never used and should be removed
Math.mulDiv(uint256,uint256,uint256) (@openzeppelin/contracts/utils/math/Math.sol#55-135) is never used and should be removed
Strings.toHexString(uint256) (@openzeppelin/contracts/utils/Strings.sol#43-47) is never used and should be removed
Math.sqrt(uint256,Math.Rounding) (@openzeppelin/contracts/utils/math/Math.sol#194-199) is never used and should be removed
Math.max(uint256,uint256) (@openzeppelin/contracts/utils/math/Math.sol#19-21) is never used and should be removed
Math.log2(uint256) (@openzeppelin/contracts/utils/math/Math.sol#205-241) is never used and should be removed
Math.average(uint256,uint256) (@openzeppelin/contracts/utils/math/Math.sol#34-37) is never used and should be removed
Math.log2(uint256,Math.Rounding) (@openzeppelin/contracts/utils/math/Math.sol#247-252) is never used and should be removed
Math.log256(uint256) (@openzeppelin/contracts/utils/math/Math.sol#309-333) is never used and should be removed
EnumerableSet.contains(EnumerableSet.UintSet,uint256) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#334-336) is never used and should be removed
ECDSA.tryRecover(bytes32,bytes) (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#55-72) is never used and should be removed
EnumerableSet.values(EnumerableSet.AddressSet) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#293-303) is never used and should be removed
ECDSA.toEthSignedMessageHash(bytes32) (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#183-187) is never used and should be removed
Strings.toString(uint256) (@openzeppelin/contracts/utils/Strings.sol#18-38) is never used and should be removed
Counters.reset(Counters.Counter) (@openzeppelin/contracts/utils/Counters.sol#40-42) is never used and should be removed
Math.log256(uint256,Math.Rounding) (@openzeppelin/contracts/utils/math/Math.sol#339-344) is never used and should be removed
Math.sqrt(uint256) (@openzeppelin/contracts/utils/math/Math.sol#158-189) is never used and should be removed
ECDSA.toEthSignedMessageHash(bytes) (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#197-199) is never used and should be removed
EnumerableSet.contains(EnumerableSet.AddressSet,address) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#260-262) is never used and should be removed
EnumerableSet.add(EnumerableSet.Bytes32Set,bytes32) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#169-171) is never used and should be removed
Counters.decrement(Counters.Counter) (@openzeppelin/contracts/utils/Counters.sol#32-38) is never used and should be removed
EnumerableSet._values(EnumerableSet.Set) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#153-155) is never used and should be removed
EnumerableSet.values(EnumerableSet.UintSet) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#367-377) is never used and should be removed
Context._msgData() (@openzeppelin/contracts/utils/Context.sol#21-23) is never used and should be removed
Math.mulDiv(uint256,uint256,uint256,Math.Rounding) (@openzeppelin/contracts/utils/math/Math.sol#140-151) is never used and should be removed
Math.log10(uint256) (@openzeppelin/contracts/utils/math/Math.sol#258-290) is never used and should be removed
ECDSA.tryRecover(bytes32,bytes32,bytes32) (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#101-109) is never used and should be removed
EnumerableSet.length(EnumerableSet.UintSet) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#341-343) is never used and should be removed
AccessControl._setupRole(bytes32,address) (@openzeppelin/contracts/access/AccessControl.sol#205-207) is never used and should be removed
EnumerableSet.at(EnumerableSet.UintSet,uint256) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#355-357) is never used and should be removed
Math.min(uint256,uint256) (@openzeppelin/contracts/utils/math/Math.sol#26-28) is never used and should be removed
ECDSA.recover(bytes32,bytes32,bytes32) (@openzeppelin/contracts/utils/cryptography/ECDSA.sol#116-124) is never used and should be removed
EnumerableSet.add(EnumerableSet.UintSet,uint256) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#317-319) is never used and should be removed
EnumerableSet.remove(EnumerableSet.Bytes32Set,bytes32) (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#179-181) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.0 (@openzeppelin/contracts/access/IAccessControlEnumerable.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/cryptography/ECDSA.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/token/ERC20/IERC20.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.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/token/ERC20/extensions/ERC20Burnable.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/introspection/IERC165.sol#4) allows old versions
Pragma version^0.8.9 (contracts/SpaceIDToken.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.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/token/ERC20/ERC20.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/math/Math.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/utils/Counters.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/access/AccessControl.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/access/AccessControlEnumerable.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/cryptography/EIP712.sol#4) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/structs/EnumerableSet.sol#5) allows old versions
solc-0.8.9 is not recommended for deployment
Pragma version^0.8.0 (@openzeppelin/contracts/utils/Context.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
Variable EIP712._TYPE_HASH (@openzeppelin/contracts/utils/cryptography/EIP712.sol#37) is not in mixedCase
Variable EIP712._CACHED_THIS (@openzeppelin/contracts/utils/cryptography/EIP712.sol#33) is not in mixedCase
Variable ERC20Permit._PERMIT_TYPEHASH_DEPRECATED_SLOT (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#37) is not in mixedCase
Function IERC20Permit.DOMAIN_SEPARATOR() (@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol#59) is not in mixedCase
Variable EIP712._CACHED_CHAIN_ID (@openzeppelin/contracts/utils/cryptography/EIP712.sol#32) is not in mixedCase
Function ERC20Permit.DOMAIN_SEPARATOR() (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#81-83) is not in mixedCase
Variable EIP712._HASHED_NAME (@openzeppelin/contracts/utils/cryptography/EIP712.sol#35) is not in mixedCase
Variable EIP712._CACHED_DOMAIN_SEPARATOR (@openzeppelin/contracts/utils/cryptography/EIP712.sol#31) is not in mixedCase
Variable EIP712._HASHED_VERSION (@openzeppelin/contracts/utils/cryptography/EIP712.sol#36) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
ERC20Permit._PERMIT_TYPEHASH_DEPRECATED_SLOT (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#37) is never used in SpaceIDToken (contracts/SpaceIDToken.sol#16-43)
Remove unused state variables.
Additional information: link
ERC20Permit._PERMIT_TYPEHASH_DEPRECATED_SLOT (@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#37) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
Unable to find audit link on the website
Unable to find Telegram link on the website
Token is not listed at Mobula.Finance
Additional information: link
Unable to find Youtube account