code4rena-2022-08-nounsdao-n04
[N‑04] constants should be defined rather than using magic numbers
Summary
상수 값을 직접 코드에 사용하는 것보다 constant 변수를 선언해 사용하는 쪽이 코드의 readability에 좋다고 지적했다.
Keyword
input validation, address
Vulnerability
- contracts/base/ERC721Checkpointable.sol#L254
- contracts/governance/NounsDAOLogicV1.sol#L673
- contracts/governance/NounsDAOLogicV2.sol#L908
- contracts/governance/NounsDAOProxy.sol#L98
File: contracts/base/ERC721Checkpointable.sol
/// @audit 32
254: require(n < 2**32, errorMessage);
/// @audit 96
259: require(n < 2**96, errorMessage);File: contracts/governance/NounsDAOLogicV1.sol
/// @audit 10000
673: return (number * bps) / 10000;File: contracts/governance/NounsDAOLogicV2.sol
/// @audit 10000
908: uint256 againstVotesBPS = (10000 * againstVotes) / totalSupply;
/// @audit 1e6
909: uint256 quorumAdjustmentBPS = (params.quorumCoefficient * againstVotesBPS) / 1e6;
/// @audit 10000
1007: return (number * bps) / 10000;File: contracts/governance/NounsDAOProxy.sol
/// @audit 0x20
98: revert(add(returnData, 0x20), returndatasize())
/// @audit 0x40
113: let free_mem_ptr := mload(0x40)숫자 등의 상수를 직접 코드에 사용하는 것보다 constant 변수를 선언해 사용하는 쪽이 코드의 readability에 좋다고 지적했다.
Impact
코드의 readability에 좋지 않다.
Mitigation
상수 값을 코드에 직접 쓰는 대신 constant 변수를 선언해 사용한다.
Memo
참 별 거 아닌데 $38 정도 받았다. 이 정도면 고나리질할 가치 있지.
tags: bughunting, nouns dao, readability, clean code, smart contract, solidity, severity none