Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cache Reference To State Variable "currentAuctionID" in _checkAuctionFinalization (Auction.sol) #89

Open
code423n4 opened this issue Nov 29, 2021 · 1 comment
Labels
bug Something isn't working G (Gas Optimization) sponsor confirmed Sponsor agrees this is a problem and intends to fix it (OK to use w/ "disagree with severity")

Comments

@code423n4
Copy link
Contributor

Handle

ye0lde

Vulnerability details

Impact

Caching the references to "currentAuctionID" will decrease gas usage.

Proof of Concept

The state variable "currentAuctionID" is read 7 times in function "_checkAuctionFinalization" here:
https://github.com/code-423n4/2021-11-malt/blob/c3a204a2c0f7c653c6c2dda9f4563fd1dc1cecf3/src/contracts/Auction.sol#L746-L762

Tools Used

Visual Studio Code, Remix

Recommended Mitigation Steps

I suggest making the changes below to cache the variable:

  function _checkAuctionFinalization(bool isInternal) internal {

    uint256 currentId = currentAuctionId;
    if (isInternal && !isAuctionFinished(currentId)) {
      // Auction is still in progress after internal auction purchasing.
      _resetAuctionMaxCommitments();
    }

    if (isAuctionFinished(currentId)) {
      if (auctionActive(currentId)) {
        _endAuction(currentId);
      }

      if (!isAuctionFinalized(currentId)) {
        _finalizeAuction(currentId);
      }
      currentAuctionId = currentId + 1;
    }
  }
@code423n4 code423n4 added bug Something isn't working G (Gas Optimization) labels Nov 29, 2021
code423n4 added a commit that referenced this issue Nov 29, 2021
@0xScotch 0xScotch added the sponsor confirmed Sponsor agrees this is a problem and intends to fix it (OK to use w/ "disagree with severity") label Dec 8, 2021
@GalloDaSballo
Copy link
Collaborator

Agree with the finding, each read from a Hot Storage Slot is 100 gas, while reading from memory costs just 3 gas, as such, anytime you read a value from storage more than once, you should be caching it in memory

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working G (Gas Optimization) sponsor confirmed Sponsor agrees this is a problem and intends to fix it (OK to use w/ "disagree with severity")
Projects
None yet
Development

No branches or pull requests

3 participants