EIVISSA PROJECT OPTIMIZATION
Previous |
Improved |
|
|
Static Analisys with Slither
Auction.bid(uint256,uint256) (contracts/Auction.sol#31-39) ignores return value by usd.transferFrom(msg.sender,address(this),price) (contracts/Auction.sol#36)
Auction.addBidder(address,uint256,uint256) (contracts/Auction.sol#63-89) ignores return value by usd.transfer(tmp.wallet,tmp.amount) (contracts/Auction.sol#82)
EivissaProject.withdraw() (contracts/EivissaProject.sol#175-179) ignores return value by usd.transfer(owner(),usd.balanceOf(address(this))) (contracts/EivissaProject.sol#176)
Sale.buy(uint256) (contracts/Sale.sol#30-41) ignores return value by usd.transferFrom(msg.sender,address(eivissa),minPrices[id]) (contracts/Sale.sol#35)
System.finish() (contracts/System.sol#69-72) ignores return value by usd.transfer(address(eivissa),usd.balanceOf(address(this))) (contracts/System.sol#71)
// Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-transfer
System.onlyHolder() (contracts/System.sol#40-44) uses a dangerous strict equality:
- mrc.balanceOf(msg.sender) == 0 && isAdmin[msg.sender] == false
(contracts/System.sol#41)
// Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-strict-equalities
Reentrancy in Auction.bid(uint256,uint256) (contracts/Auction.sol#31-39):
External calls:
- usd.transferFrom(msg.sender,address(this),price) (contracts/Auction.sol#36)
- addBidder(msg.sender,price,id) (contracts/Auction.sol#37)
- usd.transfer(tmp.wallet,tmp.amount) (contracts/Auction.sol#82)
State variables written after the call(s):
- addBidder(msg.sender,price,id) (contracts/Auction.sol#37)
- minPrices[id] = bidders[id][bidders[id].length - 1].amount + increment (contracts/Auction.sol#87)
Reentrancy in Sale.buy(uint256) (contracts/Sale.sol#30-41):
External calls:
- usd.transferFrom(msg.sender,address(eivissa),minPrices[id]) (contracts/Sale.sol#35)
State variables written after the call(s):
- ++ (currentSupply[id]) (contracts/Sale.sol#36)
- userMints[msg.sender] = true (contracts/Sale.sol#38)
Reentrancy in MRCRYPTO.reservedMint(uint256) (contracts/mock/MRC.sol#96-118):
External calls:
- _safeMint(msg.sender,supply + 1) (contracts/mock/MRC.sol#109)
- IERC721Receiver(to).onERC721Received(_msgSender(),from,tokenId,data) (node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol#401-412)
State variables written after the call(s):
- reservedMints[_tokenId] = true (contracts/mock/MRC.sol#110)
Reentrancy in MRCRYPTO.reservedMint(uint256) (contracts/mock/MRC.sol#96-118):
External calls:
- _safeMint(msg.sender,supply + 1) (contracts/mock/MRC.sol#115)
- IERC721Receiver(to).onERC721Received(_msgSender(),from,tokenId,data) (node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol#401-412)
State variables written after the call(s):
- reservedMints[_tokenId] = true (contracts/mock/MRC.sol#116)
//Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-1
EivissaProject.setBaseURI(string)._uri (contracts/EivissaProject.sol#149) shadows:
- ERC1155._uri (node_modules/@openzeppelin/contracts/token/ERC1155/ERC1155.sol#30) (state variable)
EivissaProject.setRoyaltyInfo(uint256[3],address).royaltyWallet_ (contracts/EivissaProject.sol#170) lacks a zero-check on :
- royaltyWallet = royaltyWallet_ (contracts/EivissaProject.sol#172)
Reentrancy in Auction.addBidder(address,uint256,uint256) (contracts/Auction.sol#63-89):
External calls:
- usd.transfer(tmp.wallet,tmp.amount) (contracts/Auction.sol#82)
State variables written after the call(s):
- minPrices[id] = bidders[id][bidders[id].length - 1].amount + increment (contracts/Auction.sol#87)
// Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2
Reentrancy in Auction.bid(uint256,uint256) (contracts/Auction.sol#31-39):
External calls:
- usd.transferFrom(msg.sender,address(this),price) (contracts/Auction.sol#36)
- addBidder(msg.sender,price,id) (contracts/Auction.sol#37)
- usd.transfer(tmp.wallet,tmp.amount) (contracts/Auction.sol#82)
Event emitted after the call(s):
- auctionEvent(msg.sender,id,price) (contracts/Auction.sol#38)
Reentrancy in Sale.buy(uint256) (contracts/Sale.sol#30-41):
External calls:
- usd.transferFrom(msg.sender,address(eivissa),minPrices[id]) (contracts/Sale.sol#35)
- eivissa.mint(msg.sender,id,1) (contracts/Sale.sol#39)
Event emitted after the call(s):
- saleEvent(msg.sender,id) (contracts/Sale.sol#40)
// Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3
Auction.bid(uint256,uint256) (contracts/Auction.sol#31-39) compares to a boolean constant:
-require(bool,string)(finished == false,Has finished) (contracts/Auction.sol#32)
Auction.claim(uint256) (contracts/Auction.sol#52-59) compares to a boolean constant:
-require(bool,string)(finished == true,Not finished) (contracts/Auction.sol#55)
Auction.addBidder(address,uint256,uint256) (contracts/Auction.sol#63-89) compares to a boolean constant:
-(newEntered == false && tmp.amount > bidders[id][i].amount) || (newEntered == true && tmp.amount >= bidders[id][i].amount) (contracts/Auction.sol#69-70)
EivissaProject.isNotPaused() (contracts/EivissaProject.sol#43-46) compares to a boolean constant:
-isAdmin[msg.sender] == false && paused == true (contracts/EivissaProject.sol#44)
EivissaProject.isWhitelisted() (contracts/EivissaProject.sol#48-51) compares to a boolean constant:
-whitelist[msg.sender] == false (contracts/EivissaProject.sol#49)
EivissaProject.isTransferible() (contracts/EivissaProject.sol#53-56) compares to a boolean constant:
-transferible == false || isCollab[msg.sender] == true (contracts/EivissaProject.sol#54)
EivissaProject.onlyAdmin() (contracts/EivissaProject.sol#58-61) compares to a boolean constant:
-isAdmin[msg.sender] == false (contracts/EivissaProject.sol#59)
Sale.buy(uint256) (contracts/Sale.sol#30-41) compares to a boolean constant:
-require(bool)(userMints[msg.sender] == false) (contracts/Sale.sol#33)
System.isNotPaused() (contracts/System.sol#22-26) compares to a boolean constant:
-isAdmin[msg.sender] == false && paused == true (contracts/System.sol#23)
System.onlyAdmin() (contracts/System.sol#28-32) compares to a boolean constant:
-isAdmin[msg.sender] == false (contracts/System.sol#29)
System.isWhitelisted() (contracts/System.sol#34-38) compares to a boolean constant:
-whitelistEnabled == true && whitelist[msg.sender] == false (contracts/System.sol#35)
System.onlyHolder() (contracts/System.sol#40-44) compares to a boolean constant:
-mrc.balanceOf(msg.sender) == 0 && isAdmin[msg.sender] == false (contracts/System.sol#41)
MRCRYPTO.reservedMint(uint256) (contracts/mock/MRC.sol#96-118) compares to a boolean constant:
-require(bool,string)(reservedMints[_tokenId] == false,Token alredy used to mint at reserved price) (contracts/mock/MRC.sol#103)
MRCRYPTO.tokenURI(uint256) (contracts/mock/MRC.sol#150-156) compares to a boolean constant:
-revealed == false && tokenId > previousMaxSupply (contracts/mock/MRC.sol#153)
//Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#boolean-equality