ExocoreNetwork / exocore-contracts

5 stars 5 forks source link

refactor: separate NST deposit/withdrawal from LST deposit/withdrawal #96

Closed adu-web3 closed 1 month ago

adu-web3 commented 2 months ago

Description

closes: #65 closes: #3 closes: #57 closes: #77

To enable updating beacon chain balance by oracle module, we should send the validator pubkey to Exocore to be recorded. So we should separate NST(native staking token) message from LST message when doing deposit/withdrawal from client chain to Exocore

This PR involves relatively big refactoring to support adding more message types and message handlers, as well as making the code better organized. For reviewer's convenience, I would list the scope and list of tasks for this pr:

Scope

The refactoring mainly happens to:

  1. ClientGatewayLzReceiver: refactor the handleResponse function to simplify the process, since only withdrawal actions need response from Exocore after we remove the principal balances and reward balances from Vault
  2. ExocoreGateway: refactor the original requestXXX message handlers as handleXXX to remove redundant logics(though there are still some repeated logics) and add new message handlers to support NST deposit/withdrawal, and also remove the try/catch wrapper when calling precompiles, because: a. try/catch is actually not working since we cannot catch the revert caused by precompile b. precompiled contracts are not outside contracts and we can easily avoid revert happening by not returning errors for precompile handlers
  3. NativeRestakingController: encode validator's pubkey into the message when doing deposit/withdrawal for native restaking
  4. Vault and ExoCapsule: remove the principalBalances and rewardBalances states since we have decided to not storing them on client chain side and they are not used as constraints in any scenario like depoist/withdraw/delegate/undelegate
  5. ActionAttributes: use bitmap to represent each action's attributes and message length, so that it might be less error prone and more explicit
  6. IAssets and IDelegation precompiles: add new interfaces to support deposit/withdraw NST with validator's pubkey, and revise some function names to make them more concise

Targeted Tasks

Summary by CodeRabbit

Release Notes

coderabbitai[bot] commented 2 months ago

Walkthrough

The pull request introduces significant changes across multiple smart contract files, primarily focusing on restructuring action handling and enhancing error management. A new Bootstrap contract has been added, and existing contracts have been updated to streamline operations related to deposits, withdrawals, and delegation within the Exocore ecosystem. Event emissions and error handling have been refined for improved clarity.

Changes

Files Change Summary
docs/client-chain-contracts-design.md, src/core/ExocoreGateway.sol, src/libraries/Errors.sol, src/storage/BootstrapStorage.sol, src/storage/ClientChainGatewayStorage.sol, src/storage/ExocoreGatewayStorage.sol Introduced new components, updated error handling, and restructured event emissions for clarity and consistency.
docs/native_deposit_workflow.wsd Modified error message from "CapsuleNotExist" to "CapsuleDoesNotExist" for improved clarity.
src/storage/ExocoreGatewayStorage.sol Consolidated event emissions related to asset transfers and improved message validation logic.
test/foundry/unit/ClientChainGateway.t.sol Updated tests to reflect changes in error handling and action references for improved clarity.

Assessment against linked issues

Objective Addressed Explanation
View functions for querying ExoCapsules and validators (#65) No new view functions were added for querying.
Save LayerZero relaying fee by not sending response back (#3) The changes streamline response handling for deposits and delegation.
Optimize _handleResponse function using bit operations (#57) The changes do not directly address this optimization.
Remove unused states principalBalances and rewardBalances (#77) The unused states were not removed as part of this PR.

Possibly related PRs

Poem

🐇 In the meadow where the code does play,
A rabbit hops, with joy today!
Actions now dance in a clearer light,
Errors tamed, and logic feels right.
With every change, we leap and bound,
In the world of contracts, joy is found! 🌼


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?

:heart: 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)
:placard: 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` or `@coderabbitai title` 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.
MaxMustermann2 commented 1 month ago

Does this also close #57 ?

adu-web3 commented 1 month ago

Does this also close #57 ?

yes, exactly, it also closes #3