Juicebox V2 contest - Noah3o6's results

The decentralized fundraising and treasury protocol.

General Information

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

Juicebox

Findings Distribution

Researcher Performance

Rank: 63/105

Findings: 2

Award: $127.43

🌟 Selected for report: 0

πŸš€ Solo Findings: 0

Here are my Gas Optimazations i found:

-> X = X + Y IS CHEAPER THAN X += Y (Same for X = X - Y is cheaper than X -= Y)

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/abstract/JBPayoutRedemptionPaymentTerminal.sol#:~:text=_feeEligibleDistributionAmount%20%2B%3D%20_leftoverDistributionAmount%3B

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/abstract/JBPayoutRedemptionPaymentTerminal.sol#:~:text=leaving%20the%20ecosystem.-,feeEligibleDistributionAmount%20%2B%3D%20_payoutAmount%3B,-%7D

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/abstract/JBPayoutRedemptionPaymentTerminal.sol#:~:text=%7D-,feeEligibleDistributionAmount%20%2B%3D%20_payoutAmount%3B,-%7D

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/abstract/JBPayoutRedemptionPaymentTerminal.sol#:~:text=leaving%20the%20ecosystem.-,feeEligibleDistributionAmount%20%2B%3D%20_payoutAmount%3B,-//%20If%20there%27s%20a

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/abstract/JBPayoutRedemptionPaymentTerminal.sol#:~:text=_heldFees%5B_i%5D.amount%3B-,refundedFees%20%2B%3D%20_feeAmount(,-_heldFees%5B_i%5D.amount

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/abstract/JBPayoutRedemptionPaymentTerminal.sol#:~:text=refundedFees%20%2B%3D%20_feeAmount(leftoverAmount%2C%20_heldFees%5B_i%5D.fee%2C%20_heldFees%5B_i%5D.feeDiscount)%3B

-> DEFAULT VALUE INITIALIZATION If a variable is not set/initialized, it is assumed to have the default value (0, false, 0x0 etc depending on the data type). Explicitly initializing it with its default value is an anti-pattern and wastes gas.

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBETHERC20SplitsPayer.sol#:~:text=between%20all%20splits.-,for%20(uint256%20i%20%3D%200%3B,-i%20%3C%20_splits

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBETHERC20SplitsPayer.sol#:~:text=for%20(-,uint256%20i%20%3D%200%3B,-i%20%3C%20_splits

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBOperatorStore.sol#:~:text=for%20(-,uint256%20_i%20%3D%200%3B,-_i%20%3C%20_permissionIndexes

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBOperatorStore.sol#:~:text=for%20(-,uint256%20_i%20%3D%200%3B,-_i%20%3C%20_indexes

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBSingleTokenPaymentTerminalStore.sol#:~:text=for-,(uint256%20_i%20%3D%200%3B,-_i%20%3C%20_terminals

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBSplitsStore.sol#:~:text=for%20(-,uint256%20_i%20%3D%200%3B,-_i%20%3C%20_groupedSplitsLength

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBSplitsStore.sol#:~:text=for%20(-,uint256%20_i%20%3D%200%3B,-_i%20%3C%20_currentSplits

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBSplitsStore.sol#:~:text=for%20(-,uint256%20_j%20%3D%200%3B,-_j%20%3C%20_splits

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBSplitsStore.sol#:~:text=for%20(-,uint256%20_i%20%3D%200%3B,-_i%20%3C%20_splits

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBSplitsStore.sol#:~:text=for%20(-,uint256%20_i%20%3D%200,-%3B%20_i%20%3C%20_splitCount

-> ++i costs less gas compared to i++ or i += 1 (Also --i costs less gas compared to i--- or i -= 1)

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBETHERC20SplitsPayer.sol#:~:text=_splits.length%3B-,i%2B%2B),-%7B

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBETHERC20SplitsPayer.sol#:~:text=_splits.length%3B-,i%2B%2B),-%7B

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBOperatorStore.sol#:~:text=_permissionIndexes.length%3B-,_i%2B%2B,-)%20%7B

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBOperatorStore.sol#:~:text=_indexes.length%3B-,_i%2B%2B,-)%20%7B

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBSingleTokenPaymentTerminalStore.sol#:~:text=_terminals.length%3B-,_i%2B%2B,-)

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBSplitsStore.sol#:~:text=_currentSplits.length%3B-,_i%2B%2B),-%7B

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBSplitsStore.sol#:~:text=_splits.length%3B-,_j%2B%2B,-)%20%7B

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBSplitsStore.sol#:~:text=_splits.length%3B-,_i%2B%2B,-)%20%7B

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBSplitsStore.sol#:~:text=_i%20%3C%20_splitCount%3B-,_i%2B%2B),-%7B

-> VISIBILITY Reducing from public to private or internal can save gas when a constant isn’t used outside of its contract.

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/libraries/JBOperations.sol#:~:text=library%20JBOperations%20%7B,%7D

-> USING != INSTEAD OD 0 > SAVES GAS

https://github.com/jbx-protocol/juice-contracts-v2-code4rena/blob/828bf2f3e719873daa08081cfa0d0a6deaa5ace5/contracts/JBProjects.sol#:~:text=(_metadata.content).length%20%3E%200)

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