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

develop read-optimized storage #5044

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

havi-kim
Copy link

Read-Optimized Storage

Idea

The ReadOptimizedStorage library is designed to efficiently store and retrieve data that does not change frequently but needs to be read frequently. This library leverages the concept of copying contract code to transient storage when read, which can improve read performance in �some scenarios.

How It Works

  • Writing Data

    • When data is added or modified, it is encoded into bytes and used to create a new storage contract. This storage contract holds the key-value pairs. The storage contract is then stored in a dedicated storage slot.
  • Reading Data

    • When data is read, the extcodecopy operation is used to extract the key-value pairs from the storage contract. These key-value pairs are decoded and stored in transient storage in bulk. This approach ensures that subsequent read operations are efficient.

Benefits

This method is particularly useful for protocols that:

  • Choose not to adopt the upgradeable delegate call-based proxy pattern and prefer separate storage contracts.
  • Need to read configuration or similar values that do not change often but require multiple storage slots (more than four) to read.

Copy link

changeset-bot bot commented May 14, 2024

⚠️ No Changeset found

Latest commit: 4479a93

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

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.

None yet

1 participant