Stader Labs - SAAJ's results

Decentralized ETH liquid staking protocol with 4 ETH bond for anyone to be a node operator.

General Information

Platform: Code4rena

Start Date: 02/06/2023

Pot Size: $100,000 USDC

Total HM: 15

Participants: 75

Period: 7 days

Judge: Picodes

Total Solo HM: 5

Id: 249

League: ETH

Stader Labs

Findings Distribution

Researcher Performance

Rank: 39/75

Findings: 2

Award: $40.19

QA:
grade-b
Gas:
grade-b

🌟 Selected for report: 0

🚀 Solo Findings: 0

Awards

18.5651 USDC - $18.57

Labels

bug
grade-b
QA (Quality Assurance)
Q-09

External Links

Low Risk and Non-Critical Issues

[L-01] Minting tokens to the zero address should be avoided (01 Instances)

Address(0) check is missing in mint function, consider applying check to ensure tokens aren’t minted to the zero address.

Link to the code: https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ETHx.sol#L48

[L-02] Missing event for important parameter change (08 Instances)

Important parameter or configuration changes should trigger an event to allow being tracked off-chain.

Link to the code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ETHx.sol#L47
  2. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ETHx.sol#L57
  3. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L140
  4. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L192
  5. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L338
  6. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L351
  7. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedPool.sol#L89
  8. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedPool.sol#L173

[L-03] Use a modifier for access control (08 Instances)

Consider using a modifier to implement access control instead of inlining the condition/requirement in the function’s body.

Link to the code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Auction.sol#L64
  2. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Auction.sol#L97
  3. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Auction.sol#L108
  4. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L207
  5. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L227
  6. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L590
  7. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L625
  8. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionlessNodeRegistry.sol#L531

[L-04] Missing initializer modifier on constructor (05 Instances)

OpenZeppelin recommends that the initializer modifier be applied to constructors in order to avoid potential griefs, social engineering, or exploits. Ensure that the modifier is applied to the implementation contract. If the default constructor is currently being used, it should be changed to be an explicit one with the modifier applied.

Link to the code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Auction.sol#L25
  2. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ETHx.sol#L25
  3. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/OperatorRewardsCollector.sol#L23
  4. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Penalty.sol#L27
  5. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L62

[L-05] Add a timelock to critical functions (04 Instances)

It is a good practice to give time for users to react and adjust to critical changes. A timelock provides more guarantees and reduces the level of trust required, thus decreasing risk for users. It also indicates that the project is legitimate (less risk of a malicious owner making a sandwich attack on a user).

Link to the code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Auction.sol#L138
  2. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Auction.sol#L144
  3. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Auction.sol#L151
  4. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Penalty.sol#L83

[L-06] Consider using OpenZeppelin’s SafeCast library to prevent unexpected overflows when casting from various type int/uint values (02 Instances)

Link to the code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedPool.sol#L322
  2. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionlessPool.sol#L274

[L-07] Missing checks for address(0x0) when assigning values to address state variables (12 Instances)

Zero-address check should be used, to avoid the risk of setting a storage variable as address(0) at deploying time.

Link to the code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Auction.sol#L140
  2. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ETHx.sol#L37
  3. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ETHx.sol#L87
  4. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/OperatorRewardsCollector.sol#L57
  5. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L92
  6. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#LL407C69-L407C79
  7. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedPool.sol#L47
  8. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedPool.sol#L250
  9. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedPool.sol#L298
  10. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionlessPool.sol#L252
  11. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PoolSelector.sol#L149
  12. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PoolUtils.sol#L63

