Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Contract ownership is not renounced (belongs to a wallet)
Reentrancy in Swagrun.batchPremint(uint256,bytes32[]) (#1756-1781):
External calls:
- batchMint(_batchSize) (#1778)
- IERC721Receiver(to).onERC721Received(_msgSender(),from,tokenId,_data) (#1363-1373)
State variables written after the call(s):
- premintMinted += uint64(_batchSize) (#1780)
- premintMintedInWallet[msg.sender] += _batchSize (#1779)
Reentrancy in Swagrun.batchPublicMint(uint128) (#1784-1806):
External calls:
- batchMint(_batchSize) (#1803)
- IERC721Receiver(to).onERC721Received(_msgSender(),from,tokenId,_data) (#1363-1373)
State variables written after the call(s):
- publicStageMintedInWallet[msg.sender] += _batchSize (#1805)
Apply the check-effects-interactions pattern.
Additional information: link
ERC721._checkOnERC721Received(address,address,uint256,bytes) (#1356-1377) ignores return value by IERC721Receiver(to).onERC721Received(_msgSender(),from,tokenId,_data) (#1363-1373)
Ensure that all the return values of the function calls are used.
Additional information: link
Swagrun.transfer(address,uint256)._to (#1848) lacks a zero-check on :
- (sent,data) = _to.call{value: transferVal}() (#1855)
Check that the address is not zero.
Additional information: link
Variable 'ERC721._checkOnERC721Received(address,address,uint256,bytes).retval (#1363)' in ERC721._checkOnERC721Received(address,address,uint256,bytes) (#1356-1377) potentially used before declaration: retval == IERC721Receiver.onERC721Received.selector (#1364)
Variable 'ERC721._checkOnERC721Received(address,address,uint256,bytes).reason (#1365)' in ERC721._checkOnERC721Received(address,address,uint256,bytes) (#1356-1377) potentially used before declaration: reason.length == 0 (#1366)
Variable 'ERC721._checkOnERC721Received(address,address,uint256,bytes).reason (#1365)' in ERC721._checkOnERC721Received(address,address,uint256,bytes) (#1356-1377) potentially used before declaration: revert(uint256,uint256)(32 + reason,mload(uint256)(reason)) (#1370)
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
MerkleProof._efficientHash(bytes32,bytes32) (#60-66) uses assembly
- INLINE ASM (#61-65)
Address.verifyCallResult(bool,bytes,string) (#651-671) uses assembly
- INLINE ASM (#663-666)
ERC721._checkOnERC721Received(address,address,uint256,bytes) (#1356-1377) uses assembly
- INLINE ASM (#1369-1371)
Do not use evm assembly.
Additional information: link
Swagrun.reveal() (#1709-1712) compares to a boolean constant:
-require(bool,string)(revealed == false,Already revealed) (#1710)
Swagrun.tokenURI(uint256) (#1720-1747) compares to a boolean constant:
-revealed == false (#1732)
Swagrun.batchMint(uint256) (#1825-1837) compares to a boolean constant:
-isTokenIdMinted[_tokenIdCounter.current()] == true (#1828)
Swagrun.mintToken(uint256) (#1839-1844) compares to a boolean constant:
-require(bool,string)(isTokenIdMinted[_tokenID] == false,Token already Minted) (#1841)
Remove the equality to the boolean constant.
Additional information: link
Different versions of Solidity is used:
- Version used: ['^0.8.0', '^0.8.1', '^0.8.4']
- ^0.8.0 (#6)
- ^0.8.0 (#74)
- ^0.8.0 (#140)
- ^0.8.0 (#186)
- ^0.8.0 (#256)
- ^0.8.0 (#283)
- ^0.8.0 (#361)
- ^0.8.1 (#454)
- ^0.8.0 (#679)
- ^0.8.0 (#709)
- ^0.8.0 (#737)
- ^0.8.0 (#768)
- ^0.8.0 (#913)
- ^0.8.0 (#944)
- ^0.8.0 (#973)
- ^0.8.0 (#1422)
- ^0.8.4 (#1585)
Use one Solidity version.
Additional information: link
Address.functionCall(address,bytes) (#535-537) is never used and should be removed
Address.functionCall(address,bytes,string) (#545-551) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#564-570) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#578-589) is never used and should be removed
Address.functionDelegateCall(address,bytes) (#624-626) is never used and should be removed
Address.functionDelegateCall(address,bytes,string) (#634-643) is never used and should be removed
Address.functionStaticCall(address,bytes) (#597-599) is never used and should be removed
Address.functionStaticCall(address,bytes,string) (#607-616) is never used and should be removed
Address.sendValue(address,uint256) (#510-515) is never used and should be removed
Address.verifyCallResult(bool,bytes,string) (#651-671) is never used and should be removed
Context._msgData() (#273-275) is never used and should be removed
Counters.decrement(Counters.Counter) (#168-174) is never used and should be removed
Counters.reset(Counters.Counter) (#176-178) is never used and should be removed
ERC721._baseURI() (#1073-1075) is never used and should be removed
ERC721._burn(uint256) (#1272-1286) is never used and should be removed
Strings.toHexString(uint256) (#222-233) is never used and should be removed
Strings.toHexString(uint256,uint256) (#238-248) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.8.0 (#6) allows old versions
Pragma version^0.8.0 (#74) allows old versions
Pragma version^0.8.0 (#140) allows old versions
Pragma version^0.8.0 (#186) allows old versions
Pragma version^0.8.0 (#256) allows old versions
Pragma version^0.8.0 (#283) allows old versions
Pragma version^0.8.0 (#361) allows old versions
Pragma version^0.8.1 (#454) allows old versions
Pragma version^0.8.0 (#679) allows old versions
Pragma version^0.8.0 (#709) allows old versions
Pragma version^0.8.0 (#737) allows old versions
Pragma version^0.8.0 (#768) allows old versions
Pragma version^0.8.0 (#913) allows old versions
Pragma version^0.8.0 (#944) allows old versions
Pragma version^0.8.0 (#973) allows old versions
Pragma version^0.8.0 (#1422) 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) (#510-515):
- (success) = recipient.call{value: amount}() (#513)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (#578-589):
- (success,returndata) = target.call{value: value}(data) (#587)
Low level call in Address.functionStaticCall(address,bytes,string) (#607-616):
- (success,returndata) = target.staticcall(data) (#614)
Low level call in Address.functionDelegateCall(address,bytes,string) (#634-643):
- (success,returndata) = target.delegatecall(data) (#641)
Low level call in Swagrun.transfer(address,uint256) (#1848-1857):
- (sent,data) = _to.call{value: transferVal}() (#1855)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Parameter ERC721.safeTransferFrom(address,address,uint256,bytes)._data (#1147) is not in mixedCase
Parameter Swagrun.updatePublicMintStagePrice(uint128)._newPrice (#1670) is not in mixedCase
Parameter Swagrun.updatePremintStageLimitPerWallet(uint64)._limitPerWallet (#1674) is not in mixedCase
Parameter Swagrun.updatePublicMintStageLimitPerWallet(uint128)._limitPerWallet (#1681) is not in mixedCase
Parameter Swagrun.updatePremintStageTotalSupplyLimit(uint64)._totalSupplyLimit (#1688) is not in mixedCase
Parameter Swagrun.updateMaxMintsAvailable(uint64)._NewMaxMintsAvailable (#1695) is not in mixedCase
Parameter Swagrun.setBaseURI(string)._inputBaseURI (#1715) is not in mixedCase
Parameter Swagrun.tokenURI(uint256)._tokenID (#1720) is not in mixedCase
Parameter Swagrun.updateMerkleRoot(bytes32)._newMerkleRoot (#1749) is not in mixedCase
Parameter Swagrun.batchPremint(uint256,bytes32[])._batchSize (#1756) is not in mixedCase
Parameter Swagrun.batchPremint(uint256,bytes32[])._merkleProof (#1756) is not in mixedCase
Parameter Swagrun.batchPublicMint(uint128)._batchSize (#1784) is not in mixedCase
Parameter Swagrun.ownerMintTokenId(uint256)._tokenID (#1809) is not in mixedCase
Parameter Swagrun.batchOwnerMintToken(uint256)._batchSize (#1818) is not in mixedCase
Parameter Swagrun.batchMint(uint256)._batchSize (#1825) is not in mixedCase
Parameter Swagrun.mintToken(uint256)._tokenID (#1839) is not in mixedCase
Parameter Swagrun.transfer(address,uint256)._to (#1848) is not in mixedCase
Parameter Swagrun.transfer(address,uint256)._amount (#1848) is not in mixedCase
Variable Swagrun.MaxMintsAvailable (#1619) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Swagrun.notRevealedUri (#1626-1627) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#332-334)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#340-343)
name() should be declared external:
- ERC721.name() (#1047-1049)
symbol() should be declared external:
- ERC721.symbol() (#1054-1056)
tokenURI(uint256) should be declared external:
- ERC721.tokenURI(uint256) (#1061-1066)
- Swagrun.tokenURI(uint256) (#1720-1747)
approve(address,uint256) should be declared external:
- ERC721.approve(address,uint256) (#1080-1090)
setApprovalForAll(address,bool) should be declared external:
- ERC721.setApprovalForAll(address,bool) (#1104-1106)
transferFrom(address,address,uint256) should be declared external:
- ERC721.transferFrom(address,address,uint256) (#1118-1127)
safeTransferFrom(address,address,uint256) should be declared external:
- ERC721.safeTransferFrom(address,address,uint256) (#1132-1138)
tokenOfOwnerByIndex(address,uint256) should be declared external:
- ERC721Enumerable.tokenOfOwnerByIndex(address,uint256) (#1454-1457)
tokenByIndex(uint256) should be declared external:
- ERC721Enumerable.tokenByIndex(uint256) (#1469-1472)
pause() should be declared external:
- Swagrun.pause() (#1639-1641)
unpause() should be declared external:
- Swagrun.unpause() (#1643-1645)
updateMerkleRoot(bytes32) should be declared external:
- Swagrun.updateMerkleRoot(bytes32) (#1749-1751)
batchPremint(uint256,bytes32[]) should be declared external:
- Swagrun.batchPremint(uint256,bytes32[]) (#1756-1781)
batchPublicMint(uint128) should be declared external:
- Swagrun.batchPublicMint(uint128) (#1784-1806)
ownerMintTokenId(uint256) should be declared external:
- Swagrun.ownerMintTokenId(uint256) (#1809-1815)
batchOwnerMintToken(uint256) should be declared external:
- Swagrun.batchOwnerMintToken(uint256) (#1818-1823)
transfer(address,uint256) should be declared external:
- Swagrun.transfer(address,uint256) (#1848-1857)
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