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