[N-01] According to the syntax rules, use => mapping ( instead of => mapping( using spaces as keyword (12 Instances)

Link to the code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Auction.sol#L20
  2. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/OperatorRewardsCollector.sol#L20
  3. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Penalty.sol#L22
  4. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Penalty.sol#L24
  5. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L46
  6. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L48
  7. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L50
  8. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L52
  9. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L54
  10. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L56
  11. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L58
  12. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L59

[N-02] Pragma Floating (01 Instances)

Locking pragma version ensures contracts are not being deployed on an outdated compiler version.

Link to the code: https://github.com/code-423n4/2023-06-stader/blob/main/contracts/VaultProxy.sol#L2

[N-03] Empty blocks should be removed (01 Instances)

Avoid using code blocks or use them for some process like emitting events.

Link to the code: https://github.com/code-423n4/2023-06-stader/blob/main/contracts/NodeELRewardVault.sol#L14

[N-04] Function writing that does not comply with the Solidity Style Guide

All Contracts Order of functions should help readers identify which functions they can call and to find the constructor and fallback definitions easier.

Functions should be grouped according to their visibility and ordered as mentioned in the article i.e.; constructor external public internal private within a grouping, place the view and pure functions last

#0 - c4-judge

2023-06-14T06:09:16Z

Picodes marked the issue as grade-b

Awards

21.6219 USDC - $21.62

Labels

bug
G (Gas Optimization)
grade-b
G-21

External Links

Gas Optimizations Report

This report focuses on Stader Protocol contest, in context of various improvements that can be made in terms of gas cost.

Some of the opportunities identified for improving gas efficiency throughout the codebase of stader protocol are categorised into 10 main areas; with further multiple instances in each of the category.

[G-01] Immutable has more gas efficiency than constant (15 Instances)

Using immutable instead of constant, save more gas due to avoiding storage access for state variables.

Variable values are set through constructor when using immutable, which also eliminates the need of assigning initial values to state variable making them more efficient in terms of gas cost.

Link to the Code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Auction.sol#L22
  2. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L31
  3. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedPool.sol#L33
  4. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionlessNodeRegistry.sol#L30
  5. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionlessNodeRegistry.sol#L42
  6. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionlessNodeRegistry.sol#L43
  7. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionlessPool.sol#L23
  8. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionlessPool.sol#L31
  9. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PoolSelector.sol#L21
  10. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PoolUtils.sol#L13
  11. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PoolUtils.sol#L14
  12. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L26
  13. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L27
  14. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L29
  15. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/library/UtilLib.sol#L18

[G-02] Use hardcode address instead address(this) (27 Instances)

Instead of using address(this), it is more gas-efficient to pre-calculate and use the hardcoded address.

Link to the code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Auction.sol#L55
  2. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/NodeELRewardVault.sol#L25
  3. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/NodeELRewardVault.sol#L26
  4. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/NodeELRewardVault.sol#L27
  5. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/NodeELRewardVault.sol#L28
  6. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedPool.sol#L174
  7. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedPool.sol#L178
  8. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/SDCollateral.sol#L47
  9. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/SocializingPool.sol#L69
  10. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/SocializingPool.sol#L75
  11. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderInsuranceFund.sol#L43
  12. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderInsuranceFund.sol#L62
  13. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderStakePoolsManager.sol#L189
  14. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderStakePoolsManager.sol#L221
  15. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/UserWithdrawalManager.sol#L104
  16. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/UserWithdrawalManager.sol#L155
  17. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/UserWithdrawalManager.sol#L224
  18. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ValidatorWithdrawalVault.sol#L31
  19. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ValidatorWithdrawalVault.sol#L32
  20. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ValidatorWithdrawalVault.sol#L33
  21. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ValidatorWithdrawalVault.sol#L34
  22. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ValidatorWithdrawalVault.sol#L55
  23. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ValidatorWithdrawalVault.sol#L56
  24. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ValidatorWithdrawalVault.sol#L57
  25. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ValidatorWithdrawalVault.sol#L94
  26. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ValidatorWithdrawalVault.sol#L95
  27. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ValidatorWithdrawalVault.sol#L99

[G-03] Use != 0 instead of > 0 for unsigned integer comparison (13 Instances)

Link to the Code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Auction.sol#L109
  2. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L204
  3. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L299
  4. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionlessNodeRegistry.sol#L209
  5. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionlessNodeRegistry.sol#L305
  6. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/SocializingPool.sol#L119
  7. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/SocializingPool.sol#L127
  8. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L121
  9. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L274
  10. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L328
  11. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L403
  12. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderStakePoolsManager.sol#L330
  13. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ValidatorWithdrawalVault.sol#L115

[G-04] Use uint256(1)/uint256(2) instead for true and false boolean states (14 Instances)

Boolean for storage if not used, saves Gwarmaccess 100 gas. In addition, state changes of boolean from true to false can cost up to ~20000 gas rather than uint256(2) to uint256(1) that would cost significantly less.

Link to the Code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Auction.sol#L86
  2. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Auction.sol#L101
  3. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L94
  4. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/SocializingPool.sol#L80
  5. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/SocializingPool.sol#L155
  6. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L87
  7. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L100
  8. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L191
  9. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L499
  10. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L504
  11. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L628
  12. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L668
  13. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ValidatorWithdrawalVault.sol#L75
  14. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/VaultProxy.sol#L31

[G-05] Setting the constructor to payable (11 Instances)

Saves ~13 gas per instance

Link to the Code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Auction.sol#L25
  2. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/ETHx.sol#L25
  3. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/NodeELRewardVault.sol#L14
  4. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/OperatorRewardsCollector.sol#L23
  5. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/Penalty.sol#L27
  6. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedNodeRegistry.sol#L62
  7. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedPool.sol#L36
  8. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionlessNodeRegistry.sol#L62
  9. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionlessPool.sol#L34
  10. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PoolSelector.sol#L26
  11. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PoolUtils.sol#L21

[G-06] Public functions to external instead (12 Instances)

Functions with public visibility, if not called within the contract needed to be changed external.

Link to the Code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionlessNodeRegistry.sol#LL440C14-L440C42
  2. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderConfig.sol#L504
  3. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderConfig.sol#L508
  4. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L571
  5. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L582
  6. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L586
  7. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L590
  8. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderStakePoolsManager.sol#L164
  9. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/factory/VaultFactory.sol#L34
  10. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/factory/VaultFactory.sol#L48
  11. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/factory/VaultFactory.sol#L62
  12. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/factory/VaultFactory.sol#L71

[G 07] abi.encode() is less efficient than abi.encodepacked()(18 Instances)

Refer to this article.

Link to the Code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L127
  2. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L135
  3. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L221
  4. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L233
  5. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L282
  6. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L283
  7. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L334
  8. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L346
  9. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L407
  10. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L410
  11. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L418
  12. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L466
  13. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L469
  14. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L470
  15. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/factory/VaultFactory.sol#L40
  16. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/factory/VaultFactory.sol#L54
  17. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/factory/VaultFactory.sol#L67
  18. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/factory/VaultFactory.sol#L77

[G 08] String literals passed to abi.encode()/abi.encodePacked() should not be split by commas (26 Instances)

String literals can be split into multiple parts and still be considered as a single string literal. EACH new comma costs 21 gas due to stack operations and separate MSTOREs.

Link to the Code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedPool.sol#L263
  2. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedPool.sol#L267
  3. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedPool.sol#L273
  4. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionedPool.sol#L274
  5. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionlessPool.sol#L229
  6. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionlessPool.sol#L235
  7. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/PermissionlessPool.sol#L236
  8. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/SocializingPool.sol#L174
  9. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L127
  10. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L135
  11. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L221
  12. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L233
  13. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L282
  14. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L283
  15. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L334
  16. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L346
  17. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L410
  18. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L418
  19. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L469
  20. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/StaderOracle.sol#L470
  21. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/factory/VaultFactory.sol#L40
  22. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/factory/VaultFactory.sol#L54
  23. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/factory/VaultFactory.sol#L67
  24. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/factory/VaultFactory.sol#L77
  25. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/factory/VaultFactory.sol#L82
  26. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/library/UtilLib.sol#L140

[G-09] Use assembly to check for address(0) (02 Instances)

Link to the Code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/UserWithdrawalManager.sol#L96
  2. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/library/UtilLib.sol#L22

[G-10] Use calldata instead of memory for function parameters (01 Instances)

Using calldata in external function does not require data to be stored, which reduced the process time as compared to memory. This in return saves gas during calling the data.

Link to the Code:

  1. https://github.com/code-423n4/2023-06-stader/blob/main/contracts/SDCollateral.sol#L124

#0 - c4-judge

2023-06-14T05:44:09Z

Picodes marked the issue as grade-b

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