Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: pass the storage pointer #74

Merged
merged 8 commits into from
Jan 27, 2024
Merged

feat: pass the storage pointer #74

merged 8 commits into from
Jan 27, 2024

Conversation

Schlagonia
Copy link
Collaborator

@Schlagonia Schlagonia commented Dec 22, 2023

Description

Pass the storage pointer to all internal functions to avoid reloading it multiple times a call.

Fixes # (issue)

Checklist

  • I have run solidity linting
  • I have run the tests on my machine
  • I have followed commitlint guidelines
  • I have rebased my changes to the latest version of the main branch
  • I have updated the SPECIFICATION.md for any relevant changes

Copy link
Collaborator

@fp-crypto fp-crypto left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code looks fine, but my eyes could fail me. Do you feel confident the compiler+test suite would have caught any code paths you might have missed?

@@ -201,7 +201,7 @@ contract TokenizedStrategy {
*
* Loading the corresponding storage slot for the struct does not
* load any of the contents of the struct into memory. So the size
* has no effect on gas usage.
* wont increase gas usage.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* wont increase gas usage.
* won't increase gas usage.

@@ -498,15 +502,16 @@ contract TokenizedStrategy {
uint256 assets,
address receiver
) external nonReentrant returns (uint256 shares) {
StrategyData storage S = _strategyStorage();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So TLDR, external/public functions load the point, internal/private functions receive the pointer?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yup

? shares
: shares.mulDiv(totalAssets(), supply, Math.Rounding.Down);
function convertToAssets(uint256 shares) external view returns (uint256) {
return _convertToAssets(_strategyStorage(), shares);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the advantage of separating the public and private methods like this? Code paths that have the storage pointer loaded can call the internal/private versions?

Copy link
Collaborator Author

@Schlagonia Schlagonia Jan 26, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, _convertToAssets is used by multiple other functions within the contract. So any other function will call the internal one with the storage pointer already loaded

@Schlagonia
Copy link
Collaborator Author

Schlagonia commented Jan 26, 2024

Code looks fine, but my eyes could fail me. Do you feel confident the compiler+test suite would have caught any code paths you might have missed?

Yes I would have to think so.

Added some additional asserts in the tests so that we now have 100% coverage across the TokenizedStrategy lines and functions c100407

@Schlagonia Schlagonia merged commit d23f6d8 into v3.0.2 Jan 27, 2024
3 checks passed
@Schlagonia Schlagonia deleted the storage-pointer branch January 27, 2024 16:42
Schlagonia added a commit that referenced this pull request Jan 27, 2024
* feat: pass the storage pointer

* chore: rebase

* chore: formatting and comments

* chore: rebase

* fix: formatting functions

* fix: test coverage

* fix: remove lcov file

* fix: ignore coverage file
Schlagonia added a commit that referenced this pull request Feb 4, 2024
* feat: version 302

* fix: remove increase and decrease allowance (#75)

* feat: just track total assets (#73)

* feat: just track total assets

* fix: comments

* feat: pass the storage pointer (#74)

* feat: pass the storage pointer

* chore: rebase

* chore: formatting and comments

* chore: rebase

* fix: formatting functions

* fix: test coverage

* fix: remove lcov file

* fix: ignore coverage file

* fix: max redeem rounding (#83)

* fix: use convert to shares

* fix: tests

* test: add check

* test: fix invariants

* fix: formatting (#78)

* fix: naming

* fix: pack struct (#81)

* fix: pack struct further

* fix: format

* chore: dont use modifier require

* chore: organize

* chore: remove is functions

* chore: add chain id to symbol

* chore: organize

* fix: revert symbol change

* chore: fix symbol bakc

* fix: minor changes (#82)

* chore: remove min fee

* fix: tests

* build: cheaper reentrancy

* chore: fix spech

* feat: remove internal preview

* feat: make factory immutable (#87)

* feat: lower report costs (#76)

* feat: only update unlock date

* feat: dont burn unlocked (#77)

* feat: burn shares once

* feat: dont convert twice

* fix: loss shares to burn

* chore: comments

* fix: report updates

* fix: dont burn unless there is shares

* chore: rebase to storage pointer

* chore: organize reporting

* chore: rebase

* chore: final formatting and script (#88)

* fix: solc

* chore: comments

* chore: deployment script

* chore: yarn
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants