-
Notifications
You must be signed in to change notification settings - Fork 0
refactor(delegator): optimize traversal of accounts #37
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
Conversation
WalkthroughThe pull request introduces a new Changes
Sequence DiagramsequenceDiagram
participant Caller
participant WalkAccounts
participant AccountKeeper
participant WalkFunc
Caller->>WalkAccounts: Call with context, keeper, walkFunc
WalkAccounts->>AccountKeeper: Get account iterator
loop For each account
WalkAccounts->>WalkFunc: Invoke with account address
WalkFunc-->>WalkAccounts: Return stop/continue and potential error
alt Stop condition met
WalkAccounts-->>Caller: Return
end
end
WalkAccounts-->>Caller: Return final error
Possibly related PRs
✨ Finishing Touches
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? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
pkg/delegators/reader.go (2)
131-134
: Add function documentation.Consider adding a doc comment explaining:
- The purpose of the function
- Parameters description
- Return value description
- Example usage
+// WalkAccounts iterates over all accounts in the store and calls walkFunc for each account address. +// The iteration stops if walkFunc returns stop=true or if an error occurs. +// Parameters: +// - ctx: The SDK context +// - accountKeeper: The account keeper instance +// - walkFunc: Callback function that processes each account address +// Returns an error if iteration fails or if walkFunc returns an error. func WalkAccounts(
135-156
: Improve error context in error handling.The current error handling could be more descriptive about what operation failed. Consider wrapping errors with additional context.
iter, err := accountKeeper.Accounts.Iterate(ctx, nil) if err != nil { - return err + return fmt.Errorf("failed to create account iterator: %w", err) } defer func() { _ = iter.Close() }() for ; iter.Valid(); iter.Next() { addr, err := iter.Key() if err != nil { - return err + return fmt.Errorf("failed to get account address from iterator: %w", err) } stop, err := walkFunc(addr) if err != nil { - return err + return fmt.Errorf("walk function failed for address %s: %w", addr, err) }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (2)
go.mod
is excluded by!**/*.mod
go.sum
is excluded by!**/*.sum
,!**/*.sum
📒 Files selected for processing (1)
pkg/delegators/reader.go
(3 hunks)
🔇 Additional comments (2)
pkg/delegators/reader.go (2)
17-17
: LGTM!The addition of the
authkeeper
import is appropriate for the new account traversal functionality.
89-89
: LGTM! Good refactoring.The change successfully removes interface unmarshalling while maintaining the existing functionality. This improves safety by avoiding potential failures with unregistered concrete types.
🎉 This PR is included in version 1.0.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
Make account traversal safer by eliminating interface unmarshalling, which could fail if no concrete type is registered for
types.AccountI
(e.g.,/ethermint.types.v1.EthAccount
from Orai blockchain).