Nibbl contest - Noah3o6's results

NFT fractionalization protocol with guaranteed liquidity and price based buyout.

General Information

Platform: Code4rena

Start Date: 21/06/2022

Pot Size: $30,000 USDC

Total HM: 12

Participants: 96

Period: 3 days

Judge: HardlyDifficult

Total Solo HM: 5

Id: 140

League: ETH

Nibbl

Findings Distribution

Researcher Performance

Rank: 50/96

Findings: 2

Award: $45.58

🌟 Selected for report: 0

πŸš€ Solo Findings: 0

Whats up guy, here are the potential Gas Optimizations I found:

  1. Using X = X + Y IS CHEAPER THAN X += Y (ALSO X= X - Y IS CHEAPER THAN X -= Y)

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/NibblVault.sol#:~:text=CURVE_FEE)%20/%20SCALE%20%3B-,feeAccruedCurator%20%2B%3D%20_feeCurator%3B,-//_maxSecondaryBalanceIncrease%3A%20is%20the

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/NibblVault.sol#:~:text=secondaryReserveBalance%20%2B%3D%20_feeCurve%3B

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/NibblVault.sol#:~:text=curatorFee)%20/%20SCALE%20%3B-,feeAccruedCurator%20%2B%3D%20_feeCurator%3B,-if(_adminFeeAmt%20%3E

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/NibblVault.sol#:~:text=secondaryReserveBalance%20%2B%3D%20_lowerCurveDiff%3B

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/NibblVault.sol#:~:text=unsettledBids%5Bbidder%5D%20%2B%3D%20_buyoutValuationDeposit%3B

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/NibblVault.sol#:~:text=totalUnsettledBids%20%2B%3D%20_buyoutValuationDeposit%3B

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/NibblVault.sol#:~:text=primaryReserveBalance%20%2D%3D%20_saleReturn%3B

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/NibblVault.sol#:~:text=totalUnsettledBids%20%2D%3D%20_amount%3B

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/Bancor/BancorFormula.sol#:~:text=xi%20%3D%20(xi,33%20*%20(33!%20/%2033!)

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/Bancor/BancorFormula.sol#:~:text=if%20(x%20%3E%3D%200xd3094c70f034de4b96ff7d5b6f99fcd8,add%201%20/%202%5E8

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/Bancor/BancorFormula.sol#:~:text=res%20%2B%3D%20z,y%5E16%20/%2016

  1. SPLITTING REQUIRE() STATEMENTS THAT USE && to save gas

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/NibblVaultFactory.sol#:~:text=require(basketUpdateTime%20!%3D%200%20%26%26%20block.timestamp%20%3E%3D%20basketUpdateTime%2C%20%22NibblVaultFactory%3A%20UPDATE_TIME%20has%20not%20passed%22)%3B

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/Test/TestBancorFormula.sol#:~:text=require(_supply%20%3E%200%20%26%26%20_connectorBalance%20%3E%200%20%26%26%20_connectorWeight%20%3E%200%20%26%26%20_connectorWeight%20%3C%3D%20MAX_WEIGHT)%3B

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/Test/TestBancorFormula.sol#:~:text=require(_supply%20%3E%200%20%26%26%20_connectorBalance%20%3E%200%20%26%26%20_connectorWeight%20%3E%200%20%26%26%20_connectorWeight%20%3C%3D%20MAX_WEIGHT%20%26%26%20_sellAmount%20%3C%3D%20_supply)%3B

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/Test/TestBancorFormula.sol#:~:text=require(_fromConnectorBalance%20%3E%200%20%26%26%20_fromConnectorWeight%20%3E%200%20%26%26%20_fromConnectorWeight%20%3C%3D%20MAX_WEIGHT%20%26%26%20_toConnectorBalance%20%3E%200%20%26%26%20_toConnectorWeight%20%3E%200%20%26%26%20_toConnectorWeight%20%3C%3D%20MAX_WEIGHT)%3B

  1. ++i costs less gas compared to i++ or i += 1

I suggest using ++i instead of i++ to increment the value of an uint variable.

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/NibblVault.sol#:~:text=for%20(uint256%20i%20%3D%200%3B%20i%20%3C%20_assetAddresses.length%3B%20i%2B%2B)%20%7B

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/NibblVault.sol#:~:text=Only%20winner%22)%3B-,for%20(uint256%20i%20%3D%200%3B%20i%20%3C%20_assets.length%3B%20i%2B%2B)%20%7B,-IERC20(_assets%5Bi

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/NibblVault.sol#:~:text=Only%20winner%22)%3B-,for%20(uint256%20i%20%3D%200%3B%20i%20%3C%20_assets.length%3B%20i%2B%2B)%20%7B,-uint256%20balance%20%3D

  1. VISIBILITY Reducing from public to private or internal can save gas when a constant isn’t used outside of its contract. I suggest changing the visibility from public to internal or private

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/Utilities/AccessControlMechanism.sol#:~:text=bytes32%20public%20constant%20FEE_ROLE%20%3D%20keccak256(%22FEE_ROLE%22)%3B

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/Utilities/AccessControlMechanism.sol#:~:text=bytes32%20public%20constant%20PAUSER_ROLE%20%3D%20keccak256(%22PAUSER_ROLE%22)%3B

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/Utilities/AccessControlMechanism.sol#:~:text=bytes32%20public%20constant%20IMPLEMENTER_ROLE%20%3D%20keccak256(%22IMPLEMENTER_ROLE%22)%3B

  1. IT COSTS MORE GAS TO INITIALIZE VARIABLES TO ZERO THAN TO LET THE DEFAULT OF ZERO BE APPLIED

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/NibblVault.sol#:~:text=for%20(uint256%20i%20%3D%200%3B%20i%20%3C%20_assetAddresses.length%3B%20i%2B%2B)

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/NibblVault.sol#:~:text=Only%20winner%22)%3B-,for%20(uint256%20i%20%3D%200%3B%20i%20%3C%20_assets.length%3B%20i%2B%2B)%20%7B,-IERC20(_assets%5Bi

https://github.com/code-423n4/2022-06-nibbl/blob/main/contracts/NibblVault.sol#:~:text=Only%20winner%22)%3B-,for%20(uint256%20i%20%3D%200%3B%20i%20%3C%20_assets.length%3B%20i%2B%2B)%20%7B,-uint256%20balance%20%3D

#0 - mundhrakeshav

2022-06-26T12:19:30Z

Duplicate #2 #3 #5 #6 #8 #15

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