code-423n4 / 2021-12-defiprotocol-findings

0 stars 0 forks source link

Cache array length in for loops can save gas #119

Closed code423n4 closed 2 years ago

code423n4 commented 2 years ago

Handle

WatchPug

Vulnerability details

Reading array length at each iteration of the loop takes 6 gas (3 for mload and 3 to place memory_offset) in the stack.

Caching the array length in the stack saves around 3 gas per iteration.

Instances include:

https://github.com/code-423n4/2021-12-defiprotocol/blob/205d3766044171e325df6a8bf2e79b37856eece1/contracts/contracts/Basket.sol#L79-L79

for (uint256 x = 0; x < tokenList.length; x++) {

https://github.com/code-423n4/2021-12-defiprotocol/blob/205d3766044171e325df6a8bf2e79b37856eece1/contracts/contracts/Basket.sol#L275-L275

for (uint256 i = 0; i < weights.length; i++) {

https://github.com/code-423n4/2021-12-defiprotocol/blob/205d3766044171e325df6a8bf2e79b37856eece1/contracts/contracts/Basket.sol#L282-L282

for (uint256 i = 0; i < weights.length; i++) {

https://github.com/code-423n4/2021-12-defiprotocol/blob/205d3766044171e325df6a8bf2e79b37856eece1/contracts/contracts/Basket.sol#L289-L289

for (uint256 i = 0; i < weights.length; i++) {

https://github.com/code-423n4/2021-12-defiprotocol/blob/205d3766044171e325df6a8bf2e79b37856eece1/contracts/contracts/Auction.sol#L105-L105

for (uint256 i = 0; i < pendingWeights.length; i++) {
0xleastwood commented 2 years ago

Duplicate of #140