-
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
feat(store/v2): Implement the GetProof
for multi store
#18736
Conversation
WalkthroughThe codebase has undergone significant changes to enhance the cryptographic proof system, particularly for handling multi-store keys and their proofs. The modifications include the addition of new methods for marshaling and unmarshaling Changes
Assessment against linked issues
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 Configration File (
|
@cool-develope your pull request is missing a changelog! |
// encodeBytesSlice length-prefixes the byte slice and returns it. | ||
func EncodeBytesSlice(bz []byte) ([]byte, error) { | ||
buf := bufPool.Get().(*bytes.Buffer) | ||
buf.Reset() | ||
defer bufPool.Put(buf) | ||
|
||
err := EncodeBytes(buf, bz) | ||
|
||
bytesCopy := make([]byte, buf.Len()) | ||
copy(bytesCopy, buf.Bytes()) | ||
|
||
return bytesCopy, 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.
The EncodeBytesSlice
function uses a buffer pool to encode bytes, which is a good practice. However, ensure that the error from EncodeBytes
is checked before making a copy of the buffer's bytes.
err := EncodeBytes(buf, bz)
+ if err != nil {
+ return nil, err
+ }
bytesCopy := make([]byte, buf.Len())
copy(bytesCopy, buf.Bytes())
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.
// encodeBytesSlice length-prefixes the byte slice and returns it. | |
func EncodeBytesSlice(bz []byte) ([]byte, error) { | |
buf := bufPool.Get().(*bytes.Buffer) | |
buf.Reset() | |
defer bufPool.Put(buf) | |
err := EncodeBytes(buf, bz) | |
bytesCopy := make([]byte, buf.Len()) | |
copy(bytesCopy, buf.Bytes()) | |
return bytesCopy, err | |
// encodeBytesSlice length-prefixes the byte slice and returns it. | |
func EncodeBytesSlice(bz []byte) ([]byte, error) { | |
buf := bufPool.Get().(*bytes.Buffer) | |
buf.Reset() | |
defer bufPool.Put(buf) | |
err := EncodeBytes(buf, bz) | |
if err != nil { | |
return nil, err | |
} | |
bytesCopy := make([]byte, buf.Len()) | |
copy(bytesCopy, buf.Bytes()) | |
return bytesCopy, 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.
any chance we could get a regression test with store/v1 to make sure it all works the same. It would help in providing assurances to relayers and others
In PR #19002, we are using same test vectors with store v1 after prehash refactoring, what kind of regression tests do you want? like comparing the proof of store/v1? |
treeRoots, err := result.ProofOps[0].Run([][]byte{[]byte("value1")}) | ||
s.Require().NoError(err) | ||
s.Require().Equal(treeRoots[0], storeHash) | ||
expRoots, err := result.ProofOps[1].Run([][]byte{storeHash}) |
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.
here, we are testing the proof verification
if its the same tests with the same output then maybe that enough? |
same root hash and valid proof, I think it's enough |
Key []byte | ||
Value []byte | ||
Version uint64 | ||
ProofOps []CommitmentOp |
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.
The QueryResult
struct has been modified to use ProofOps
instead of Proof
, changing the type from CommitmentOp
to []CommitmentOp
. This change aligns with the PR objectives to support multi-store proofs. However, ensure that all references and usages of QueryResult
throughout the codebase are updated to handle the new ProofOps
field correctly.
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.
can we add go docs to all missing/modified functions
Description
Closes: #18598
CommitInfo
metadata storing in the commitment storeAuthor 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.
I have...