-
Notifications
You must be signed in to change notification settings - Fork 3.8k
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(crypto/multisig): set compat.AminoBz when unpacking interfaces #20972
Conversation
WalkthroughWalkthroughThe changes introduce a conditional block in the Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant LegacyAminoPubKey
participant pk
participant any.UnmarshalAmino
User->>LegacyAminoPubKey: Call UnpackInterfaces()
activate LegacyAminoPubKey
LegacyAminoPubKey->>pk: Check if pk is not nil
alt pk is not nil
LegacyAminoPubKey->>pk: Call pk.Bytes()
pk-->>LegacyAminoPubKey: Return bytes
LegacyAminoPubKey->>any.UnmarshalAmino: Unmarshal bytes
any.UnmarshalAmino-->>LegacyAminoPubKey: Return unmarshaled object
LegacyAminoPubKey->>compat.aminoBz: Set value with unmarshaled object
end
deactivate LegacyAminoPubKey
LegacyAminoPubKey-->>User: Return from UnpackInterfaces()
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 as PR comments)
Additionally, you can add CodeRabbit Configuration File (
|
@damiannolan your pull request is missing a changelog! |
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: 1
Outside diff range, codebase verification and nitpick comments (1)
crypto/keys/multisig/multisig.go (1)
Line range hint
173-181
: Review thepackPubKeys
method for error handling and performance.The
packPubKeys
method includes a loop that processes each public key, converting it to anAny
type and settingcompat.AminoBz
. This is consistent with the changes made in theUnpackInterfaces
method and helps maintain symmetry. However, the repeated call toUnmarshalAmino
inside the loop could be a performance concern. Consider caching results or optimizing the loop to reduce the overhead.- if err := anyPubKeys[i].UnmarshalAmino(pubKeys[i].Bytes()); err != nil { + bytes := pubKeys[i].Bytes() + if bytes == nil { + return nil, fmt.Errorf("pubKeys[%d].Bytes() returned nil", i) + } + if err := anyPubKeys[i].UnmarshalAmino(bytes); err != nil { return nil, err }
Review details
Configuration used: .coderabbit.yml
Review profile: CHILL
Files selected for processing (1)
- crypto/keys/multisig/multisig.go (1 hunks)
Additional context used
Path-based instructions (1)
crypto/keys/multisig/multisig.go (1)
Pattern
**/*.go
: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.
if pk != nil { | ||
// sets the compat.aminoBz value | ||
if err = any.UnmarshalAmino(pk.Bytes()); err != nil { | ||
return err | ||
} | ||
} |
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.
Ensure proper error handling and nil checks in UnpackInterfaces
.
The changes introduced in the UnpackInterfaces
method are crucial for maintaining symmetry between constructed and unmarshalled pubkeys. The conditional block that sets compat.AminoBz
is well-placed and correctly checks for pk != nil
before proceeding. However, it's important to ensure that pk.Bytes()
does not return nil or cause a panic. Consider adding a nil check or error handling for pk.Bytes()
.
Additionally, the use of UnpackAny
and UnmarshalAmino
should be closely monitored for performance implications, especially in a loop, as these operations can be costly.
- if err = any.UnmarshalAmino(pk.Bytes()); err != nil {
+ bytes := pk.Bytes()
+ if bytes == nil {
+ return fmt.Errorf("pk.Bytes() returned nil")
+ }
+ if err = any.UnmarshalAmino(bytes); err != nil {
return 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. Thoroughly test & benchmark the code to ensure it meets the requirements.
if pk != nil { | |
// sets the compat.aminoBz value | |
if err = any.UnmarshalAmino(pk.Bytes()); err != nil { | |
return err | |
} | |
} | |
if pk != nil { | |
// sets the compat.aminoBz value | |
bytes := pk.Bytes() | |
if bytes == nil { | |
return fmt.Errorf("pk.Bytes() returned nil") | |
} | |
if err = any.UnmarshalAmino(bytes); err != nil { | |
return err | |
} | |
} |
Please DNM, I'm investigating 🕵️ |
Thank you @facundomedica. Will there be another patch release of v0.50 cut soon? |
Yes! This week. |
Description
Follow up from: #20438
ref: cosmos/ibc-go#6828 (comment)
Feel free to close this PR if this is not strictly required, but it will force us to use some workaround in tests with unmarshalling for v0.50.8, as there is not symmetry between pubkeys created with constructor and pubkeys unmarshalled from bytes in store.
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...
!
in the type prefix if API or client breaking changeCHANGELOG.md
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.
Please see Pull Request Reviewer section in the contributing guide for more information on how to review a pull request.
I have...
Summary by CodeRabbit
pk
is not nil.