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

fix(x/auth): check if simulation in verifyIsOnCurve #19099

Merged
merged 7 commits into from
Jan 24, 2024

Conversation

JulianToledano
Copy link
Contributor

@JulianToledano JulianToledano commented Jan 18, 2024

Description

When running tx simulate it results in the following error if gas flag is not set to auto:
rpc error: code = Unknown desc = rpc error: code = Unknown desc = malformed public key: invalid length: 0 with gas used: '7240': unknown request

This happens because an empty public key is set for simulation when the gas is not set to 'auto'.

func (f Factory) getSimPK() (cryptotypes.PubKey, error) {
var (
ok bool
pk cryptotypes.PubKey = &secp256k1.PubKey{} // use default public key type
)
if f.simulateAndExecute && f.keybase != nil {
record, err := f.keybase.Key(f.fromName)
if err != nil {
return nil, err
}
pk, ok = record.PubKey.GetCachedValue().(cryptotypes.PubKey)
if !ok {
return nil, errors.New("cannot build signature for simulation, failed to convert proto Any to public key")
}
}
return pk, nil
}

This Pr automatically sets gas to auto avoiding the error.


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

@JulianToledano JulianToledano requested a review from a team as a code owner January 18, 2024 10:09
Copy link
Contributor

coderabbitai bot commented Jan 18, 2024

Walkthrough

The updates across the files in question focus primarily on handling simulation issues related to gas setting and public key verification in transaction processing. A new automatic setting of gas=auto during simulations has been introduced to prevent errors associated with empty public keys. Additionally, the transaction validation flow has become more efficient with the consolidation of various ante decorators into a single SigVerification decorator, which also helps in reducing gas consumption.

Changes

File Summary
x/auth/client/cli/tx_simulate.go Added automatic setting of gas=auto to prevent empty simPk during simulations and fixed related bugs.
x/auth/CHANGELOG.md Introduced a check to avoid malformed public key errors, allowed empty public keys in signatures, and consolidated ante decorators to optimize gas consumption.
x/auth/ante/sigverify.go Updated verifyIsOnCurve function to include a nil check for pubKey.Bytes() to prevent errors when pubKey.Key is nil.

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:

Note: Auto-reply has been disabled for this repository by the repository owner. The CodeRabbit bot will not respond to your comments unless it is explicitly tagged.

  • 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 tests 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 from git and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit tests.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

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 a review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @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.
  • The JSON schema for the configuration file is available here.
  • 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/coderabbit-overrides.v2.json

CodeRabbit Discord Community

Join our Discord Community to get help, request features, and share feedback.

@@ -49,3 +49,5 @@ Ref: https://keepachangelog.com/en/1.0.0/
* [#18817](https://github.com/cosmos/cosmos-sdk/pull/18817) SigVerification, GasConsumption, IncreaseSequence ante decorators have all been joined into one SigVerification decorator. Gas consumption during TX validation flow has reduced.

### Bug Fixes

* [#19099](https://github.com/cosmos/cosmos-sdk/pull/19099) Sets automatically `gas=auto` for simulation to avoid empty pk error.
Copy link
Contributor

Choose a reason for hiding this comment

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

The changelog entry for PR 19099 correctly summarizes the bug fix. However, ensure that the term "pk" is understood to mean "public key" by all users. It may be beneficial to use the full term for clarity.

- * [#19099](https://github.com/cosmos/cosmos-sdk/pull/19099) Sets automatically `gas=auto` for simulation to avoid empty pk error.
+ * [#19099](https://github.com/cosmos/cosmos-sdk/pull/19099) Automatically sets `gas=auto` for simulation to avoid an error with an empty public key.

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
* [#19099](https://github.com/cosmos/cosmos-sdk/pull/19099) Sets automatically `gas=auto` for simulation to avoid empty pk error.
* [#19099](https://github.com/cosmos/cosmos-sdk/pull/19099) Automatically sets `gas=auto` for simulation to avoid an error with an empty public key.

@julienrbrt
Copy link
Member

Should this be backported? Is the bug present on 0.50 as well?

@julienrbrt julienrbrt added backport/v0.50.x PR scheduled for inclusion in the v0.50's next stable release and removed backport/v0.50.x PR scheduled for inclusion in the v0.50's next stable release labels Jan 18, 2024
@julienrbrt
Copy link
Member

So I have checked, it does not happen in v0.50 (which doesn't have the auto flag).
Due to what is due this regression?

@JulianToledano
Copy link
Contributor Author

Due to what is due this regression?

Check that and looks like the new verifyIsOnCurve check is causing the error as pubkey.Key = nil

@julienrbrt
Copy link
Member

Due to what is due this regression?

Check that and looks like the new verifyIsOnCurve check is causing the error as pubkey.Key = nil

Shouldn't we then add a check before that instead of this hack?

@JulianToledano
Copy link
Contributor Author

JulianToledano commented Jan 22, 2024

Due to what is due this regression?

Check that and looks like the new verifyIsOnCurve check is causing the error as pubkey.Key = nil

Shouldn't we then add a check before that instead of this hack?

yes, agree. I wonder if we can always asume pubkey.Key = nil is because we are simulating.

@alexanderbez
Copy link
Contributor

The public key should always be nil when simulating

@JulianToledano
Copy link
Contributor Author

@tac0turtle @julienrbrt @alexanderbez
updated to check if we're simulating in verifyIsOnCurve

@julienrbrt julienrbrt changed the title fix(x/auth): sets gas=auto for simulate fix(x/auth): check if simulation in verifyIsOnCurve Jan 23, 2024
Copy link
Member

@julienrbrt julienrbrt left a comment

Choose a reason for hiding this comment

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

utACK

@github-actions github-actions bot removed the C:CLI label Jan 23, 2024
@tac0turtle tac0turtle added this pull request to the merge queue Jan 24, 2024
Merged via the queue into main with commit 38d56db Jan 24, 2024
59 of 60 checks passed
@tac0turtle tac0turtle deleted the julian/simulate-gas-auto branch January 24, 2024 13:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants