Seascape Network offers Crown token to reward all key stakeholders of the gaming ecosystem. The token has become a core pillar of a series of planned DeFi & NFT games, where players will be able to increase their earnings exponentially through a variety of LP mining and NFT staking games.
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Contract ownership is not renounced (belongs to a wallet)
CrownsToken.allowance(address,address).owner (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#175) shadows:
- Ownable.owner() (contracts/openzeppelin/contracts/access/Ownable.sol#35-37) (function)
CrownsToken._approve(address,address,uint256).owner (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#333) shadows:
- Ownable.owner() (contracts/openzeppelin/contracts/access/Ownable.sol#35-37) (function)
CrownsToken.rebaseOwing(address).rebase (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#86) shadows:
- CrownsToken.rebase() (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#418-429) (function)
Rename the local variables that shadow another component.
Additional information: link
Address.isContract(address) (contracts/openzeppelin/contracts/utils/Address.sol#26-35) uses assembly
- INLINE ASM (contracts/openzeppelin/contracts/utils/Address.sol#33)
Address._functionCallWithValue(address,bytes,uint256,string) (contracts/openzeppelin/contracts/utils/Address.sol#119-140) uses assembly
- INLINE ASM (contracts/openzeppelin/contracts/utils/Address.sol#132-135)
Do not use evm assembly.
Additional information: link
Different versions of Solidity are used:
- Version used: ['0.6.7', '^0.6.0', '^0.6.2']
- 0.6.7 (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#3)
- ^0.6.0 (contracts/openzeppelin/contracts/GSN/Context.sol#3)
- ^0.6.0 (contracts/openzeppelin/contracts/access/Ownable.sol#3)
- ^0.6.0 (contracts/openzeppelin/contracts/math/SafeMath.sol#3)
- ^0.6.0 (contracts/openzeppelin/contracts/token/ERC20/IERC20.sol#3)
- ^0.6.2 (contracts/openzeppelin/contracts/utils/Address.sol#3)
Use one Solidity version.
Additional information: link
Address.sendValue(address,uint256) (contracts/openzeppelin/contracts/utils/Address.sol#53-59) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (contracts/openzeppelin/contracts/utils/Address.sol#104-106) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (contracts/openzeppelin/contracts/math/SafeMath.sol#155-158) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (contracts/openzeppelin/contracts/utils/Address.sol#114-117) is never used and should be removed
Context._msgData() (contracts/openzeppelin/contracts/GSN/Context.sol#20-23) is never used and should be removed
SafeMath.mod(uint256,uint256) (contracts/openzeppelin/contracts/math/SafeMath.sol#139-141) is never used and should be removed
Address._functionCallWithValue(address,bytes,uint256,string) (contracts/openzeppelin/contracts/utils/Address.sol#119-140) is never used and should be removed
Address.isContract(address) (contracts/openzeppelin/contracts/utils/Address.sol#26-35) is never used and should be removed
Address.functionCall(address,bytes,string) (contracts/openzeppelin/contracts/utils/Address.sol#89-91) is never used and should be removed
Address.functionCall(address,bytes) (contracts/openzeppelin/contracts/utils/Address.sol#79-81) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.6.0 (contracts/openzeppelin/contracts/access/Ownable.sol#3) allows old versions
Pragma version^0.6.0 (contracts/openzeppelin/contracts/token/ERC20/IERC20.sol#3) allows old versions
Pragma version^0.6.2 (contracts/openzeppelin/contracts/utils/Address.sol#3) allows old versions
Pragma version^0.6.0 (contracts/openzeppelin/contracts/GSN/Context.sol#3) allows old versions
solc-0.6.7 is not recommended for deployment
Pragma version0.6.7 (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#3) allows old versions
Pragma version^0.6.0 (contracts/openzeppelin/contracts/math/SafeMath.sol#3) 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._functionCallWithValue(address,bytes,uint256,string) (contracts/openzeppelin/contracts/utils/Address.sol#119-140):
- (success,returndata) = target.call{value: weiValue}(data) (contracts/openzeppelin/contracts/utils/Address.sol#123)
Low level call in Address.sendValue(address,uint256) (contracts/openzeppelin/contracts/utils/Address.sol#53-59):
- (success) = recipient.call{value: amount}() (contracts/openzeppelin/contracts/utils/Address.sol#57)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Constant CrownsToken._decimalFactor (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#36) is not in UPPER_CASE_WITH_UNDERSCORES
Constant CrownsToken._million (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#37) is not in UPPER_CASE_WITH_UNDERSCORES
Constant CrownsToken._minSpend (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#35) is not in UPPER_CASE_WITH_UNDERSCORES
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (contracts/openzeppelin/contracts/GSN/Context.sol#21)" inContext (contracts/openzeppelin/contracts/GSN/Context.sol#15-24)
Remove redundant statements if they congest code but offer no value.
Additional information: link
CrownsToken.slitherConstructorConstantVariables() (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#17-430) uses literals with too many digits:
- _million = 1000000 (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#37)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
symbol() should be declared external:
- CrownsToken.symbol() (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#125-127)
rebase() should be declared external:
- CrownsToken.rebase() (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#418-429)
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (contracts/openzeppelin/contracts/access/Ownable.sol#54-57)
decreaseAllowance(address,uint256) should be declared external:
- CrownsToken.decreaseAllowance(address,uint256) (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#244-247)
spendFrom(address,uint256) should be declared external:
- CrownsToken.spendFrom(address,uint256) (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#371-379)
name() should be declared external:
- CrownsToken.name() (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#117-119)
owner() should be declared external:
- Ownable.owner() (contracts/openzeppelin/contracts/access/Ownable.sol#35-37)
getLastRebase(address) should be declared external:
- CrownsToken.getLastRebase(address) (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#384-386)
transferFrom(address,address,uint256) should be declared external:
- CrownsToken.transferFrom(address,address,uint256) (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#207-211)
spend(uint256) should be declared external:
- CrownsToken.spend(uint256) (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#362-369)
increaseAllowance(address,uint256) should be declared external:
- CrownsToken.increaseAllowance(address,uint256) (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#225-228)
approve(address,uint256) should be declared external:
- CrownsToken.approve(address,uint256) (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#193-196)
decimals() should be declared external:
- CrownsToken.decimals() (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#138-140)
allowance(address,address) should be declared external:
- CrownsToken.allowance(address,address) (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#175-177)
transfer(address,uint256) should be declared external:
- CrownsToken.transfer(address,uint256) (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#163-166)
balanceOf(address) should be declared external:
- CrownsToken.balanceOf(address) (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#152-154)
totalSupply() should be declared external:
- CrownsToken.totalSupply() (contracts/crowns/erc-20/contracts/CrownsToken/CrownsToken.sol#145-147)
Use the external attribute for functions never called from the contract.
Additional information: link
Twitter account link seems to be invalid