onflow / flow-evm-gateway

FlowEVM Gateway implements an Ethereum-equivalent JSON-RPC API for EVM clients to use
https://developers.flow.com/evm/about
Apache License 2.0
11 stars 10 forks source link

Local register index and state re-execution #553

Closed sideninja closed 1 week ago

sideninja commented 2 months ago

Closes: #322 #450 #451 #452

Includes PRs

550

546

542

541

540

537

This is a feature branch that contains work from multiple PRs to implement local register index along with the state re-execution.

It's still in draft because further testing is needed and we should also include the checksum to validate the local state after each transaction is executed, that is depending on the PR https://github.com/onflow/flow-go/pull/6456 those checksum should be used to validate the state instead of the receipt checking which is currently done.


For contributor use:

Summary by CodeRabbit

Release Notes

coderabbitai[bot] commented 2 months ago

[!WARNING]

Rate limit exceeded

@sideninja has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 15 minutes and 21 seconds before requesting another review.

How to resolve this issue? After the wait time has elapsed, a review can be triggered using the `@coderabbitai review` command as a PR comment. Alternatively, push new commits to this PR. We recommend that you space out your commits to avoid hitting the rate limit.
How do rate limits work? CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our [FAQ](https://coderabbit.ai/docs/faq) for further information.
Commits Files that changed from the base of the PR and between 11833ebb7a0a8e23a35f55d008c4c2bf277bda78 and 16798f25c2365d6cd476902387c7e1696f80feaa.

Walkthrough

The changes involve significant refactoring and enhancements across multiple files in the EVM Gateway codebase. Key updates include renaming network environments in documentation, restructuring the BlockChainAPI for improved clarity, introducing a ClientHandler for EVM operations, and implementing a state engine for managing blockchain state. Additionally, new methods and interfaces have been added for better transaction handling and state validation, while existing methods have been updated to improve functionality and maintainability.

Changes

Files Change Summary
README.md Updated network names for public RPC endpoints: "EVM on Flow Testnet" to "Testnet" and "EVM on Flow" to "Mainnet".
api/api.go, api/pull.go Refactored BlockChainAPI, changed field types, updated method calls from LatestEVMHeight() to LatestIndexedHeight(), added new methods for block number resolution.
bootstrap/bootstrap.go Added State field to Bootstrap, introduced StartStateIndex and StopStateIndex methods, renamed existing fields for consistency.
services/requester/client_handler.go Introduced ClientHandler for EVM operations, added methods for local state interaction.
services/requester/remote_client.go Refactored Requester interface into RemoteClient, modified method signatures for consistency.
tests/go.mod Updated dependency versions for github.com/onflow/flow-emulator, github.com/onflow/flow-go, and github.com/onflow/flow/protobuf/go/flow.

Assessment against linked issues

Objective Addressed Explanation
Extend EVM Gateway to operate in archive mode, indexing state alongside transactions (Issue #322).
Implement APIs for state inspection such as eth_getBalance, eth_getStorageAt, eth_getTransactionCount, eth_getCode (Issue #322).
Improve event ingestion to build and index Cadence values read through Cadence arch (Issue #322). Event ingestion improvements are not implemented.
Create an emulator for executing EVM transactions locally (Issue #322).
Implement a ledger for state management in the EVM emulator (Issue #322). Ledger implementation details are unclear.

Possibly related PRs

Suggested labels

Improvement, EVM, Testing

Suggested reviewers

Poem

🐇 In the land of code where bunnies hop,
Changes abound, we never stop!
From state engines to handlers bright,
Our EVM dances in the light.
With tests that leap and functions that sing,
Hooray for the changes that new features bring! 🌟


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)
Tips ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - Review comments: Directly reply to a review comment made by CodeRabbit. Example: -- `I pushed a fix in commit , please review it.` -- `Generate unit testing code for this file.` - `Open a follow-up GitHub issue for this discussion.` - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: -- `@coderabbitai generate unit testing code for this file.` -- `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: -- `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.` -- `@coderabbitai read src/utils.ts and generate unit testing code.` -- `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` -- `@coderabbitai help me debug CodeRabbit configuration file.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. ### CodeRabbit Commands (Invoked using PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai full review` to do a full review from scratch and review all the files again. - `@coderabbitai summary` to regenerate the summary of the PR. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository. - `@coderabbitai help` to get help. ### Other keywords and placeholders - Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. - Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description. - Add `@coderabbitai` anywhere in the PR title to generate the title automatically. ### CodeRabbit Configuration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information. - If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json` ### Documentation and Community - Visit our [Documentation](https://coderabbit.ai/docs) for detailed information on how to use CodeRabbit. - Join our [Discord Community](https://discord.com/invite/GsXnASn26c) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.
m-Peter commented 1 week ago

Closing in favor of: https://github.com/onflow/flow-evm-gateway/pull/635