Platform: Code4rena
Start Date: 01/07/2022
Pot Size: $75,000 USDC
Total HM: 17
Participants: 105
Period: 7 days
Judge: Jack the Pug
Total Solo HM: 5
Id: 143
League: ETH
Rank: 77/105
Findings: 1
Award: $45.80
🌟 Selected for report: 0
🚀 Solo Findings: 0
🌟 Selected for report: 0xA5DF
Also found by: 0v3rf10w, 0x09GTO, 0x1f8b, 0x29A, 0xDjango, 0xKitsune, 0xNazgul, 0xdanial, 0xf15ers, Aymen0909, Bnke0x0, Ch_301, Cheeezzyyyy, Chom, ElKu, Funen, Hawkeye, IllIllI, JC, JohnSmith, Kaiziron, Lambda, Limbooo, Meera, Metatron, MiloTruck, Noah3o6, Picodes, Randyyy, RedOneN, ReyAdmirado, Rohan16, Saintcode_, Sm4rty, TomJ, Tomio, Tutturu, UnusualTurtle, Waze, _Adam, __141345__, ajtra, apostle0x01, asutorufos, brgltd, c3phas, cRat1st0s, codexploder, defsec, delfin454000, djxploit, durianSausage, exd0tpy, fatherOfBlocks, hake, horsefacts, ignacio, jayfromthe13th, joestakey, jonatascm, kaden, kebabsec, m_Rassska, mektigboy, mrpathfindr, oyc_109, rajatbeladiya, rbserver, rfa, robee, sach1r0, sashik_eth, simon135
45.8024 USDC - $45.80
[G-01] - Caching storage variable in memory to save gas : Â 8 instances across 3 contracts.
File : JBFundingCycleStore.sol function = "queudOf", var="latestConfigurationOf[_projectId]" (2sloads) JBFundingCycleStore.sol:143 JBFundingCycleStore.sol:158 function = "currentOf", var="latestConfigurationOf[_projectId]" (2sloads) JBFundingCycleStore.sol:201 JBFundingCycleStore.sol:224 function = "_configureIntrinsicPropertiesFor", var="latestConfigurationOf[_projectId]" (2sloads) JBFundingCycleStore.sol:392 JBFundingCycleStore.sol:403 Â File : JBDirectory.sol function = "primaryTerminalOf", var= "_primaryTerminalOf[_projectId][_token]" (3 sloads) JBDirectory.sol:134 JBDirectory.sol:135 JBDirectory.sol:136 function = "primaryTerminalOf", var= "_terminalOf[_projectId]" (2 sloads) JBDirectory.sol:139 JBDirectory.sol:140 function = "setControllerOf", var="controllerOf[_projectId]" (5sloads) JBDirectory.sol:218 JBDirectory.sol:219 JBDirectory.sol:230 JBDirectory.sol:231 JBDirectory.sol:236 function = "setTerminalsOf", var="controllerOf[_projectId]" (2sloads) JBDirectory.sol:258 JBDirectory.sol:266 Â File : JBController.sol function= "mintTokensOf", var="_processedTokenTrackerOf[_projectId]" (2sloads) JBController.sol:667 JBController.sol:680 Â Â Â Â [G-02] - Use informations already available in memory rather than re-calling them from storage
3 instances in one contract. Â File: JBTokenStore.sol Function= "burnFrom", var= "unclaimedBalanceOf[_holder][_projectId]" already in line 330 JBTokenStore.sol:359 Function= "claimFrom", var= "unclaimedBalanceOf[_holder][_projectId]" already in line 403 JBTokenStore.sol:409 Function= "transferFrom", var= "unclaimedBalanceOf[_holder][_projectId]" already in line 442 JBTokenStore.sol:448 Â Â [G-03] - For memory variable "x"+="y" is more gas efficient than "x"="x"+"y" : Â 5 instances across 4 contracts.
File : JBTokenStore.sol JBTokenStore.sol:123 JBTokenStore.sol:148 Â File : JBSplitsStore.sol JBSplitsStore.sol:237 Â JBFundingCycleStore.sol JBFundingCycleStore.sol:686 Â File : JBSingleTokenPaymentTerminalStore.sol JBSingleTokenPaymentTerminalStore.sol:863 Â Â Â Â Â
 [G-04] - It costs more gas to initialize variables to zero than to let the default of zero be applied. This is mainly the case for storage but is also observed for memory.
