Closed adu-web3 closed 1 month ago
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.
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. |
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. |
🐇 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?
Does this also close #57 ?
Does this also close #57 ?
yes, exactly, it also closes #3
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:
ClientGatewayLzReceiver
: refactor thehandleResponse
function to simplify the process, since only withdrawal actions need response from Exocore after we remove the principal balances and reward balances fromVault
ExocoreGateway
: refactor the originalrequestXXX
message handlers ashandleXXX
to remove redundant logics(though there are still some repeated logics) and add new message handlers to support NST deposit/withdrawal, and also remove thetry/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 handlersNativeRestakingController
: encode validator's pubkey into the message when doing deposit/withdrawal for native restakingVault
andExoCapsule
: remove theprincipalBalances
andrewardBalances
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/undelegateActionAttributes
: use bitmap to represent each action's attributes and message length, so that it might be less error prone and more explicitIAssets
andIDelegation
precompiles: add new interfaces to support deposit/withdraw NST with validator's pubkey, and revise some function names to make them more conciseTargeted Tasks
principalBalances
andrewardBalances
fromVaultStorage
andExoCapsuleStorage
, and remove corresponding update functions from interfaces, vault/exocapsule implementations and even caller contracts(Bootstrap
andClientGatewayLzReceiver
)ActionAttributes
to represent action attributes as bitmaps and optimize the redundant functionsSummary by CodeRabbit
Release Notes
New Features
Bootstrap
,ExoCapsule
, andNativeRestakingController
to enhance the Exocore system.Bug Fixes
Errors
library, providing clearer feedback for various scenarios.Refactor
Documentation