Yieldy contest - Noah3o6's results

A protocol for gaining single side yields on various tokens.

General Information

Platform: Code4rena

Start Date: 21/06/2022

Pot Size: $50,000 USDC

Total HM: 31

Participants: 99

Period: 5 days

Judges: moose-code, JasoonS, denhampreen

Total Solo HM: 17

Id: 139

League: ETH

Yieldy

Findings Distribution

Researcher Performance

Rank: 58/99

Findings: 2

Award: $79.75

🌟 Selected for report: 0

🚀 Solo Findings: 0

Hey guys, here are the things I found:

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

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=requestWithdrawalAmount%20%2D%3D%20requestedWithdrawals,%2B%3D%20requestedWithdrawals.amount%3B

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=amountLeft%20%2D%3D%20warmUpBalance%3B

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=requestWithdrawalAmount%20%2D%3D%20requestedWithdrawals.amount%3B

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=withdrawalAmount%20%2D%3D%20info.amount%3B

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=amountLeft%20%2D%3D%20warmUpBalance%3B

->STATE VARIABLES ONLY SET IN THE CONSTRUCTOR SHOULD BE DECLARED IMMUTABLE

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Migration.sol#:~:text=address%20public%20immutable,public%20immutable%20OLD_YIELDY_TOKEN%3B

->USING > 0 COSTS MORE GAS THAN != 0 WHEN USED ON A UINT IN A REQUIRE() STATEMENT

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=require(_recipient.amount%20%3E%200%2C%20%22Must%20enter%20valid%20amount%22)%3B

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=require(_amount%20%3E%200%2C%20%22Must%20have%20valid%20amount%22)%3B

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=)%20external%20%7B-,require(_amount%20%3E%200%2C%20%22Invalid%20amount%22)%3B,-//%20prevent%20unstaking%20if

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=%7B-,require(_amount%20%3E%200%2C%20%22Invalid%20amount%22)%3B,-require(

-> INLINE ALL THESE LITTLE FUNCTIONS

Defining all these little functions cause 2 things:

1contract’s code size gets bigger 2the function calls consumes more gas than exectuing it as an inlined function (part of the code, without the function call)

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=function%20_isClaimWithdrawAvailable(,(bool)

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Yieldy.sol#:~:text=function%20_setIndex(,%7D

->SPLITTING REQUIRE() STATEMENTS THAT USE && SAVES GAS

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/LiquidityReserve.sol#:~:text=OwnableUpgradeable.__Ownable_init()%3B-,require(,)%3B,-stakingToken%20%3D%20_stakingToken

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=valid%20initial%20addresses-,require(,)%3B,-STAKING_TOKEN%20%3D%20_stakingToken

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=Invalid%20amount%22)%3B-,require(,)%3B,-//%20prevent%20unstaking%20if

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

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Yieldy.sol#:~:text=function%20decimals(),return%20decimal%3B

-> COMPARISON OPERATORS Problem In the EVM, there is no opcode for >= or <=. When using greater than or equal, two operations are performed: > and =. Using strict comparison operators hence saves gas

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/LiquidityReserve.sol#:~:text=stakingTokenBalance%20%3E%3D%20MINIMUM_LIQUIDITY%2C

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/LiquidityReserve.sol#:~:text=IERC20Upgradeable(stakingToken).balanceOf(address,amountToWithdraw%2C

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=return%20epoch.number%20%3E%3D%20info.expiry%20%26%26%20info.expiry%20!%3D%200%3B

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=return-,epoch.number%20%3E%3D%20info.expiry%20%26%26,-info.expiry%20!%3D%200%20%26%26

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=requestedWithdrawals.amount%20%2B,info.amount)

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=withdrawalAmount%20%3E%3D%20info.amount)%3B

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=block.timestamp%20%2B%20timeLeftToRequestWithdrawal%20%3E%3D%20nextCycleStart%20%26%26

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=if%20(_amount%20%3E%3D%20warmUpBalance)

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=require(reserveBalance%20%3E%3D%20_amount%2C%20%22Not%20enough%20funds%20in%20reserve%22)%3B

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/LiquidityReserve.sol#:~:text=require(_fee%20%3C%3D%20BASIS_POINTS%2C%20%22Out%20of%20range%22)%3B

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/LiquidityReserve.sol#:~:text=require(_amount%20%3C%3D%20balanceOf(msg.sender)%2C%20%22Not%20enough%20lr%20tokens%22)%3B

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=((requestedWithdrawals.minCycle%20%3C%3D%20currentCycleIndex%20%26%26

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=%3E%200%20%26%26-,requestedWithdrawals.minCycle%20%3C%3D%20currentCycleIndex,-)%20%7B

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=_amount%20%3C%3D%20walletBalance%20%2B%20warmUpBalance%2C

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=if%20(epoch.endTime%20%3C%3D%20block.timestamp)

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Staking.sol#:~:text=if%20(balance%20%3C%3D%20staked)

https://github.com/code-423n4/2022-06-yieldy/blob/main/src/contracts/Yieldy.sol#:~:text=require(creditAmount%20%3C%3D%20creditBalances%5Bmsg.sender%5D%2C%20%22Not%20enough%20funds%22)%3B

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