17 instances across 7 contracts  File: JBProjects.sol JBProjects.sol:40  File: JBFundingCycleStore.sol JBFundingCycleStore.sol:724  File: JBSplitsStore.sol JBSplitsStore.sol:165 JBSplitsStore.sol:204 JBSplitsStore.sol:211 JBSplitsStore.sol:227 JBSplitsStore.sol:229 JBSplitsStore.sol:304  File: JBOperatorStore.sol JBOperatorStore.sol:85 JBOperatorStore.sol:135 JBOperatorStore.sol:165  File: JBDirectory.sol JBDirectory.sol:139 JBDirectory.sol:167 JBDirectory.sol:275  File: JBController.sol JBController.sol:913 JBController.sol:1014  File: JBSingleTokenPaymentTerminalStore.sol JBSingleTokenPaymentTerminalStore.sol:862     [G-05] - ++i costs less gas than i++, especially when it’s used in for-loops. Saves 6 gas per loopÂ
15 instances across 6 contracts.
File: JBFundingCycleStore.sol JBFundingCycleStore.sol:724 Â File: JBSplitsStore.sol JBSplitsStore.sol:204 JBSplitsStore.sol:211 JBSplitsStore.sol:229 JBSplitsStore.sol:304 Â File: JBOperatorStore.sol JBOperatorStore.sol:85 JBOperatorStore.sol:135 JBOperatorStore.sol:165 Â File: JBDirectory.sol JBDirectory.sol:139 JBDirectory.sol:167 JBDirectory.sol:275 JBDirectory.sol:276 Â File: JBController.sol JBController.sol:913 JBController.sol:1014 Â File: JBSingleTokenPaymentTerminalStore.sol JBSingleTokenPaymentTerminalStore.sol:862 Â Â Â Â [G-06] - ++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-loops
15 instances across 6 contracts.  File: JBFundingCycleStore.sol JBFundingCycleStore.sol:724  File: JBSplitsStore.sol JBSplitsStore.sol:204 JBSplitsStore.sol:211 JBSplitsStore.sol:229 JBSplitsStore.sol:304  File: JBOperatorStore.sol JBOperatorStore.sol:85 JBOperatorStore.sol:135 JBOperatorStore.sol:165  File: JBDirectory.sol JBDirectory.sol:139 JBDirectory.sol:167 JBDirectory.sol:275 JBDirectory.sol:276  File: JBController.sol JBController.sol:913 JBController.sol:1014  File: JBSingleTokenPaymentTerminalStore.sol JBSingleTokenPaymentTerminalStore.sol:862     [G-07] - Consider a more recent version of solidity  Use solidity 0.8.10 to have external calls skip contract existence checks if the external call has a return value.     [G-08] - Functions guaranteed to revert (such as onlyOwner) when called by normal users can be marked payable. If a function modifier such as onlyOwner is used, the function will revert if a normal user tries to pay the function. Marking the function as payable will lower the gas cost for legitimate callers because the compiler will not include checks for whether a payment was provided.
5 instances across 2 contracts. Â File : JBTokenStore.sol JBTokenStore.sol:192 JBTokenStore.sol:240 JBTokenStore.sol:288 JBTokenStore.sol:325 Â File : JBFundingCycleStore.sol JBFundingCycleStore.sol:299 Â Â Â Â [G-09] - Cheaper input valdiations should come before expensive operations
1 instance
File: JBTokenStore.sol JBTokenStore.sol:246 -> could come before JBTokenStore.sol:242    [G-10] - Duplicated require()/revert() checks should be refactored to a modifier or function  File: JBTokenStore.sol revert TOKEN_NOT_FOUND() is called twice : JBTokenStore.sol:477 JBTokenStore.sol:400