Open code423n4 opened 2 years ago
701781 to 701247 => -534
My personal judgments:
Now, here is the methodology I used for calculating a score for each gas report. I first assigned each submission to be either small-optimization (1 point), medium-optimization (5 points) or large-optimization (10 points), depending on how useful the optimization is. The score of a gas report is the sum of these points, divided by the maximum number of points achieved by a gas report. This maximum number was 10 points, achieved by #67.
The number of points achieved by this report is 1 points. Thus the final score of this gas report is (1/10)*100 = 10.
Nested Finance Gas Optimization Report
Unless otherwise noted, manual auditing and testing were done using Visual Studio Code and Remix. The sponsor-provided test suite was used to verify the findings.
The audit was done from February 10-12, 2022 by ye0lde through code4rena.
store
can be more efficient (NestedRecords.sol)unchecked
keyword (NestedFactory.sol)Findings
G-1 - Function
store
can be more efficient (NestedRecords.sol)Impact
Caching the references to
records[_nftId]
in thestore
function will decrease gas usage asstore
is called frequently from NestedFactory.solBelow are the relevant numbers from the sponsor's test suite before and after the change:
Proof of Concept
The
store
function is here: https://github.com/code-423n4/2022-02-nested/blob/fe6f9ef7783c3c84798c8ab5fc58085a55cebcfc/contracts/NestedRecords.sol#L111-L132Recommended Mitigation Steps
I suggest the following changes:
G-2 - Save gas and retain code clarity with the
unchecked
keyword (NestedFactory.sol)Impact
In a previous Code4rena audit, various "unchecked" optimizations were suggested. Some of which were implemented and some were not because the sponsor's focus was code clarity over optimization.
I believe this suggestion meets the requirements for both optimization and clarity. Below are the relevant numbers from the sponsor's test suite before and after the change:
Proof of Concept
The code that can be
unchecked
is here: https://github.com/code-423n4/2022-02-nested/blob/fe6f9ef7783c3c84798c8ab5fc58085a55cebcfc/contracts/NestedFactory.sol#L339-L347The "unchecked" keyword can be applied here since there is a
require
statement at #337 that ensures the arithmetic operations would not cause an integer underflow or overflow.Recommended Mitigation Steps
Add
unchecked
around #L339-L347 as shown below.