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

feat(client/v2): get keyring from context #19646

Merged
merged 2 commits into from
Jun 19, 2024
Merged

feat(client/v2): get keyring from context #19646

merged 2 commits into from
Jun 19, 2024

Conversation

julienrbrt
Copy link
Member

@julienrbrt julienrbrt commented Mar 4, 2024

Description

Closes: #19645

ref: #19530 (comment) and 1. of #18310

I'll update Hubl after the client/v2 tag after this and #19618


Author Checklist

All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.

I have...

  • included the correct type prefix in the PR title
  • confirmed ! in the type prefix if API or client breaking change
  • targeted the correct branch (see PR Targeting)
  • provided a link to the relevant issue or specification
  • reviewed "Files changed" and left comments if necessary
  • included the necessary unit and integration tests
  • added a changelog entry to CHANGELOG.md
  • updated the relevant documentation or specification, including comments for documenting Go code
  • confirmed all CI checks have passed

Reviewers Checklist

All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.

I have...

  • confirmed the correct type prefix in the PR title
  • confirmed all author checklist items have been addressed
  • reviewed state machine logic, API design and naming, documentation is accurate, tests and test coverage

Summary by CodeRabbit

  • New Features

    • Introduced a feature to use keyring from the command context for improved security.
    • Enhanced transaction signing support with a keyring for AutoCLI.
  • Improvements

    • Integrated latest version of cosmos-proto and improved version filtering.
    • Enums are now marshaled as strings in queries for better readability.
    • AutoCLI commands now utilize client context from the root command.
  • Documentation

    • Updated README to clarify keyring usage and provide detailed examples for signing transactions.
  • Refactor

    • Removed redundant keyring configurations from various components to streamline the codebase.

@julienrbrt julienrbrt added the backport/v0.50.x PR scheduled for inclusion in the v0.50's next stable release label Mar 4, 2024
@julienrbrt julienrbrt requested a review from a team as a code owner March 4, 2024 19:42
Copy link
Contributor

coderabbitai bot commented Mar 4, 2024

Note

Reviews paused

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Walkthrough

The updates focus on refining the client/v2 package by enhancing how keyrings are handled within command contexts. Notable changes include the removal of the Keyring field from various structures and functions, and the introduction of methods to obtain keyring from context. These adjustments improve command context management across autocli functionalities.

Changes

Files Path(s) Change Summary
client/v2/CHANGELOG.md Updated changelog with new features and version change to v2.1.0-rc.1.
client/v2/README.md Detailed keyring usage in autocli, including setup and transaction signing examples.
client/v2/autocli/app.go Removed Keyring field from AppOptions struct and related usages.
client/v2/autocli/common.go Improved context handling in Builder struct methods.
client/v2/autocli/common_test.go Updated tests to align with removal of keyring in initFixture function.
client/v2/autocli/flag/address.go Updated method signatures and logic related to keyring handling.
client/v2/autocli/flag/builder.go, flag/interface.go, flag/binary.go, flag/duration.go, flag/enum.go, flag/json_message.go, flag/pubkey.go, flag/timestamp.go Adjustments in method signatures to improve context passing.
client/v2/autocli/keyring/keyring.go Introduced new file for keyring management operations.
client/v2/autocli/msg.go Simplified logic for adding commands and adjusted parameter passing.
client/v2/autocli/query_test.go Removed unused parameter from buildModuleQueryCommand function.

Assessment against linked issues

