Art Gobblers contest - V_B's results

Experimental Decentralized Art Factory By Justin Roiland and Paradigm.

General Information

Platform: Code4rena

Start Date: 20/09/2022

Pot Size: $100,000 USDC

Total HM: 4

Participants: 109

Period: 7 days

Judge: GalloDaSballo

Id: 163

League: ETH

Art Gobblers

Findings Distribution

Researcher Performance

Rank: 47/109

Findings: 2

Award: $123.86

🌟 Selected for report: 0

🚀 Solo Findings: 0

1. Suggestion: two-step ownership transition in Owned contract

It is reasonable to add a two-step ownership transition: in the first stage owner proposes to transfer ownership, and in the second new owner accepts ownership by calling a special function.

2. changing bool isERC1155 to enum

There is gobble function in ArtGobblers contract. It accepts bool isERC1155 as an input parameter, which indicates whether the work of art is an ERC1155 or ERC721 token. It will be better to use enum instead of bool variable in this case. This is so because the boolean variable name and description state that it only gives information on whether is it an ERC1155 token or not, but does not provide any reasonable info about bellonging to other possible token standards.

#0 - GalloDaSballo

2022-10-06T00:34:34Z

1R 1NC

Awards

68.6605 USDC - $68.66

Labels

bug
G (Gas Optimization)
edited-by-warden

External Links

1. Redundant memory slot in LibString library

There is function toString in LibString library. There 5 storage slots are used for the next purposes:

// The maximum value of a uint256 contains 78 digits (1 byte per digit), but we allocate 160 bytes
// to keep the free memory pointer word aligned. We'll need 1 word for the length, 1 word for the
// trailing zeros padding, and 3 other words for a max of 78 digits. In total: 5 * 32 = 160 bytes.

Actually, the last (fifth) storage slot is redundant, it is filled with zero value and never used later:

// Clean the last word of memory it may not be overwritten.
mstore(str, 0)

It is reasonable to not allocate such a slot at all (and to not store there zero value) to reduce gas consumption and make the code more clear.

2. Using preincrement instead of postcrement in loops

There are many places where the index in a loop is incremented by the postincrement i++. The more efficient way to increment the variable is an ++i preincrement. Also, the incrementation of variables can be put in unchecked brackets.

3. Using immutables for all unchangeable storage variables

Although the immutable keyword is used for many of the variables it is not used in all variables where it can be so. As an example, BASE_URI variable from ArtGobblers should be declared with immutable keyword.

#0 - GalloDaSballo

2022-10-05T00:22:04Z

2k from Immutable

First report should be benchmarked as it's too specific to be accepted at face value

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