feat(store/v2): support queries via RootStore (#18169)

This commit is contained in:
Aleksandr Bezobchuk
2023-10-20 15:45:48 +00:00
committed by GitHub
parent 912c74248b
commit 5cd5003a7a
3 changed files with 75 additions and 21 deletions
+22 -4
View File
@@ -7,7 +7,6 @@ import (
"slices"
"github.com/cockroachdb/errors"
ics23 "github.com/cosmos/ics23/go"
"cosmossdk.io/log"
"cosmossdk.io/store/v2"
@@ -150,9 +149,28 @@ func (s *Store) GetLatestVersion() (uint64, error) {
return lastCommitID.Version, nil
}
// GetProof delegates the GetProof to the store's underlying SC backend.
func (s *Store) GetProof(_ string, version uint64, key []byte) (*ics23.CommitmentProof, error) {
return s.stateCommitment.GetProof(version, key)
func (s *Store) Query(storeKey string, version uint64, key []byte, prove bool) (store.QueryResult, error) {
val, err := s.stateStore.Get(storeKey, version, key)
if err != nil {
return store.QueryResult{}, err
}
result := store.QueryResult{
Key: key,
Value: val,
Version: version,
}
if prove {
proof, err := s.stateCommitment.GetProof(version, key)
if err != nil {
return store.QueryResult{}, err
}
result.Proof = proof
}
return result, nil
}
// LoadVersion loads a specific version returning an error upon failure.
+6 -7
View File
@@ -69,10 +69,9 @@ func (s *RootStoreTestSuite) TestGetBranchedKVStore() {
s.Require().Empty(bs.GetChangeset().Pairs)
}
func (s *RootStoreTestSuite) TestGetProof() {
p, err := s.rootStore.GetProof("", 1, []byte("foo"))
func (s *RootStoreTestSuite) TestQuery() {
_, err := s.rootStore.Query("", 1, []byte("foo"), true)
s.Require().Error(err)
s.Require().Nil(p)
// write and commit a changeset
bs := s.rootStore.GetBranchedKVStore("")
@@ -88,11 +87,11 @@ func (s *RootStoreTestSuite) TestGetProof() {
s.Require().Equal(workingHash, commitHash)
// ensure the proof is non-nil for the corresponding version
p, err = s.rootStore.GetProof("", 1, []byte("foo"))
result, err := s.rootStore.Query("", 1, []byte("foo"), true)
s.Require().NoError(err)
s.Require().NotNil(p)
s.Require().Equal([]byte("foo"), p.GetExist().Key)
s.Require().Equal([]byte("bar"), p.GetExist().Value)
s.Require().NotNil(result.Proof)
s.Require().Equal([]byte("foo"), result.Proof.GetExist().Key)
s.Require().Equal([]byte("bar"), result.Proof.GetExist().Value)
}
func (s *RootStoreTestSuite) TestBranch() {