Nouns DAO contest - bobirichman's results

A DAO-driven NFT project on Ethereum.

General Information

Platform: Code4rena

Start Date: 22/08/2022

Pot Size: $50,000 USDC

Total HM: 4

Participants: 160

Period: 5 days

Judge: gzeon

Total Solo HM: 2

Id: 155

League: ETH

Nouns DAO

Findings Distribution

Researcher Performance

Rank: 48/160

Findings: 2

Award: $52.34

🌟 Selected for report: 0

🚀 Solo Findings: 0

QA REPORT

[LOW] Not verified input

At the following functions you should verify the parameters that are being assigned to a state variable.

Proof of concept:

[LOW] Approve 0 first

At some tokens you can approve an amount (at USDT for instance) only after approving to 0. Consider using increase/decrease approve notation instead.

Example: NounsToken.sol#L139

[LOW] Missing nonReentrancy modifier

The following functions allows attackers to try reentrancy since they are calling to external contracts / transferring eth. Consider adding a nonReentrancy modifier.

Proof of concept:

[LOW] Improving precision by using multiplication instead division

When conditioning over a mathematical in-equation of the type x / y < z you can improve precision by changing to x < z * y.

Example: NounsAuctionHouse.sol#L109

[LOW] Missing pause functionality

Proof of concept:

[LOW] Payable functions that should not be payable

The following functions are payable but doesn't record the sender transaction. Consider making them not payable instead.

Proof of concept:

[LOW] Consider adding two steps verification process

Protocol ownership transfer should be dealt with great care. Adding two steps verification is necessary for that matter.

Example: NounsDescriptorV2.t.sol

[LOW] Consider adding an MIT licence

Adding MIT licence is common among open source projects, consider adding it to every solidity file.

Proof of concept:

[NON CRITICAL] Named returns

Consider using one of the two return methods. Using both makes the code less readable.

Proof of concept:

[NON CRITICAL] Missing function spec comments

Proof of concept:

[NON CRITICAL] Floating pragma

Floating pragma is a bad practice, since it does not guaranty the same version at future deployments.

Proof of concept:

[NON CRITICAL] Unused function parameters should have name removed

If for any reason the following unused parameters are necessary then remove their naming (since only the type matters for function signature)

Proof of concept:

[NON CRITICAL] NonReentrancy should be the first modifier in order

Example: NounsAuctionHouse.sol#L96

[NON CRITICAL] Missing event emit

In functions that update/assigns state variables it is a good practice to emit event.

Proof of concept:

GAS REPORT

[GAS] Use assembly opcodes iszero in the following locations

Proof of concept:

[GAS] Use bytes32 in the following locations

Proof of concept:

[GAS] Use abiEncodePacked()

Proof of concept:

[GAS] In the following revert statements consider using custom error instead a message

Proof of concept:

[GAS] Cache array size

You can cache the array size to improve gas usage in the following locations

Proof of concept:

[GAS] Do not cache msg.sender since loading msg.sender is more efficient than a local variable

Proof of concept:

--

AuditHub

A portfolio for auditors, a security profile for protocols, a hub for web3 security.

Built bymalatrax © 2024

Auditors

Browse

Contests

Browse

Get in touch

ContactTwitter