prePO contest - saian's results

Gain exposure to pre-IPO companies & pre-token projects.

General Information

Platform: Code4rena

Start Date: 17/03/2022

Pot Size: $30,000 USDC

Total HM: 8

Participants: 43

Period: 3 days

Judge: gzeon

Total Solo HM: 5

Id: 100

League: ETH

prePO

Findings Distribution

Researcher Performance

Rank: 23/43

Findings: 2

Award: $81.24

🌟 Selected for report: 0

🚀 Solo Findings: 0

Awards

51.8842 USDC - $51.88

Labels

bug
QA (Quality Assurance)

External Links

QA Report

Low Risk findings

1. SingleStrategyController:totalValue() return value can be changed

tokens can be directly transfered to the controller address, which will increase the return value of totalValue which is used in collateral withdraw function chaging the owed value Collateral:deposit can be called to deposit this amount into the strategy

Proof of concept

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/SingleStrategyController.sol#L80

Mitigation

totalValue can be changed to return strategy totalValue

Non-critical findings

1. Lack of 0 value checks

Input variables are not checked for 0 values

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/Collateral.sol#L48

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/Collateral.sol#L209

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/Collateral.sol#L220

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/CollateralDepositRecord.sol#L19

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/CollateralDepositRecord.sol#L63

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/CollateralDepositRecord.sol#L72

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/DepositHook.sol#L40

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/PrePOMarket.sol#

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/PrePOMarket.sol#L176

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/PrePOMarket.sol#L203

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/PrePOMarket.sol#L213

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/SingleStrategyController.sol#L75

Mitigation

zero value checks can be added

2. Unused import

ReentrancyGuard imported in LongShortToken.sol is not used

Proof of concept

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/LongShortToken.sol#L6

Mitigation

import statement can be removed

#0 - ramenforbreakfast

2022-03-24T02:56:56Z

First claim is duplicate of #27. Second claim regarding 0 value checks does not explain why it is necessary add these checks. I do not consider this valid. Third claim is a duplicate of #5

Awards

29.3575 USDC - $29.36

Labels

bug
G (Gas Optimization)

External Links

Gas Optimizations

1. Reduce storage read and save gas

Storage read SLOAD costs ~100 (excluding first call), caching the value and re-using it can save gas

Proof of concept

Function arguments can be used instead of read from storage

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/Collateral.sol#L192 https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/Collateral.sol#L201 https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/Collateral.sol#L211 https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/Collateral.sol#L221 https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/Collateral.sol#L230 https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/Collateral.sol#L239 https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/CollateralDepositRecord.sol#L64

allowedAccountsIndex and _blockedAccountsIndex can be cached and re-used instead of reading it inside for loops

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/AccountAccessController.sol#L45

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/AccountAccessController.sol#L56

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/AccountAccessController.sol#L63-69

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/AccountAccessController.sol#L102

_finalLongPrice can be stored locally and re-used

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/PrePOMarket.sol#L145

2. Adding unchecked can save gas

For arithmetic operations that will not overflow/underflow adding unchecked can avoid underflows/overflows checks which will save gas

Proof of concept

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/Collateral.sol#L73

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/CollateralDepositRecord.sol#L47

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/CollateralDepositRecord.sol#L52

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/PrePOMarket.sol#L122

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/PrePOMarket.sol#L146

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/PrePOMarket.sol#L169

3. Function return value can be cached and re-used

Function return values can be cached and re-used which will save gas instead of calling the function again

Proof of concept

totalSupply() can be cached and re-used

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/Collateral.sol#L82-L89

https://github.com/code-423n4/2022-03-prepo/blob/f63584133a0329781609e3f14c3004c1ca293e71/contracts/core/Collateral.sol#L312-L315

#0 - ramenforbreakfast

2022-03-23T01:06:56Z

Duplicate of #18 and #41, regarding caching values and postfix/prefix. Those submissions are also higher quality imo.

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