code4rena-2022-08-nounsdao-g07

[G‑07] Multiple accesses of a mapping/array should use a local variable cache

보고서

Summary

여러번 접근하는 mapping이나 array의 값의 경우 로컬 변수에 캐싱하라고 제안했다.

Keyword

gas optimization, storage, memory

Vulnerability

File: contracts/governance/NounsDAOLogicV2.sol
 
/// @audit quorumParamsCheckpoints[<etc>] on line 935
936:              return quorumParamsCheckpoints[len - 1].params;
 
/// @audit quorumParamsCheckpoints[<etc>] on line 967
968:              quorumParamsCheckpoints[pos - 1].params = params;

여러번 접근하는 mapping이나 array의 값의 경우 로컬 변수에 캐싱하라고 제안했다. 이들은 접근 시 위치를 계산하기 위해 keccak256를 이용하기 때문에(Gkeccak256 - 30 gas), 이를 캐싱한다면 접근을 위해 위치 계산에 드는 약 30~42 gas 를 절약할 수 있다.

Impact

매번 mapping이나 array에 접근하는 경우 위치를 계산하느라 가스를 낭비한다.

Mitigation

여러번 사용되는 mapping이나 array 값을 stack 변수에 캐싱해 이용한다.


tags: bughunting, nouns dao, smart contract, solidity, gas optimization, gas, solidity storage, solidity memory, severity gas