Objective Addressed Explanation
Fixes the issue where tx bank send fails when using a key alias due to invalid bech32 length. (#19645)

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
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • 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 generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @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 as 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.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Configration 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 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 for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions github-actions bot added the C:CLI label Mar 4, 2024
@julienrbrt julienrbrt changed the title refactor(client/v2): get keyring from context feat(client/v2): get keyring from context Mar 4, 2024
@julienrbrt julienrbrt mentioned this pull request Mar 4, 2024
5 tasks
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Status

Actionable comments generated: 5

Configuration used: .coderabbit.yml

Commits Files that changed from the base of the PR and between 3e63309 and 7917a92.
Files selected for processing (11)
  • client/v2/CHANGELOG.md (2 hunks)
  • client/v2/README.md (5 hunks)
  • client/v2/autocli/app.go (3 hunks)
  • client/v2/autocli/common.go (2 hunks)
  • client/v2/autocli/common_test.go (2 hunks)
  • client/v2/autocli/flag/address.go (6 hunks)
  • client/v2/autocli/flag/builder.go (3 hunks)
  • client/v2/autocli/msg.go (2 hunks)
  • client/v2/autocli/query_test.go (1 hunks)
  • simapp/simd/cmd/root.go (2 hunks)
  • simapp/simd/cmd/root_v2.go (4 hunks)
Additional comments: 15
client/v2/README.md (10)
  • 75-84: > 📝 NOTE

This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [5-5]

The front matter syntax seems correct, but the static analysis hinted at a possible spelling mistake. This is a false positive as it's interpreting YAML front matter as regular text.

  • 75-84: > 📝 NOTE

This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [17-17]

The term "Autocli" is correctly used in the context of the Cosmos SDK's autocli package. The suggestion to replace it with "AutoCAD" is incorrect.

  • 78-78: The description of autocli using a keyring for key name resolving and signing transactions is clear and relevant to the PR objectives. However, ensure that the implementation details align with the Cosmos SDK's security practices.
  • 81-81: The example commands provided are helpful for understanding how autocli improves user experience by resolving key names directly from the keyring. This aligns with the PR's goal of enhancing keyring utilization.
  • 90-92: The explanation of how the keyring is sourced from the client.Context and its necessity for signing transactions is crucial. It's important to ensure that this change does not introduce any security vulnerabilities or regressions in functionality.
  • 95-95: The mention of both the Cosmos SDK keyring and Hubl keyring implementing the client/v2/autocli/keyring interface demonstrates the flexibility of the autocli package. This is a positive change, enhancing modularity and compatibility.
  • 103-103: The support for signing transactions with the keyring is a key feature of autocli. It's important to verify that this functionality works as expected and that the documentation accurately reflects the implementation.
  • 212-216: The off-chain functionalities for signing and verifying files are well-documented. These features are important for users who need to work with transactions outside of the blockchain. Ensure that the implementation is secure and user-friendly.
  • 220-220: The sign-file command's flags are well-documented, providing users with options for encoding and output formatting. This flexibility is beneficial for various use cases. Ensure that the documentation matches the actual command behavior.
  • 75-84: > 📝 NOTE

This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [267-267]

The documentation for verifying a signed file is straightforward and provides a clear example. This functionality is essential for ensuring the integrity of off-chain data. Verify that the implementation aligns with the documentation.

client/v2/autocli/flag/builder.go (4)
  • 16-21: > 📝 NOTE

This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [1-1]

The package declaration and import statements are correctly structured, adhering to Go conventions.

  • 16-21: > 📝 NOTE

This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [76-76]

The Builder struct is well-defined, with clear documentation for each field. The removal of the Keyring field, as mentioned in the summary, is not directly visible here, but the struct appears to be correctly adjusted for its current responsibilities.

  • 91-91: The init method for the Builder struct is correctly initializing maps for message and scalar flag types. This method ensures that the builder is ready for use without manual initialization of these maps by the caller.
  • 16-21: > 📝 NOTE

This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [129-129]

The ValidateAndComplete method correctly checks for the presence of necessary codecs and resolvers. Given the context of the changes, it's important to ensure that all required fields are validated here. The removal of the Keyring field seems to have no direct impact on this method, which is expected based on the summary.

client/v2/autocli/query_test.go (1)
  • 687-687: The modification of buildModuleQueryCommand function signature to remove the moduleName parameter and replace it with an underscore as the first parameter indicates a shift towards not using the module name directly within this function. This change aligns with the PR's objective to refactor keyring handling by possibly reducing the reliance on specific module names for command generation. However, it's crucial to ensure that this change does not impact the functionality where the module name is essential for command context or logging purposes.
  • Ensure that all usages of buildModuleQueryCommand throughout the test suite and potentially in the actual application logic have been updated to reflect this change.
  • Verify that removing the moduleName parameter does not affect the clarity of error messages or logging, where the module name might have been used to provide context.

Comment on lines 75 to 84

### Keyring

`autocli` uses a keyring for key name resolving and signing transactions. Providing a keyring is optional, but if you want to use the `autocli` generated commands to sign transactions, you must provide a keyring.
`autocli` uses a keyring for key name resolving names and signing transactions.

:::tip
This provides a better UX as it allows to resolve key names directly from the keyring in all transactions and commands.
AutoCLI provides a better UX than normal cli as it allows to resolve key names directly from the keyring in all transactions and commands.

```sh
<appd> q bank balances alice
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [17-17]

The phrase "CLI interface" is redundant since "CLI" stands for "Command Line Interface". Consider simplifying this to just "CLI".

- CLI interface
+ CLI

@@ -46,8 +46,9 @@ Ref: https://keepachangelog.com/en/1.0.0/

### Improvements

* []() Use keyring from command context.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The entry lacks a GitHub issue reference, which is essential for tracking and context.

Please include the GitHub issue reference for the change "Use keyring from command context."

@@ -56,6 +57,7 @@

### API Breaking Changes

* []() Remove keyring from autocli options and flag builder options.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar to the previous comment, this entry is missing a GitHub issue reference.

Please include the GitHub issue reference for the change "Remove keyring from autocli options and flag builder options."

Comment on lines 145 to 167
func getKeyringFromCtx(ctx context.Context) keyring.Keyring {
if ctx != nil {
if clientCtx := ctx.Value(client.ClientContextKey); clientCtx != nil {
keyring, err := sdkkeyring.NewAutoCLIKeyring(clientCtx.(*client.Context).Keyring)
if err != nil {
panic(fmt.Errorf("failed to create keyring: %w", err))
}

return keyring
}
}

return keyring.NoKeyring{}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The function getKeyringFromCtx uses a panic for error handling, which is not ideal for library code.

Consider returning an error instead of using panic, to allow calling code to handle the error gracefully.

- func getKeyringFromCtx(ctx context.Context) keyring.Keyring {
+ func getKeyringFromCtx(ctx context.Context) (keyring.Keyring, error) {
  ...
-               panic(fmt.Errorf("failed to create keyring: %w", err))
+               return nil, fmt.Errorf("failed to create keyring: %w", err)
  ...
-       return keyring.NoKeyring{}
+       return keyring.NoKeyring{}, nil
}

Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
func getKeyringFromCtx(ctx context.Context) keyring.Keyring {
if ctx != nil {
if clientCtx := ctx.Value(client.ClientContextKey); clientCtx != nil {
keyring, err := sdkkeyring.NewAutoCLIKeyring(clientCtx.(*client.Context).Keyring)
if err != nil {
panic(fmt.Errorf("failed to create keyring: %w", err))
}
return keyring
}
}
return keyring.NoKeyring{}
}
func getKeyringFromCtx(ctx context.Context) (keyring.Keyring, error) {
if ctx != nil {
if clientCtx := ctx.Value(client.ClientContextKey); clientCtx != nil {
keyring, err := sdkkeyring.NewAutoCLIKeyring(clientCtx.(*client.Context).Keyring)
if err != nil {
return nil, fmt.Errorf("failed to create keyring: %w", err)
}
return keyring, nil
}
}
return keyring.NoKeyring{}, nil
}

Comment on lines 16 to 21

autocliv1 "cosmossdk.io/api/cosmos/autocli/v1"
msgv1 "cosmossdk.io/api/cosmos/msg/v1"
"cosmossdk.io/client/v2/autocli/keyring"
"cosmossdk.io/client/v2/internal/flags"
"cosmossdk.io/client/v2/internal/util"
"cosmossdk.io/core/address"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [1-1]

Given the removal of the Keyring field and adjustments in the ValidateAndComplete method, it's crucial to ensure that these changes are thoroughly tested, especially in scenarios where the Builder is used extensively across the client. Consider adding or updating unit tests to cover these changes and any new logic introduced in this refactor.

Would you like assistance in creating or updating tests to cover these changes?

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Status

Actionable comments generated: 2

Configuration used: .coderabbit.yml

Commits Files that changed from the base of the PR and between 7917a92 and 3d963d5.
Files selected for processing (1)
  • client/v2/CHANGELOG.md (2 hunks)

Comment on lines 49 to 54
* [#19646](https://github.com/cosmos/cosmos-sdk/pull/19646) Use keyring from command context.
* [#19060](https://github.com/cosmos/cosmos-sdk/pull/19060) Use client context from root (or enhanced) command in autocli commands.
* Note, the given command must have a `client.Context` in its context.
* Note, the given command must have a `client.Context` in its context.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The entry under "Improvements" for PR #19646 and #19060 is clear and concise. However, there's an extra whitespace before the asterisk in the note for PR #19060. Additionally, consider adding a space after the period in the note for better readability.

- commands.   * Note, the given command must have a `client.Context` in its context.
+ commands. * Note, the given command must have a `client.Context` in its context.

Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
* [#19646](https://github.com/cosmos/cosmos-sdk/pull/19646) Use keyring from command context.
* [#19060](https://github.com/cosmos/cosmos-sdk/pull/19060) Use client context from root (or enhanced) command in autocli commands.
* Note, the given command must have a `client.Context` in its context.
* Note, the given command must have a `client.Context` in its context.
* [#19646](https://github.com/cosmos/cosmos-sdk/pull/19646) Use keyring from command context.
* [#19060](https://github.com/cosmos/cosmos-sdk/pull/19060) Use client context from root (or enhanced) command in autocli commands.
* Note, the given command must have a `client.Context` in its context.

Comment on lines 60 to 67
* []() Remove keyring from autocli options and flag builder options.
* [#17709](https://github.com/cosmos/cosmos-sdk/pull/17709) Address codecs have been removed from `autocli.AppOptions` and `flag.Builder`. Instead client/v2 uses the address codecs present in the context (introduced in [#17503](https://github.com/cosmos/cosmos-sdk/pull/17503)).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the "API Breaking Changes" section, the description for the removal of keyring from autocli options and the sourcing of address codecs from the context is clear. However, there's a missing comma after "Instead" which would improve the readability of the sentence.

- Instead client/v2 uses the address codecs present in the context
+ Instead, client/v2 uses the address codecs present in the context

Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
* []() Remove keyring from autocli options and flag builder options.
* [#17709](https://github.com/cosmos/cosmos-sdk/pull/17709) Address codecs have been removed from `autocli.AppOptions` and `flag.Builder`. Instead client/v2 uses the address codecs present in the context (introduced in [#17503](https://github.com/cosmos/cosmos-sdk/pull/17503)).
* []() Remove keyring from autocli options and flag builder options.
* [#17709](https://github.com/cosmos/cosmos-sdk/pull/17709) Address codecs have been removed from `autocli.AppOptions` and `flag.Builder`. Instead, client/v2 uses the address codecs present in the context (introduced in [#17503](https://github.com/cosmos/cosmos-sdk/pull/17503)).

@julienrbrt julienrbrt marked this pull request as draft March 4, 2024 20:37
@julienrbrt julienrbrt marked this pull request as ready for review April 9, 2024 10:29
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

client/v2/autocli/flag/builder.go Outdated Show resolved Hide resolved
client/v2/CHANGELOG.md Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Comment on lines 145 to 167
func getKeyringFromCtx(ctx context.Context) keyring.Keyring {
if ctx != nil {
if clientCtx := ctx.Value(client.ClientContextKey); clientCtx != nil {
k, err := sdkkeyring.NewAutoCLIKeyring(clientCtx.(*client.Context).Keyring)
if err != nil {
panic(fmt.Errorf("failed to create keyring: %w", err))
}

return k
} else if k := ctx.Value(keyring.KeyringContextKey); k != nil {
return k.(*keyring.KeyringImpl)
}
}

return keyring.NoKeyring{}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Replace panic with error handling in getKeyringFromCtx to improve robustness and error recovery.

- panic(fmt.Errorf("failed to create keyring: %w", err))
+ return nil, fmt.Errorf("failed to create keyring: %w", err)

Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
func getKeyringFromCtx(ctx context.Context) keyring.Keyring {
if ctx != nil {
if clientCtx := ctx.Value(client.ClientContextKey); clientCtx != nil {
k, err := sdkkeyring.NewAutoCLIKeyring(clientCtx.(*client.Context).Keyring)
if err != nil {
panic(fmt.Errorf("failed to create keyring: %w", err))
}
return k
} else if k := ctx.Value(keyring.KeyringContextKey); k != nil {
return k.(*keyring.KeyringImpl)
}
}
return keyring.NoKeyring{}
}
func getKeyringFromCtx(ctx context.Context) keyring.Keyring {
if ctx != nil {
if clientCtx := ctx.Value(client.ClientContextKey); clientCtx != nil {
k, err := sdkkeyring.NewAutoCLIKeyring(clientCtx.(*client.Context).Keyring)
if err != nil {
return nil, fmt.Errorf("failed to create keyring: %w", err)
}
return k
} else if k := ctx.Value(keyring.KeyringContextKey); k != nil {
return k.(*keyring.KeyringImpl)
}
}
return keyring.NoKeyring{}
}

client/v2/autocli/flag/address.go Outdated Show resolved Hide resolved
Comment on lines 213 to 227
* `sign-file` for signing a file.
* `verify-file` for verifying a previously signed file.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct minor grammatical issues in the off-chain functionalities section for improved readability.

- * `sign-file` for signing a file.
- * `verify-file` for verifying a previously signed file.
+ * `sign-file`: For signing a file.
+ * `verify-file`: For verifying a previously signed file.

Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
* `sign-file` for signing a file.
* `verify-file` for verifying a previously signed file.
* `sign-file`: For signing a file.
* `verify-file`: For verifying a previously signed file.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

Actionable comments outside the diff hunks (1)
client/v2/autocli/common_test.go (1)

Line range hint 40-40: Ensure the gRPC server in tests uses secure credentials to prevent potential security vulnerabilities.

- server := grpc.NewServer()
+ server := grpc.NewServer(grpc.Creds(credentials.NewServerTLSFromFile("cert.pem", "cert.key")))

Copy link
Member

@tac0turtle tac0turtle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

utACK

@julienrbrt
Copy link
Member Author

reverted the commits you made @sontrinh16
tests are supposed to be failing for now

Copy link
Contributor

github-actions bot commented Jun 9, 2024

This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@github-actions github-actions bot added the Stale label Jun 9, 2024
@julienrbrt julienrbrt removed the Stale label Jun 9, 2024
@tac0turtle
Copy link
Member

closing this for now until there is time to come back to it

@julienrbrt
Copy link
Member Author

@coderabbitai pause

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 11

Outside diff range and nitpick comments (11)
client/v2/autocli/flag/address.go (3)

41-43: Ensure the context is properly documented to explain why a pointer is necessary here, aiding future maintainability.


Line range hint 57-74: This error handling strategy is improved by checking the key name lookup first. However, consider consolidating the error messages for better clarity and maintainability.

- return fmt.Errorf("invalid account address or key name: %w", err)
+ return fmt.Errorf("Failed key name lookup or invalid account address: %w", err)

Line range hint 112-139: The error handling in this block is robust, but the error message could be more descriptive to aid debugging.

- return fmt.Errorf("input isn't a pubkey (%w) or is an invalid account address (%w)", err, err2)
+ return fmt.Errorf("Input validation failed: not a pubkey (%w) or invalid account address (%w)", err, err2)
client/v2/autocli/flag/map.go (1)

183-191: The introduction of context handling in the map value setting is a good improvement. However, ensure that the context and its changes are well-documented to avoid confusion.

client/v2/README.md (6)

Line range hint 17-17: Consider simplifying "CLI interface" to "CLI" to avoid redundancy.

- CLI interface
+ CLI
Tools
LanguageTool

[grammar] ~81-~81: Did you mean “resolving”? Or maybe you should add a pronoun? In active voice, ‘allow’ + ‘to’ takes an object, usually a pronoun. (ALLOW_TO)
Context: ... better UX than normal CLI as it allows to resolve key names directly from the keyring in ...


Line range hint 115-115: Clarify the language to enhance readability.

- The `AutoCLIOptions()` method on your module allows to specify custom commands, sub-commands or flags for each service.
+ The `AutoCLIOptions()` method on your module allows you to specify custom commands, sub-commands, or flags for each service.
Tools
LanguageTool

[grammar] ~81-~81: Did you mean “resolving”? Or maybe you should add a pronoun? In active voice, ‘allow’ + ‘to’ takes an object, usually a pronoun. (ALLOW_TO)
Context: ... better UX than normal CLI as it allows to resolve key names directly from the keyring in ...


Line range hint 131-131: Consider adding commas for better readability.

- Users can however use the `--no-proposal` flag to disable the proposal creation.
+ Users, however, can use the `--no-proposal` flag to disable the proposal creation.
Tools
LanguageTool

[grammar] ~81-~81: Did you mean “resolving”? Or maybe you should add a pronoun? In active voice, ‘allow’ + ‘to’ takes an object, usually a pronoun. (ALLOW_TO)
Context: ... better UX than normal CLI as it allows to resolve key names directly from the keyring in ...


Line range hint 145-145: Add a comma for clarity.

- By default `autocli` generates a flag for each field in your protobuf message.
+ By default, `autocli` generates a flag for each field in your protobuf message.
Tools
LanguageTool

[grammar] ~81-~81: Did you mean “resolving”? Or maybe you should add a pronoun? In active voice, ‘allow’ + ‘to’ takes an object, usually a pronoun. (ALLOW_TO)
Context: ... better UX than normal CLI as it allows to resolve key names directly from the keyring in ...


Line range hint 164-166: Ensure consistency in the use of "customize" and "customise".

- However, you can customise the flag names by providing a `FlagOptions`.
+ However, you can customize the flag names by providing a `FlagOptions`.

- ...can use the following naming options to customise the flags:
+ ...can use the following naming options to customize the flags:
Tools
LanguageTool

[grammar] ~81-~81: Did you mean “resolving”? Or maybe you should add a pronoun? In active voice, ‘allow’ + ‘to’ takes an object, usually a pronoun. (ALLOW_TO)
Context: ... better UX than normal CLI as it allows to resolve key names directly from the keyring in ...


Line range hint 182-182: Simplify the language for clarity.

- In order to enable this behavior, set in `AutoCLIOptions()` the `EnhanceCustomCommand` field to `true`, for the command type (queries and/or transactions) you want to enhance.
+ To enable this behavior, set the `EnhanceCustomCommand` field to `true` in `AutoCLIOptions()` for the command type (queries and/or transactions) you want to enhance.
Tools
LanguageTool

[grammar] ~81-~81: Did you mean “resolving”? Or maybe you should add a pronoun? In active voice, ‘allow’ + ‘to’ takes an object, usually a pronoun. (ALLOW_TO)
Context: ... better UX than normal CLI as it allows to resolve key names directly from the keyring in ...

client/v2/autocli/flag/builder.go (1)

Line range hint 113-193: Ensure proper handling of context.Context instead of *context.Context to align with Go best practices.

- func (b *Builder) AddMessageFlags(ctx *context.Context, flagSet *pflag.FlagSet, messageType protoreflect.MessageType, commandOptions *autocliv1.RpcCommandOptions) (*MessageBinder, error) {
+ func (b *Builder) AddMessageFlags(ctx context.Context, flagSet *pflag.FlagSet, messageType protoreflect.MessageType, commandOptions *autocliv1.RpcCommandOptions) (*MessageBinder, error) {

- func (b *Builder) addMessageFlags(ctx *context.Context, flagSet *pflag.FlagSet, messageType protoreflect.MessageType, commandOptions *autocliv1.RpcCommandOptions, options namingOptions) (*MessageBinder, error) {
+ func (b *Builder) addMessageFlags(ctx context.Context, flagSet *pflag.FlagSet, messageType protoreflect.MessageType, commandOptions *autocliv1.RpcCommandOptions, options namingOptions) (*MessageBinder, error) {
Review details

Configuration used: .coderabbit.yml
Review profile: CHILL

Commits

Files that changed from the base of the PR and between f40b6c5 and ce4ba2d.

Files selected for processing (21)
  • client/v2/CHANGELOG.md (3 hunks)
  • client/v2/README.md (6 hunks)
  • client/v2/autocli/app.go (3 hunks)
  • client/v2/autocli/common.go (1 hunks)
  • client/v2/autocli/common_test.go (2 hunks)
  • client/v2/autocli/flag/address.go (8 hunks)
  • client/v2/autocli/flag/binary.go (1 hunks)
  • client/v2/autocli/flag/builder.go (11 hunks)
  • client/v2/autocli/flag/coin.go (1 hunks)
  • client/v2/autocli/flag/duration.go (1 hunks)
  • client/v2/autocli/flag/enum.go (1 hunks)
  • client/v2/autocli/flag/interface.go (1 hunks)
  • client/v2/autocli/flag/json_message.go (1 hunks)
  • client/v2/autocli/flag/list.go (2 hunks)
  • client/v2/autocli/flag/map.go (1 hunks)
  • client/v2/autocli/flag/messager_binder.go (1 hunks)
  • client/v2/autocli/flag/pubkey.go (1 hunks)
  • client/v2/autocli/flag/timestamp.go (1 hunks)
  • client/v2/autocli/keyring/keyring.go (1 hunks)
  • client/v2/autocli/msg.go (4 hunks)
  • client/v2/autocli/query_test.go (1 hunks)
Files skipped from review due to trivial changes (2)
  • client/v2/autocli/app.go
  • client/v2/autocli/common_test.go
Additional context used
Path-based instructions (19)
client/v2/autocli/flag/duration.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

client/v2/autocli/flag/interface.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

client/v2/autocli/flag/timestamp.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

client/v2/autocli/flag/coin.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

client/v2/autocli/flag/pubkey.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

client/v2/autocli/keyring/keyring.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

client/v2/autocli/flag/binary.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

client/v2/autocli/flag/enum.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

client/v2/autocli/flag/json_message.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

client/v2/autocli/flag/messager_binder.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

client/v2/autocli/flag/list.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

client/v2/CHANGELOG.md (1)

Pattern **/*.md: "Assess the documentation for misspellings, grammatical errors, missing documentation and correctness"

client/v2/autocli/flag/address.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

client/v2/autocli/common.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

client/v2/autocli/msg.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

client/v2/autocli/flag/map.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

client/v2/README.md (1)

Pattern **/*.md: "Assess the documentation for misspellings, grammatical errors, missing documentation and correctness"

client/v2/autocli/flag/builder.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

client/v2/autocli/query_test.go (2)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.


Pattern **/*_test.go: "Assess the unit test code assessing sufficient code coverage for the changes associated in the pull request"

LanguageTool
client/v2/CHANGELOG.md

[uncategorized] ~67-~67: A comma may be missing after the conjunctive/linking adverb ‘Instead’. (SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)
Context: ...autocli.AppOptionsandflag.Builder`. Instead client/v2 uses the address codecs prese...

client/v2/README.md

[style] ~17-~17: This phrase is redundant (‘I’ stands for ‘interface’). Use simply “CLI”. (ACRONYM_TAUTOLOGY)
Context: ...s. This means that you can easily add a CLI interface to your application without having to m...


[grammar] ~81-~81: Did you mean “resolving”? Or maybe you should add a pronoun? In active voice, ‘allow’ + ‘to’ takes an object, usually a pronoun. (ALLOW_TO)
Context: ... better UX than normal CLI as it allows to resolve key names directly from the keyring in ...


[grammar] ~115-~115: Did you mean “specifying”? Or maybe you should add a pronoun? In active voice, ‘allow’ + ‘to’ takes an object, usually a pronoun. (ALLOW_TO)
Context: ...Options()` method on your module allows to specify custom commands, sub-commands or flags ...


[typographical] ~131-~131: Consider adding two commas here. (HOWEVER_COMMA)
Context: ...cli.RpcCommandOptionsstruct. Users can however use the--no-proposal` flag to disable...


[uncategorized] ~145-~145: Did you mean: “By default,”? (BY_DEFAULT_COMMA)
Context: ...#L94-L97 ``` ### Positional Arguments By default autocli generates a flag for each fie...


[uncategorized] ~164-~164: Do not mix variants of the same word (‘customise’ and ‘customize’) within a single text. (EN_WORD_COHERENCY)
Context: ...your protobuf message. However, you can customise the flag names by providing a `FlagOpti...


[uncategorized] ~166-~166: Do not mix variants of the same word (‘customise’ and ‘customize’) within a single text. (EN_WORD_COHERENCY)
Context: ...can use the following naming options to customise the flags: ``` go autocliv1.RpcCommand...


[style] ~182-~182: Consider a shorter alternative to avoid wordiness. (IN_ORDER_TO_PREMIUM)
Context: ...mmands for the proposer subcommands. In order to enable this behavior, set in `AutoCLIOp...


[uncategorized] ~233-~233: Possible missing comma found. (AI_HYDRA_LEO_MISSING_COMMA)
Context: ...s/cip-X.md). ## Sign a file To sign a file sign-file command offers some helpful...


[uncategorized] ~280-~280: Possible missing comma found. (AI_HYDRA_LEO_MISSING_COMMA)
Context: ... ``` ## Verify a file To verify a file only the key name used and the previous...

Markdownlint
client/v2/README.md

247-247: Expected: 2; Actual: 4 (MD007, ul-indent)
Unordered list indentation


258-258: Expected: 2; Actual: 4 (MD007, ul-indent)
Unordered list indentation


269-269: Expected: 2; Actual: 4 (MD007, ul-indent)
Unordered list indentation


222-222: null (MD025, single-title, single-h1)
Multiple top-level headings in the same document


253-253: null (MD031, blanks-around-fences)
Fenced code blocks should be surrounded by blank lines


264-264: null (MD031, blanks-around-fences)
Fenced code blocks should be surrounded by blank lines


254-254: null (MD040, fenced-code-language)
Fenced code blocks should have a language specified


265-265: null (MD040, fenced-code-language)
Fenced code blocks should have a language specified

Additional comments not posted (13)
client/v2/autocli/flag/duration.go (1)

13-13: Verify the necessity and safety of passing context.Context by pointer.

Verification successful

The search results show that the NewValue functions in the client/v2/autocli/flag/ directory generally do not modify the context.Context passed to them. They typically use the context to create new value types, and the context is stored within these types but not modified directly. This suggests that the change to use a pointer to context.Context is likely a design choice to maintain consistency across the codebase rather than for modifying the context.

  • client/v2/autocli/flag/timestamp.go
  • client/v2/autocli/flag/pubkey.go
  • client/v2/autocli/flag/map.go
  • client/v2/autocli/flag/list.go
  • client/v2/autocli/flag/json_message.go
  • client/v2/autocli/flag/enum.go
  • client/v2/autocli/flag/duration.go
  • client/v2/autocli/flag/coin.go
  • client/v2/autocli/flag/binary.go
  • client/v2/autocli/flag/address.go

These files contain the NewValue function implementations, and none of them appear to modify the context.Context directly.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Search for usage of NewValue in the codebase to verify context manipulation.
rg --type go 'NewValue\('

Length of output: 2908



Script:

#!/bin/bash
# Inspect the implementation details of NewValue in the client/v2/autocli/flag/ directory to verify context usage.
rg --type go 'func (.*) NewValue\(' -A 10 client/v2/autocli/flag/

Length of output: 7825

client/v2/autocli/flag/interface.go (1)

13-13: Ensure all implementations of NewValue correctly handle the context pointer without side effects.

client/v2/autocli/flag/timestamp.go (1)

13-13: Confirm the intended use of context.Context as a pointer in NewValue and validate its implementation across the system.

Verification successful

The results show that the NewValue function implementations in timestamp.go and other related files correctly handle the context.Context pointer, aligning with the overall pattern in the codebase. The use of context pointers is consistent and appears to be implemented correctly.

  • timestamp.go: The NewValue function returns a timestampValue without directly utilizing the context, which is consistent with its intended use.
  • Other related files show similar patterns of correct context handling and struct initialization.

No issues have been found with the usage of context.Context pointers in the NewValue function.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Search for usage of NewValue in timestamp related code to ensure correct context handling.
rg --type go 'NewValue\('

Length of output: 2908



Script:

#!/bin/bash
# Description: Extract the implementation of NewValue in timestamp.go and related files to verify correct context handling.
ast-grep --lang go --pattern 'func ($_ $_) NewValue($_, $_) $_' --json

Length of output: 8222

client/v2/autocli/keyring/keyring.go (1)

1-47: The implementation of KeyringImpl and its methods are well-designed, following Go's best practices for context usage and interface implementation. Good job on encapsulating keyring functionality in a clean and extendable way.

client/v2/autocli/flag/json_message.go (1)

23-23: The change to use a pointer for the context in NewValue is well-implemented and aligns with Go best practices for performance optimization.

client/v2/autocli/flag/messager_binder.go (1)

28-30: The addition of messageType to MessageBinder enhances the flexibility and dynamic handling of protobuf messages.

client/v2/autocli/flag/list.go (1)

55-55: The update to use a context pointer in compositeListType is consistent with other parts of the module and enhances performance.

Also applies to: 71-71

client/v2/autocli/flag/address.go (3)

22-23: LGTM! The update to pass a pointer to the context is consistent with the PR's objective to refine context handling.


32-33: LGTM! Consistent changes with the context pointer, ensuring uniformity across the module.


86-90: Good application of consistent context handling across different types.

client/v2/autocli/msg.go (2)

136-136: Handling government proposals and setting SilenceUsage to true are significant changes. Ensure these are well-documented and tested, as they could affect user interactions and error visibility.

Also applies to: 180-180


113-113: Ensure that the addition of the command to the parent command is error-checked to prevent runtime panics if the command cannot be added.

client/v2/autocli/query_test.go (1)

687-687: The error propagation in buildModuleQueryCommand follows Go's idiomatic approach by returning errors to the caller, which is a good practice for error management in Go applications.

@@ -684,7 +684,7 @@ func TestNotFoundErrorsQuery(t *testing.T) {
b.AddQueryConnFlags = nil
b.AddTxConnFlags = nil

buildModuleQueryCommand := func(moduleName string, cmdDescriptor *autocliv1.ServiceCommandDescriptor) (*cobra.Command, error) {
buildModuleQueryCommand := func(_ string, cmdDescriptor *autocliv1.ServiceCommandDescriptor) (*cobra.Command, error) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tip

Codebase Verification

The function buildModuleQueryCommand is still being called with the old signature, including the moduleName parameter. These instances need to be updated to match the new function signature.

  • client/v2/autocli/query_test.go:
    • Line 687: _, err := buildModuleQueryCommand("test", &autocliv1.ServiceCommandDescriptor{Service: "foo"})
    • Lines following 687: Multiple instances of buildModuleQueryCommand called with moduleName.

Please update all instances of buildModuleQueryCommand to match the new signature that does not include moduleName.

Analysis chain

The removal of the moduleName parameter in buildModuleQueryCommand simplifies the function signature. Ensure that all references to this function have been updated accordingly to pass the correct cmdDescriptor without expecting a module name.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify all function calls to `buildModuleQueryCommand` match the new signature.

# Test: Search for the function usage. Expect: Only occurances of the new signature.
rg --type go $'buildModuleQueryCommand'

Length of output: 3331



Script:

#!/bin/bash
# Description: Verify function calls to `buildModuleQueryCommand` and `buildModuleQueryCommandOptional` match the new signature.

# Test: Search for function calls and check for the correct number of parameters.
rg --type go 'buildModuleQueryCommand\('
rg --type go 'buildModuleQueryCommandOptional\('

Length of output: 554

@@ -14,7 +14,7 @@ import (

type pubkeyType struct{}

func (a pubkeyType) NewValue(_ context.Context, _ *Builder) Value {
func (a pubkeyType) NewValue(_ *context.Context, _ *Builder) Value {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Passing context by pointer is unconventional and could lead to unintended side effects. Recommend reverting to passing context.Context by value unless there's a specific reason for this change.

@@ -14,7 +14,7 @@ type binaryType struct{}

var _ Value = (*fileBinaryValue)(nil)

func (f binaryType) NewValue(context.Context, *Builder) Value {
func (f binaryType) NewValue(*context.Context, *Builder) Value {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As with other files, passing context.Context by pointer is not recommended. Consider reverting to passing by value to maintain the immutability of the context.

@@ -14,7 +14,7 @@ type enumType struct {
enum protoreflect.EnumDescriptor
}

func (b enumType) NewValue(context.Context, *Builder) Value {
func (b enumType) NewValue(*context.Context, *Builder) Value {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The change to pass context.Context by pointer in enumType.NewValue should be reconsidered. Contexts are designed to be immutable and passed by value in Go.

Comment on lines 150 to 167
func getKeyringFromCtx(ctx *context.Context) keyring.Keyring {
if ctx != nil {
ctx := *ctx

if clientCtx := ctx.Value(client.ClientContextKey); clientCtx != nil {
k, err := sdkkeyring.NewAutoCLIKeyring(clientCtx.(*client.Context).Keyring)
if err != nil {
panic(fmt.Errorf("failed to create keyring: %w", err))
}

return k
} else if k := ctx.Value(keyring.KeyringContextKey); k != nil {
return k.(*keyring.KeyringImpl)
}
}

return keyring.NoKeyring{}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using panics for error handling in library code is not ideal. It's better to return errors to allow calling code to handle them gracefully.

- panic(fmt.Errorf("failed to create keyring: %w", err))
+ return nil, fmt.Errorf("failed to create keyring: %w", err)

Committable suggestion was skipped due to low confidence.

Comment on lines +56 to +67
// we need to use a pointer to the context as the correct context is set in the RunE function
// however we need to set the flags before the RunE function is called
ctx := cmd.Context()
binder, err := b.AddMessageFlags(&ctx, cmd.Flags(), inputType, options)
if err != nil {
return nil, err
}

cmd.Args = binder.CobraArgs

cmd.RunE = func(cmd *cobra.Command, args []string) error {
ctx = cmd.Context()

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tip

Codebase Verification

The context management in client/v2/autocli/common.go is inconsistent. The code snippet provided shows the use of cmd.Context() directly, which contradicts the comment about needing to use a pointer to the context.

  • client/v2/autocli/common.go: Lines 56-67, usage of cmd.Context() directly.
Analysis chain

The update to use a pointer for the context in the command setup is in line with the PR's objective of consistent context usage. Ensure that the context is correctly managed across command executions.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify proper context management in command executions.

# Test: Search for context usage in command setups. Expect: Only usage of pointer context.
rg --type go $'cmd.Context()'

Length of output: 3486


:::tip
This provides a better UX as it allows to resolve key names directly from the keyring in all transactions and commands.
AutoCLI provides a better UX than normal CLI as it allows to resolve key names directly from the keyring in all transactions and commands.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clarify the language in the tip box for better readability.

- AutoCLI provides a better UX than normal CLI as it allows to resolve key names directly from the keyring in all transactions and commands.
+ AutoCLI provides a better UX than a normal CLI by allowing direct resolution of key names from the keyring in all transactions and commands.
Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
AutoCLI provides a better UX than normal CLI as it allows to resolve key names directly from the keyring in all transactions and commands.
AutoCLI provides a better UX than a normal CLI by allowing direct resolution of key names from the keyring in all transactions and commands.
Tools
LanguageTool

[grammar] ~81-~81: Did you mean “resolving”? Or maybe you should add a pronoun? In active voice, ‘allow’ + ‘to’ takes an object, usually a pronoun. (ALLOW_TO)
Context: ... better UX than normal CLI as it allows to resolve key names directly from the keyring in ...

@@ -274,7 +269,7 @@ func (b *Builder) addMessageFlags(ctx context.Context, flagSet *pflag.FlagSet, m
}

// bindPageRequest create a flag for pagination
func (b *Builder) bindPageRequest(ctx context.Context, flagSet *pflag.FlagSet, field protoreflect.FieldDescriptor) (HasValue, error) {
func (b *Builder) bindPageRequest(ctx *context.Context, flagSet *pflag.FlagSet, field protoreflect.FieldDescriptor) (HasValue, error) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ensure correct usage of context.Context.

- func (b *Builder) bindPageRequest(ctx *context.Context, flagSet *pflag.FlagSet, field protoreflect.FieldDescriptor) (HasValue, error) {
+ func (b *Builder) bindPageRequest(ctx context.Context, flagSet *pflag.FlagSet, field protoreflect.FieldDescriptor) (HasValue, error) {
Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
func (b *Builder) bindPageRequest(ctx *context.Context, flagSet *pflag.FlagSet, field protoreflect.FieldDescriptor) (HasValue, error) {
func (b *Builder) bindPageRequest(ctx context.Context, flagSet *pflag.FlagSet, field protoreflect.FieldDescriptor) (HasValue, error) {

@@ -291,7 +286,7 @@
}

// addFieldFlag adds a flag for the provided field to the flag set.
func (b *Builder) addFieldFlag(ctx context.Context, flagSet *pflag.FlagSet, field protoreflect.FieldDescriptor, opts *autocliv1.FlagOptions, options namingOptions) (name string, hasValue HasValue, err error) {
func (b *Builder) addFieldFlag(ctx *context.Context, flagSet *pflag.FlagSet, field protoreflect.FieldDescriptor, opts *autocliv1.FlagOptions, options namingOptions) (name string, hasValue HasValue, err error) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct the parameter type for better alignment with Go conventions.

- func (b *Builder) addFieldFlag(ctx *context.Context, flagSet *pflag.FlagSet, field protoreflect.FieldDescriptor, opts *autocliv1.FlagOptions, options namingOptions) (name string, hasValue HasValue, err error) {
+ func (b *Builder) addFieldFlag(ctx context.Context, flagSet *pflag.FlagSet, field protoreflect.FieldDescriptor, opts *autocliv1.FlagOptions, options namingOptions) (name string, hasValue HasValue, err error) {
Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
func (b *Builder) addFieldFlag(ctx *context.Context, flagSet *pflag.FlagSet, field protoreflect.FieldDescriptor, opts *autocliv1.FlagOptions, options namingOptions) (name string, hasValue HasValue, err error) {
func (b *Builder) addFieldFlag(ctx context.Context, flagSet *pflag.FlagSet, field protoreflect.FieldDescriptor, opts *autocliv1.FlagOptions, options namingOptions) (name string, hasValue HasValue, err error) {

@@ -17,7 +17,7 @@ type coinValue struct {
value *basev1beta1.Coin
}

func (c coinType) NewValue(context.Context, *Builder) Value {
func (c coinType) NewValue(*context.Context, *Builder) Value {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tip

Codebase Verification

The verification process reveals that the NewValue function in coin.go and several other files uses the context.Context pointer without actually utilizing it within the function body. This indicates an inconsistency in the usage of the context pointer across the codebase.

  • client/v2/autocli/flag/coin.go: func (c coinType) NewValue(*context.Context, *Builder) Value { return &coinValue{} }
  • Similar patterns are observed in other files like timestamp.go, binary.go, etc.

Given this, it appears that the context pointer is not necessary in its current form and could be removed to maintain code consistency and clarity.

  • client/v2/autocli/flag/coin.go
  • client/v2/autocli/flag/timestamp.go
  • client/v2/autocli/flag/binary.go
Analysis chain

Check the necessity and correct implementation of using context.Context as a pointer in NewValue. Ensure it aligns with best practices.


The output from the shell script shows multiple instances of the NewValue function across different files, with some using the context pointer and others not. This suggests inconsistent usage of the context pointer in the NewValue function across the codebase.

To verify the necessity and correct implementation of the context pointer in the NewValue function, we should:

  1. Check if the context pointer is actually used within the NewValue function in coin.go.
  2. Verify if there are any specific reasons or patterns for using the context pointer in some instances and not in others.

Let's proceed with these steps.

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the correct and necessary use of context pointer in NewValue for coin related operations.
rg --type go 'NewValue\('

Length of output: 2908



Script:

#!/bin/bash
# Check if the context pointer is used within the NewValue function in coin.go
ast-grep --lang go --pattern 'func (c coinType) NewValue(ctx *context.Context, b *Builder) Value {
  $$$
}' client/v2/autocli/flag/coin.go

# Check if there are any comments or documentation explaining the use of context pointer in NewValue
rg --type go 'NewValue\(' --context 5

Length of output: 19107

Copy link
Contributor

coderabbitai bot commented Jun 19, 2024

Actions performed

Reviews paused.

Copy link
Member

@facundomedica facundomedica left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

utACK

@julienrbrt julienrbrt added this pull request to the merge queue Jun 19, 2024
Merged via the queue into main with commit ca195c1 Jun 19, 2024
66 checks passed
@julienrbrt julienrbrt deleted the julien/autocli branch June 19, 2024 14:59
mergify bot pushed a commit that referenced this pull request Jun 19, 2024
(cherry picked from commit ca195c1)

# Conflicts:
#	client/v2/CHANGELOG.md
#	client/v2/README.md
#	client/v2/autocli/app.go
#	client/v2/autocli/common.go
#	client/v2/autocli/common_test.go
#	client/v2/autocli/flag/pubkey.go
#	client/v2/autocli/msg.go
#	simapp/simd/cmd/root.go
julienrbrt added a commit that referenced this pull request Jun 19, 2024
Co-authored-by: Julien Robert <julien@rbrt.fr>
Reecepbcups pushed a commit to rollchains/cosmos-sdk that referenced this pull request Jul 19, 2024
* build(deps): Bump github.com/cosmos/gogoproto from 1.4.12 to 1.5.0 (cosmos#20567)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>

* refactor(x/authz,x/feegrant): provide updated keeper in depinject (cosmos#20590)

* docs: Update high level overview and introduction (backport cosmos#20535) (cosmos#20627)

Co-authored-by: samricotta <37125168+samricotta@users.noreply.github.com>
Co-authored-by: marbar3778 <marbar3778@yahoo.com>

* fix: Properly parse json in the wait-tx command. (backport cosmos#20631) (cosmos#20660)

Co-authored-by: Daniel Wedul <github@wedul.com>
Co-authored-by: marbar3778 <marbar3778@yahoo.com>

* docs: remove Ineffective code block (backport cosmos#20703) (cosmos#20711)

* feat(client): Add flag & reading mnemonic from file (backport cosmos#20690) (cosmos#20712)

Co-authored-by: Hieu Vu <72878483+hieuvubk@users.noreply.github.com>
Co-authored-by: marbar3778 <marbar3778@yahoo.com>

* fix: nested multisig signatures using CLI (backport cosmos#20438) (cosmos#20692)

Co-authored-by: Facundo Medica <14063057+facundomedica@users.noreply.github.com>
Co-authored-by: marbar3778 <marbar3778@yahoo.com>
Co-authored-by: Facundo <facundomedica@gmail.com>

* feat(client/v2): get keyring from context (backport cosmos#19646) (cosmos#20727)

Co-authored-by: Julien Robert <julien@rbrt.fr>

* docs(x/group): orm codespace comment (backport cosmos#20749) (cosmos#20751)

* feat: parse home flag earlier (backport cosmos#20771) (cosmos#20777)

Co-authored-by: Julien Robert <julien@rbrt.fr>

* build(deps): Bump github.com/cometbft/cometbft from 0.38.7 to 0.38.8 (cosmos#20805)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>

* build(deps): Bump github.com/cometbft/cometbft from 0.38.8 to 0.38.9 (cosmos#20836)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>

* fix(simulation): fix the problem of `validator set is empty after InitGenesis` in simulation test (backport cosmos#18196) (cosmos#20897)

Co-authored-by: Chenqun Lu <luchenqun@qq.com>
Co-authored-by: Julien Robert <julien@rbrt.fr>

* fix(simulation): Fix all problems `make test-sim-custom-genesis-fast` for simulation test. (backport cosmos#17911) (cosmos#20909)

Co-authored-by: Chenqun Lu <luchenqun@qq.com>
Co-authored-by: Julien Robert <julien@rbrt.fr>

* chore: prepare v0.50.8 (cosmos#20910)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Julien Robert <julien@rbrt.fr>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Co-authored-by: samricotta <37125168+samricotta@users.noreply.github.com>
Co-authored-by: marbar3778 <marbar3778@yahoo.com>
Co-authored-by: Daniel Wedul <github@wedul.com>
Co-authored-by: Hieu Vu <72878483+hieuvubk@users.noreply.github.com>
Co-authored-by: Facundo Medica <14063057+facundomedica@users.noreply.github.com>
Co-authored-by: Facundo <facundomedica@gmail.com>
Co-authored-by: Chenqun Lu <luchenqun@qq.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport/v0.50.x PR scheduled for inclusion in the v0.50's next stable release C:CLI
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug]: tx bank send fails with invalid bech32 when using key alias
6 participants