Platform: Code4rena
Start Date: 12/09/2022
Pot Size: $75,000 USDC
Total HM: 19
Participants: 110
Period: 7 days
Judge: HardlyDifficult
Total Solo HM: 9
Id: 160
League: ETH
Rank: 99/110
Findings: 1
Award: $35.35
🌟 Selected for report: 0
🚀 Solo Findings: 0
🌟 Selected for report: CertoraInc
Also found by: 0x1f8b, 0x4non, 0x5rings, 0x85102, 0xNazgul, 0xSmartContract, 0xkatana, Amithuddar, Aymen0909, B2, Bnke0x0, CRYP70, Chom, ChristianKuri, CodingNameKiki, Deivitto, Diraco, Fitraldys, Funen, IgnacioB, JAGADESH, JC, Lambda, LeoS, Matin, Metatron, MiloTruck, Noah3o6, Ocean_Sky, Olivierdem, PaludoX0, RaymondFam, ReyAdmirado, Rohan16, Rolezn, Saintcode_, Sm4rty, SnowMan, StevenL, Tomio, Tomo, V_B, Waze, __141345__, ajtra, asutorufos, aysha, brgltd, bulej93, c3phas, ch0bu, d3e4, delfin454000, dharma09, djxploit, erictee, fatherOfBlocks, francoHacker, gianganhnguyen, gogo, got_targ, ignacio, jag, karanctf, ladboy233, leosathya, lukris02, m_Rassska, malinariy, martin, natzuu, pashov, peanuts, peiw, pfapostol, prasantgupta52, robee, simon135, slowmoses, sryysryy, tnevler
35.348 USDC - $35.35
Uninitialized variables are assigned with the types default value.
Explicitly initializing a variable with it's default value costs unnecessary gas.
for (uint256 i = 0; i < hadPreciouses.length; ++i) {
for (uint256 i = 0; i < calls.length; ++i) {
for (uint256 i = 0; i < hadPreciouses.length; ++i) {
for (uint256 i = 0; i < contributors.length; ++i) {
for (uint256 i = 0; i < numContributions; ++i) {
for (uint256 i = 0; i < preciousTokens.length; ++i) {
for (uint256 i = 0; i < numContributions; ++i) {
for (uint256 i = 0; i < preciousTokens.length; ++i) {
for (uint256 i = 0; i < preciousTokens.length; ++i) {
for (uint256 i = 0; i < fees.length; ++i) {
for (uint256 i=0; i < opts.hosts.length; ++i) {
for (uint256 i = 0; i < infos.length; ++i) {
for (uint256 i = 0; i < infos.length; ++i) {
The overheads outlined below are PER LOOP, excluding the first loop
MLOAD
(3 gas)CALLDATALOAD
(3 gas)Caching the length changes each of these to a DUP<N>
(3 gas), and gets rid of the extra DUP<N>
needed to store the stack offset
for (uint256 i = 0; i < hadPreciouses.length; ++i) {
for (uint256 i = 0; i < calls.length; ++i) {
for (uint256 i = 0; i < hadPreciouses.length; ++i) {
for (uint256 i = 0; i < contributors.length; ++i) {
for (uint256 i = 0; i < preciousTokens.length; ++i) {
for (uint256 i = 0; i < numContributions; ++i) {
for (uint256 i = 0; i < preciousTokens.length; ++i) {
for (uint256 i = 0; i < preciousTokens.length; ++i) {
for (uint256 i = 0; i < fees.length; ++i) {
for (uint256 i=0; i < opts.hosts.length; ++i) {
for (uint256 i = 0; i < infos.length; ++i) {
for (uint256 i = 0; i < infos.length; ++i) {
Background info
https://github.com/code-423n4/2021-11-badgerzaps-findings/issues/36
++I
/I++
SHOULD BE UNCHECKED{++I}
/UNCHECKED{I++}
WHEN IT IS NOT POSSIBLE FOR THEM TO OVERFLOW, AS IS THE CASE WHEN USED IN FOR
AND WHILE
LOOPSThe unchecked
keyword is new in solidity version 0.8.0, so this only applies to that version or higher, which these instances are. This saves 30-40 gas per loop
for (uint256 i = 0; i < hadPreciouses.length; ++i) {
for (uint256 i = 0; i < calls.length; ++i) {
for (uint256 i = 0; i < hadPreciouses.length; ++i) {
for (uint256 i = 0; i < contributors.length; ++i) {
for (uint256 i = 0; i < numContributions; ++i) {
for (uint256 i = 0; i < preciousTokens.length; ++i) {
for (uint256 i = 0; i < numContributions; ++i) {
for (uint256 i = 0; i < preciousTokens.length; ++i) {
for (uint256 i = 0; i < preciousTokens.length; ++i) {
for (uint256 i = 0; i < fees.length; ++i) {
for (uint256 i=0; i < opts.hosts.length; ++i) {
for (uint256 i = 0; i < infos.length; ++i) {
for (uint256 i = 0; i < infos.length; ++i) {