Novaland is the virtual reality platform built on BSC, combining blockchain technology and NFT with UGC gaming mechanisms, that allows users to play, create, own and monetize their game experiences through NOVA.
NovaLandToken.emergencySupport(address) (contracts/token/NovaLandToken.sol#70-72) ignores return value by ERC20Upgradeable(token).transfer(msg.sender,ERC20Upgradeable(token).balanceOf(address(this))) (contracts/token/NovaLandToken.sol#71)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
NovaLandToken.whiteList (contracts/token/NovaLandToken.sol#19) is never initialized. It is used in:
- NovaLandToken._transfer(address,address,uint256) (contracts/token/NovaLandToken.sol#49-64)
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
Contract creator or owner is blacklisted for past scams
NovaLandToken._safeTransferBNB(address,uint256) (contracts/token/NovaLandToken.sol#79-82) sends eth to arbitrary user
Dangerous calls:
- (success) = to.call{value: value}(new bytes(0)) (contracts/token/NovaLandToken.sol#80)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Combination 2: Unchecked transfer + Functions that send Ether to arbitraty destination. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
Contract ownership is not renounced (belongs to a wallet)
ERC20VotesUpgradeable._writeCheckpoint(ERC20VotesUpgradeable.Checkpoint[],function(uint256,uint256) returns(uint256),uint256) (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#239-253) uses a dangerous strict equality:
- pos > 0 && ckpts[pos - 1].fromBlock == block.number (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#248)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
ERC20VotesUpgradeable.__gap (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#262) is never used in NovaLandToken (contracts/token/NovaLandToken.sol#11-97)
Remove unused state variables.
Additional information: link
Pragma version^0.8.0 (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#3) allows old versions
Pragma version^0.8.0 (contracts/dependencies/open-zeppelin/token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol#3) allows old versions
Pragma version^0.8.0 (contracts/dependencies/open-zeppelin/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol#3) allows old versions
Pragma version^0.8.0 (contracts/dependencies/open-zeppelin/utils/cryptography/draft-EIP712Upgradeable.sol#3) allows old versions
Pragma version^0.8.0 (contracts/dependencies/open-zeppelin/token/ERC20/extensions/IERC20MetadataUpgradeable.sol#3) allows old versions
Pragma version^0.8.0 (contracts/dependencies/open-zeppelin/utils/CountersUpgradeable.sol#3) allows old versions
Pragma version^0.8.0 (contracts/dependencies/open-zeppelin/proxy/utils/Initializable.sol#3) allows old versions
Pragma version^0.8.0 (contracts/dependencies/open-zeppelin/utils/ContextUpgradeable.sol#3) allows old versions
Pragma version^0.8.0 (contracts/dependencies/open-zeppelin/token/ERC20/ERC20Upgradeable.sol#3) allows old versions
Pragma version^0.8.0 (contracts/dependencies/open-zeppelin/utils/cryptography/ECDSAUpgradeable.sol#3) allows old versions
Pragma version^0.8.0 (contracts/dependencies/open-zeppelin/access/OwnableUpgradeable.sol#3) allows old versions
solc-0.8.0 is not recommended for deployment
Pragma version^0.8.0 (contracts/interfaces/ILockContract.sol#2) allows old versions
Pragma version^0.8.0 (contracts/dependencies/open-zeppelin/utils/math/MathUpgradeable.sol#3) allows old versions
Pragma version^0.8.0 (contracts/dependencies/open-zeppelin/token/ERC20/IERC20Upgradeable.sol#3) allows old versions
Pragma version^0.8.0 (contracts/dependencies/open-zeppelin/utils/math/SafeCastUpgradeable.sol#3) allows old versions
Pragma version^0.8.0 (contracts/token/NovaLandToken.sol#1) 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 NovaLandToken._safeTransferBNB(address,uint256) (contracts/token/NovaLandToken.sol#79-82):
- (success) = to.call{value: value}(new bytes(0)) (contracts/token/NovaLandToken.sol#80)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function ERC20PermitUpgradeable.__ERC20Permit_init(string) (contracts/dependencies/open-zeppelin/token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol#35-39) is not in mixedCase
Function IERC20PermitUpgradeable.DOMAIN_SEPARATOR() (contracts/dependencies/open-zeppelin/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol#58) is not in mixedCase
Variable EIP712Upgradeable.__gap (contracts/dependencies/open-zeppelin/utils/cryptography/draft-EIP712Upgradeable.sol#111) is not in mixedCase
Variable EIP712Upgradeable._HASHED_NAME (contracts/dependencies/open-zeppelin/utils/cryptography/draft-EIP712Upgradeable.sol#29) is not in mixedCase
Function EIP712Upgradeable.__EIP712_init(string,string) (contracts/dependencies/open-zeppelin/utils/cryptography/draft-EIP712Upgradeable.sol#47-49) is not in mixedCase
Function ERC20VotesUpgradeable.__ERC20Votes_init_unchained() (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#29-30) is not in mixedCase
Function ERC20PermitUpgradeable.__ERC20Permit_init_unchained(string) (contracts/dependencies/open-zeppelin/token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol#41-42) is not in mixedCase
Variable ContextUpgradeable.__gap (contracts/dependencies/open-zeppelin/utils/ContextUpgradeable.sol#30) is not in mixedCase
Variable ERC20PermitUpgradeable._PERMIT_TYPEHASH (contracts/dependencies/open-zeppelin/token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol#28) is not in mixedCase
Function OwnableUpgradeable.__Ownable_init() (contracts/dependencies/open-zeppelin/access/OwnableUpgradeable.sol#28-31) is not in mixedCase
Variable OwnableUpgradeable.__gap (contracts/dependencies/open-zeppelin/access/OwnableUpgradeable.sol#81) is not in mixedCase
Variable ERC20VotesUpgradeable.__gap (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#262) is not in mixedCase
Function ERC20Upgradeable.__ERC20_init_unchained(string,string) (contracts/dependencies/open-zeppelin/token/ERC20/ERC20Upgradeable.sol#59-62) is not in mixedCase
Function ERC20Upgradeable.__ERC20_init(string,string) (contracts/dependencies/open-zeppelin/token/ERC20/ERC20Upgradeable.sol#54-57) is not in mixedCase
Variable NovaLandToken.LOCK_CONTRACT (contracts/token/NovaLandToken.sol#18) is not in mixedCase
Variable ERC20PermitUpgradeable.__gap (contracts/dependencies/open-zeppelin/token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol#93) is not in mixedCase
Function ContextUpgradeable.__Context_init_unchained() (contracts/dependencies/open-zeppelin/utils/ContextUpgradeable.sol#21-22) is not in mixedCase
Function EIP712Upgradeable._EIP712VersionHash() (contracts/dependencies/open-zeppelin/utils/cryptography/draft-EIP712Upgradeable.sol#108-110) is not in mixedCase
Variable EIP712Upgradeable._HASHED_VERSION (contracts/dependencies/open-zeppelin/utils/cryptography/draft-EIP712Upgradeable.sol#30) is not in mixedCase
Variable ERC20Upgradeable.__gap (contracts/dependencies/open-zeppelin/token/ERC20/ERC20Upgradeable.sol#361) is not in mixedCase
Function EIP712Upgradeable._EIP712NameHash() (contracts/dependencies/open-zeppelin/utils/cryptography/draft-EIP712Upgradeable.sol#98-100) is not in mixedCase
Function OwnableUpgradeable.__Ownable_init_unchained() (contracts/dependencies/open-zeppelin/access/OwnableUpgradeable.sol#33-35) is not in mixedCase
Function ERC20PermitUpgradeable.DOMAIN_SEPARATOR() (contracts/dependencies/open-zeppelin/token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol#79-81) is not in mixedCase
Function ContextUpgradeable.__Context_init() (contracts/dependencies/open-zeppelin/utils/ContextUpgradeable.sol#17-19) is not in mixedCase
Function EIP712Upgradeable.__EIP712_init_unchained(string,string) (contracts/dependencies/open-zeppelin/utils/cryptography/draft-EIP712Upgradeable.sol#51-56) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
ERC20VotesUpgradeable._moveVotingPower(address,address,uint256).newWeight_scope_1 (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#233) is a local variable never initialized
ERC20VotesUpgradeable._moveVotingPower(address,address,uint256).oldWeight_scope_0 (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#233) 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
ERC20PermitUpgradeable.__ERC20Permit_init_unchained(string).name (contracts/dependencies/open-zeppelin/token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol#41) shadows:
- ERC20Upgradeable.name() (contracts/dependencies/open-zeppelin/token/ERC20/ERC20Upgradeable.sol#67-69) (function)
- IERC20MetadataUpgradeable.name() (contracts/dependencies/open-zeppelin/token/ERC20/extensions/IERC20MetadataUpgradeable.sol#16) (function)
ERC20PermitUpgradeable.__ERC20Permit_init(string).name (contracts/dependencies/open-zeppelin/token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol#35) shadows:
- ERC20Upgradeable.name() (contracts/dependencies/open-zeppelin/token/ERC20/ERC20Upgradeable.sol#67-69) (function)
- IERC20MetadataUpgradeable.name() (contracts/dependencies/open-zeppelin/token/ERC20/extensions/IERC20MetadataUpgradeable.sol#16) (function)
Rename the local variables that shadow another component.
Additional information: link
NovaLandToken.setLockContract(address).lockContract (contracts/token/NovaLandToken.sol#44) lacks a zero-check on :
- LOCK_CONTRACT = lockContract (contracts/token/NovaLandToken.sol#45)
Check that the address is not zero.
Additional information: link
Variable 'ERC20VotesUpgradeable._moveVotingPower(address,address,uint256).oldWeight (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#228)' in ERC20VotesUpgradeable._moveVotingPower(address,address,uint256) (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#221-237) potentially used before declaration: (oldWeight,newWeight) = _writeCheckpoint(_checkpoints[dst],_add,amount) (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#233)
Variable 'ECDSAUpgradeable.tryRecover(bytes32,bytes).r (contracts/dependencies/open-zeppelin/utils/cryptography/ECDSAUpgradeable.sol#59)' in ECDSAUpgradeable.tryRecover(bytes32,bytes) (contracts/dependencies/open-zeppelin/utils/cryptography/ECDSAUpgradeable.sol#54-83) potentially used before declaration: r = mload(uint256)(signature + 0x20) (contracts/dependencies/open-zeppelin/utils/cryptography/ECDSAUpgradeable.sol#76)
Variable 'ERC20VotesUpgradeable._moveVotingPower(address,address,uint256).newWeight (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#228)' in ERC20VotesUpgradeable._moveVotingPower(address,address,uint256) (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#221-237) potentially used before declaration: (oldWeight,newWeight) = _writeCheckpoint(_checkpoints[dst],_add,amount) (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#233)
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
ERC20PermitUpgradeable.permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (contracts/dependencies/open-zeppelin/token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol#47-66) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp <= deadline,ERC20Permit: expired deadline) (contracts/dependencies/open-zeppelin/token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol#56)
ERC20VotesUpgradeable.delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32) (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#146-163) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp <= expiry,ERC20Votes: signature expired) (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#154)
Avoid relying on block.timestamp.
Additional information: link
ECDSAUpgradeable.tryRecover(bytes32,bytes32,bytes32) (contracts/dependencies/open-zeppelin/utils/cryptography/ECDSAUpgradeable.sol#112-124) uses assembly
- INLINE ASM (contracts/dependencies/open-zeppelin/utils/cryptography/ECDSAUpgradeable.sol#119-122)
ECDSAUpgradeable.tryRecover(bytes32,bytes) (contracts/dependencies/open-zeppelin/utils/cryptography/ECDSAUpgradeable.sol#54-83) uses assembly
- INLINE ASM (contracts/dependencies/open-zeppelin/utils/cryptography/ECDSAUpgradeable.sol#64-68)
- INLINE ASM (contracts/dependencies/open-zeppelin/utils/cryptography/ECDSAUpgradeable.sol#75-78)
Do not use evm assembly.
Additional information: link
ContextUpgradeable._msgData() (contracts/dependencies/open-zeppelin/utils/ContextUpgradeable.sol#27-29) is never used and should be removed
MathUpgradeable.ceilDiv(uint256,uint256) (contracts/dependencies/open-zeppelin/utils/math/MathUpgradeable.sol#38-41) is never used and should be removed
MathUpgradeable.min(uint256,uint256) (contracts/dependencies/open-zeppelin/utils/math/MathUpgradeable.sol#19-21) is never used and should be removed
ECDSAUpgradeable.toEthSignedMessageHash(bytes32) (contracts/dependencies/open-zeppelin/utils/cryptography/ECDSAUpgradeable.sol#201-205) is never used and should be removed
CountersUpgradeable.reset(CountersUpgradeable.Counter) (contracts/dependencies/open-zeppelin/utils/CountersUpgradeable.sol#39-41) is never used and should be removed
ERC20VotesUpgradeable._burn(address,uint256) (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#185-189) is never used and should be removed
EIP712Upgradeable.__EIP712_init(string,string) (contracts/dependencies/open-zeppelin/utils/cryptography/draft-EIP712Upgradeable.sol#47-49) is never used and should be removed
SafeCastUpgradeable.toUint64(uint256) (contracts/dependencies/open-zeppelin/utils/math/SafeCastUpgradeable.sol#76-79) is never used and should be removed
SafeCastUpgradeable.toInt16(int256) (contracts/dependencies/open-zeppelin/utils/math/SafeCastUpgradeable.sol#205-208) is never used and should be removed
SafeCastUpgradeable.toUint8(uint256) (contracts/dependencies/open-zeppelin/utils/math/SafeCastUpgradeable.sol#121-124) is never used and should be removed
SafeCastUpgradeable.toUint16(uint256) (contracts/dependencies/open-zeppelin/utils/math/SafeCastUpgradeable.sol#106-109) is never used and should be removed
SafeCastUpgradeable.toUint256(int256) (contracts/dependencies/open-zeppelin/utils/math/SafeCastUpgradeable.sol#133-136) is never used and should be removed
SafeCastUpgradeable.toInt128(int256) (contracts/dependencies/open-zeppelin/utils/math/SafeCastUpgradeable.sol#151-154) is never used and should be removed
ERC20VotesUpgradeable._subtract(uint256,uint256) (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#259-261) is never used and should be removed
SafeCastUpgradeable.toInt64(int256) (contracts/dependencies/open-zeppelin/utils/math/SafeCastUpgradeable.sol#169-172) is never used and should be removed
EIP712Upgradeable.__EIP712_init_unchained(string,string) (contracts/dependencies/open-zeppelin/utils/cryptography/draft-EIP712Upgradeable.sol#51-56) is never used and should be removed
ECDSAUpgradeable.tryRecover(bytes32,bytes32,bytes32) (contracts/dependencies/open-zeppelin/utils/cryptography/ECDSAUpgradeable.sol#112-124) is never used and should be removed
SafeCastUpgradeable.toInt32(int256) (contracts/dependencies/open-zeppelin/utils/math/SafeCastUpgradeable.sol#187-190) is never used and should be removed
ECDSAUpgradeable.tryRecover(bytes32,bytes) (contracts/dependencies/open-zeppelin/utils/cryptography/ECDSAUpgradeable.sol#54-83) is never used and should be removed
SafeCastUpgradeable.toInt256(uint256) (contracts/dependencies/open-zeppelin/utils/math/SafeCastUpgradeable.sol#235-239) is never used and should be removed
NovaLandToken._burn(address,uint256) (contracts/token/NovaLandToken.sol#37-42) is never used and should be removed
SafeCastUpgradeable.toInt8(int256) (contracts/dependencies/open-zeppelin/utils/math/SafeCastUpgradeable.sol#223-226) is never used and should be removed
ERC20VotesUpgradeable._add(uint256,uint256) (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#255-257) is never used and should be removed
ERC20PermitUpgradeable.__ERC20Permit_init(string) (contracts/dependencies/open-zeppelin/token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol#35-39) is never used and should be removed
ERC20Upgradeable._burn(address,uint256) (contracts/dependencies/open-zeppelin/token/ERC20/ERC20Upgradeable.sol#280-295) is never used and should be removed
ERC20VotesUpgradeable.__ERC20Votes_init_unchained() (contracts/dependencies/open-zeppelin/token/ERC20/extensions/ERC20VotesUpgradeable.sol#29-30) is never used and should be removed
SafeCastUpgradeable.toUint128(uint256) (contracts/dependencies/open-zeppelin/utils/math/SafeCastUpgradeable.sol#46-49) is never used and should be removed
SafeCastUpgradeable.toUint96(uint256) (contracts/dependencies/open-zeppelin/utils/math/SafeCastUpgradeable.sol#61-64) is never used and should be removed
ECDSAUpgradeable.recover(bytes32,bytes) (contracts/dependencies/open-zeppelin/utils/cryptography/ECDSAUpgradeable.sol#99-103) is never used and should be removed
MathUpgradeable.max(uint256,uint256) (contracts/dependencies/open-zeppelin/utils/math/MathUpgradeable.sol#12-14) is never used and should be removed
ECDSAUpgradeable.recover(bytes32,bytes32,bytes32) (contracts/dependencies/open-zeppelin/utils/cryptography/ECDSAUpgradeable.sol#131-139) is never used and should be removed
ERC20PermitUpgradeable.__ERC20Permit_init_unchained(string) (contracts/dependencies/open-zeppelin/token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol#41-42) is never used and should be removed
CountersUpgradeable.decrement(CountersUpgradeable.Counter) (contracts/dependencies/open-zeppelin/utils/CountersUpgradeable.sol#31-37) is never used and should be removed
ContextUpgradeable.__Context_init() (contracts/dependencies/open-zeppelin/utils/ContextUpgradeable.sol#17-19) is never used and should be removed
Remove unused functions.
Additional information: link
Average 30d PancakeSwap volume is less than $100. Token is either dead or inactive.
Average 30d PancakeSwap liquidity is less than $100. Token is either dead or inactive.
Average PancakeSwap trading volume, liqudity, number of swaps are extremely low. Token seems to be dead.
Average 30d number of PancakeSwap swaps is less than 1. Token is either dead or inactive.
Token is deployed only at one blockchain
Unable to find website, listings and other project-related information
Token is marked as scam (rug pull, honeypot, phishing, etc.)
Additional information: link
Token has a considerable age, but we're still unable to find its website
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Token has a considerable age, but average PancakeSwap 30d trading volume is low
Young tokens have high risks of price dump / death
Twitter account link seems to be invalid
Unable to find Blog account (Reddit or Medium)
Unable to find Youtube account
Unable to find Discord account