code4rena-2022-08-nounsdao-n02

[N‑02] Non-assembly method available

보고서

Summary

불필요하게 inline assembly를 사용하여 코드 복잡도를 올리고 있음을 지적했다.

Keyword

solidity, inline assembly

Vulnerability

File: contracts/base/ERC721Checkpointable.sol
 
285:              chainId := chainid()
 
 
File: contracts/governance/NounsDAOLogicV1.sol
 
679:              chainId := chainid()
 
 
File: contracts/governance/NounsDAOLogicV2.sol
 
1013:             chainId := chainid()

불필요하게 inline assembly를 사용하여 코드 복잡도를 올리고 있음을 지적했다.

Impact

코드가 복잡해진다.

Mitigation

assembly{ id := chainid() } uint256 id = block.chainid 로 변경한다.

또한 assembly { size := extcodesize() } uint256 size = address().code.length 로 변경한다.

Memo

의도적으로 최적화를 위해 어셈블리를 이용한 경우와 쓸데없이 이용한 경우를 어떻게 구분할까? 별로 최적화의 의미가 없는 코드에 대해서 지적이 가능할 것 같다.


tags: bughunting, nouns dao, smart contract, solidity, solidity assembly, clean code, readability, severity none